网络基础 HTTP协议之HTTP消息(HTTP Message)
HTTP协议之HTTP消息(HTTP Message)
by:授客 QQ:1033553122
1. 消息类型(Message Type)
HTTP messages包含从客户端到服务器的请求和服务器到客户端的响应
HTTP-message = Request | Response;
Request和Response都采用通用消息格式来传输实体
两种类型都包含一起始行(start-line),0或更多个header域, 一暗示header域结束的空行,可能还有一个消息主体
generic-message = start-line
message-header
空行
[ message-body ]
1)起始行(start-line)
start-line= Request-Line | Status-Line
2)消息头(Message Headers)
HTTP头(HTTP header), 包含通用头(general-header),请求头(request-header), 响应头(response-header)和实体头(entity-header)
消息头书写形式
message-header = field-name : [ field-value ]
header域名(field-name)大小写敏感
通用头域(General Header Fields)
通用头域为请求和响应消息都可使用,传输实体不能使用的头域
general-header = Cache-Control
| Connection
| Date
| Pragma
| Trailer
| Transfer-Encoding
| Upgrade
| Via
| Warning
不被识别的头域被视为实体头域
3)消息主体(Message Body)
消息主体(如果有的话)用于运送与请求或响应相关的实体主体(entity-body)
格式
message-body = entity-body
|
也就是说,仅在通过传输编码对进行编码后的实体主体才与消息主体不同,否则消息主体和实体主体是相同的。
4)消息长度(Message Length)
消息长度指的是消息主体的长度;
2.  
请求(Request)
1)格式
Request = Request-Line
general-header | request-header | entity-header
空行
[ message-body ]
如图,访问http://ishouke.sohu.blog.com网址,发送的请求

2)请求行(Request-Line)
Request-Line   =
Method Request-URI HTTP-Version
说明:
1) Method
Method  = OPTION | GET | HEAD|
POST | PUT | DELETE | TRACE |CONNECT
OPTION--请求一些选项的信息
GET--请求由Request-URI所标识的信息
HEADE--请求读取由URL所标识的信息的首部
POST--给服务器添加信息(例如,注释)
PUT--在指明的URI下存储一个文档
DELETE--删除指明的URL所标志的资源
TRACE--用来进行回环测试的请求报文
CONNECT--用于代理服务器
(方法的说明待补充)
3)Request-URI
统一资源标识符(Uniform Resource
Identifier),标识了方法所请求的资源。
Request-URI = "*" | absoluteURI |
abs_path | authority
*:代表不是请求特定资源,而是请求服务器本身,仅当method不是应用于资源时才可用.例如
OPTIONS * HTTP/1.1
说明:
absoluteURI:当向代理服务器发起请求时,必须使用绝对URI(absoluteURI)。代理服务器转发请求或通过有效缓存读取并返回响应。注意,代理服务器可能会把请求转发给另一个代理服务器或直接转发给由绝对URI指定的服务器。
为了避免循环请求,代理必须能识别所有服务器名字,包扩任意别名,本地变量和ip地址
请求行(Request-Line)的另一个例子:
GET http://www.w3.org/pub/WWW/TheProject.html
HTTP/1.1
abs_path:绝对路径
authority:仅用于CONNECT方法
Request-URI最常见的形式为用于标识一个在原始服务器或网关上的资源.在这种情况下,Request-URI必须使用绝对URI,并且URI的网络地址必须包含在HOST header域中被发送
例如,客户端想直接从原始服务器接收上述资源TheProject.html,将创建一个通往主机“www.w3.org”的80端口的TCP连接,并发送以下请求行
GET /pub/WWW/TheProject.html HTTP/1.1
Host: www.w3.org
行后接请求的剩余部分。
注意:绝对路径不能为空,如果URI中啥都没给,必须以“/”(服务器根目录)的形式给出。
代理服务器在转发请求时,不能重写从Request-URI中接收的绝对路径“abs_path”
4)请求头域(Request Header
Fields)
Request Header Fields允许客户端传递额外关于请求和客户端自身的信息给服务器
request-header = Accept
| Accept-Charset
| Accept-Encoding
| Accept-Language
| Authorization
| Expect
| From
|
Host
| If-Match
| If-Modified-Since
| If-None-Match
| If-Range
| If-Unmodified-Since
| Max-Forwards
| Proxy-Authorization
| Range
| Referer
| TE
| User-Agent
3.  
响应(Response)
1)格式
Response= Status-Line
general-header |
response-header  |
entity-header
空行
[ message-body ]
如图,访问http://ishouke.sohu.blog.com网址,发送请求后接收到的响应

2)状态行(Status-Line)
Status-Line = HTTP-Version
Status-Code Reason-Phrase
说明:
1)Status-Code和Reason-Phrase
Status-Code:3个数字的整数
Reason-Phrase:对Status-Code简短的文本描述
Status-Code的第一个数字定义了响应的类型:
1xx:
通知信息的 -
请求收到,继续处理
2xx:
成功-
操作被成功,理解和接受
3xx:
重定向 -
为了完成请求采取进一步的操作
4xx:
客户端错误-
请求包含无法实现或者包含语法错误
5xx:
服务器错误 -
服务器无法完成合法的请求
Status-Code   
=
"100"  ;
Continue
| "101"  ;
Switching Protocols
| "200"  ;
OK
| "201"  ;
Created
| "202"  ;
Accepted
| "203"  ;
Non-Authoritative Information
| "204"  ;
No Content
| "205"  ;
Reset Content
| "206"  ;
Partial Content
| "300"  ;
Multiple Choices
| "301"  ;
Moved Permanently
| "302"  ;
Found
| "303"  ;
See Other
| "304"  ;
Not Modified
| "305"  ;
Use Proxy
| "307"  ;
Temporary Redirect
| "400"  ;
Bad Request
| "401"  ;
Unauthorized
| "402"  ;
Payment Required
| "403"  ;
Forbidden
| "404"  ;
Not Found
| "405"  ;
Method Not Allowed
| "406"  ;
Not Acceptable
| "407"  ;
Proxy Authentication Required
| "408"  ;
Request Time-out
| "409"  ;
Conflict
| "410"  ;
Gone
| "411"  ;
Length Required
| "412"  ;
Precondition Failed
| "413"  ;
Request Entity Too Large
| "414"  ;
Request-URI Too Large
| "415"  ;
Unsupported Media Type
| "416"  ;
Requested range not satisfiable
| "417"  ;
Expectation Failed
| "500"  ;
Internal Server Error
| "501"  ;
Not Implemented
| "502"  ;
Bad Gateway
| "503"  ;
Service Unavailable
| "504"  ;
Gateway Time-out
| "505"  ;
HTTP Version not supported
| extension-code
extension-code = 3DIGIT
Reason-Phrase = *
3)响应头域(Response Header
Fields)
response-header
fields允许服务器传递不能放在状态行(Status-Line)的关于响应的额外信息.这些头域给出了关于服务器和更多关于进一步获得由Request-URI标识的资源
response-header =
Accept-Ranges
| Age
| ETag
| Location
| Proxy-Authenticate
| Retry-After
| Server
| Vary
| WWW-Authenticate
无法识别的header域可以视为entity-header域
4.  
实体(Entity)
Request和Response消息如果没有被请求方法或请求状态码限制,可传送一个实体
实体有实体头域(entity-header
fields)和实体主体(entity-body),虽然有些response仅包含实体头域entity-header
1)实体头域(Entity Header
Fields)
实体头域定义了关于实体主体的维护信息,或者是关于请求标识的资源,如果没有主体的话.一些维护信息是可选的,一些是必须的.
entity-header = Allow
| Content-Encoding
| Content-Language
| Content-Length
| Content-Location
| Content-MD5
|
Content-Range
| Content-Type
| Expires
| Last-Modified
2)实体主体(Entity Body)
伴随request或response发送的entity-body(如果有的话)
entity-body仅在消息主体出现时才出现。
网络基础 HTTP协议之HTTP消息(HTTP Message)的更多相关文章
- 软件定义网络基础---NETCONF协议
		netconf协议最早被作为网管协议被提出来的,与SNMP网管协议相比较:SNMP的优势在于网络设备的监测,在大规模网管应用中有很大不足,正是针对这种不足之处,提出了NETCONF协议 一:NETCO ... 
- 网络基础 HTTP协议之http url简介
		HTTP协议之http url简介 by:授客 QQ:1033553122 http url简介 http url通过http协议,用于定位网络资源,是一种特殊类型的URI(统一资源定位) http_ ... 
- 软件定义网络基础---OpenFlow协议
		一:OpenFlow协议概述 OpenFlow协议为控制器与交换机之间的通信,提供了一种开放标准的方式.OpenFlow交换机通过安全通道与控制器进行信息交互 二:OpenFlow消息类型 (一)co ... 
- 软件定义网络基础---OF-Config协议
		交换机与控制器继续通信前,是需要对其功能.特性以及资源进行配置才能进行工作,这些配置是如何实现的?是由专门的配置协议指导完成的 一:OF-Config协议 是OpenFlow交换机管理配置协议,是Op ... 
- 网络基础 HTTP协议之缓存简介
		HTTP协议之缓存简介 by:授客 QQ:1033553122 用浏览器查看缓存 IE为例,Tools->Internet options -> View files,如图 点击图示的Vi ... 
- 三分钟网络基础-ARP协议
		什么是 ARP 协议 地址解析协议 ARP (Address Resolution Protocal):在同一局域网下,根据已知道的主机或路由器的 IP 地址,找出其相应的硬件地址. 高速缓存 每一个 ... 
- 网络编程—网络基础概览、socket,TCP/UDP协议
		网络基础概览 socket概览 socket模块—TCP/UDP的实现 TCP/UDP总结 网络基础概览 osi七层协议各层主要的协议 # 物理层传输电信号1010101010 # 数据链路层,以太网 ... 
- 网络编程基础:网络基础之网络协议、socket模块
		操作系统(简称OS)基础: 应用软件不能直接操作硬件,能直接操作硬件的只有操作系统:所以,应用软件可以通过操作系统来间接操作硬件 网络基础之网络协议: 网络通讯原理: 连接两台计算机之间的Intern ... 
- 【Linux网络基础】网络拓扑、OSI层次模型、TCP/IP协议簇
		一.前言 一个运维有时也要和网络打交道,所以具备最基本的网络知识,对一个运维人员来说是必要的.但,对于我们的工作来说这些并不是重点,因此,我不可能从最基础的网络知识开始讲起.本节内容更多是从一个梳理和 ... 
随机推荐
- 使用Dump转储文件排查线上环境服务未知问题
			利用Dump转储文件获取正式环境程序堆栈状态 服务异常找不到原因时,我们通常通过重新启动服务来尝试解决问题,但是在决定重启之前,请不要立刻重启Windows服务或站点 重启服务会让当前案发现场的内存证 ... 
- IIS:IIS 8.5下设置404错误页
			IIS版本:IIS 8.5 问题描述 搭建一个测试网站,总共就2个页面(index.php和404.php),默认首页为:index.php 当访问index.php和404.php的时候,IIS服务 ... 
- .Net 鉴权授权
			在这里总结一下工作中遇到的鉴权和授权的方法 ① 固定token的方案 通过在nginx或者代码中写死token,或者通过在限制外网访问的方式已来达到安全授权的方式 ② session方案 分布式会话方 ... 
- C# 高效率创建字符串类(StringBuilder)
			1.为什么需要StringBuilder类? 因为String类型代表不可变字符串,所以无法对当前String类型实例进行处理.所以FCL提供了System.Text.StringBuilder类型, ... 
- PPT-常用快捷键
			Ctrl+Shift+C 复制文本格式 Ctrl+Shift+V 粘贴文本格式 Ctrl+B 应用粗体格式Ctrl+U 应用下划线Ctrl+l 应用斜体格式 全选 Ctrl + A 光标之后 ... 
- 探讨e.target与e.currentTarget
			target与currentTarget两者既有区别,也有联系,那么我们就来探讨下他们的区别吧,一个通俗易懂的例子解释一下两者的区别: <!DOCTYPE html> <html&g ... 
- 对称加密-AES
			假设有一个发送方在向接收方发送消息.如果没有任何加密算法,接收方发送的是一个明文消息:“我是小灰”. 如果消息被中间人截获到,即使中间人无法篡改消息,也可以窥探到消息的内容,从而暴露了通信双方的私密. ... 
- let‘s encrypt之nginx-https没有小锁
			1.使用let's encrypt 加密后的nginx,访问的时候,发现没有小锁,chrome中: 火狐浏览器上: 会看到如上信息,这是因为css.图片或javascript任然通过http提供,可以 ... 
- zoj Beautiful Number(打表)
			题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2829 题目描述: Mike is very lucky, as ... 
- multiset多重集合容器(常用的使用方法总结)
			关于C++STL中multiset集合容器的学习,看别人的代码一百遍,不如自己动手写一遍. multiset多重集合容器和set集合容器的使用方法大多相同,不同的是multiset多重集合容器允许重复 ... 
