Http报文会像河水一样流动,不管是请求还是响应报文,所有报文都会向下游流动。
描述的起始行
包含属性的首部(header)块
包含数据的主体部分(body)
起始行和首部就是由行分隔的ASCII文本,每行都以一个回车符(ASCII码13)和一个换行符(ASCII码10)作为结束。称为CRLF。
请求报文起始行:method url version(http版本)
响应报文起始行:version status reason-phrase(原因短语)
可以有零个或多个首部,每个首部都包含一个名字加冒号,然后是一个可选的空格。再然后是值和CRLF结束。
HEAD:和GET很类似,但服务器在响应中只返回首部,不返回实体的主体部分
PUT:会向服务器写入文档,允许用户对内容进行修改
POST: 用来向服务器输入数据,通常用来支持html的表单,把表单中的数据发往服务器。
TRACE:客户端发起一个请求,这个请求可能会经过防火墙、代理、网关、或者其他一些应用,每个中间节点都可能会修改原始的HTTP请求。TRACE允许客户端在最终将请求发送给服务器时,看看它变成了什么样子。行程最后一站的服务器会弹回一条TRACE响应,并在响应主体中携带它收到的原始请求报文。这样客户端就可以看到,原始请求报文是否或者如何被修改过。
OPTIONS:请求web服务器告知其支持的各种功能。可以询问服务器通常支持哪些method,或者对某些特殊资源支持哪些方法。
DELETE:请服务器删除请求url所指定的资源。
HTTP被设计成字段可扩展。并不是所以扩展方法都被正式定义了。
LOCK 允许用户锁定资源,比如可在编辑某个资源时将其锁定,以防别人对其同时进行修改。
100 continue 说明收到了请求的初始部分,请客户端继续。它的目的是:客户端有一个实体的主体部分要发送给服务器,但是希望在发送之前查看一下服务器是否会接受这个实体。
101 switching Protocols 说明服务器正在根据客户端的指定,将协议切换成update首部所列的协议
201 Created 用于创建服务器对象的请求,响应的实体主体部分中应该包含各种引用了已创建资源的URL
202 Accepted 请求已被接受,但服务器还未对其执行任何动作。不能保证服务器会完成这个请求,只是意味着在接受请求时,看起来是有效的。
203 Non-Authoritative Infomation 实体首部包含的信息不是来自源端服务器,而是来自资源的一份副本。如果中间节点上有一份资源的副本,但没有验证过,就会出现这种情况。
204 No Content 响应报文包含首部和状态行,但没有实体的主体部分。
205 Reset Content 负责告知浏览器清除当前页面中所有的html表单元素。
206 Partial Content 成功执行了一个部分或range(范围)请求。客户端可以通过特殊的首部来获取部分或某个范围内的文档。
300 Multiple Choices 客户端请求一个实际指向多个资源的url时。
301 Moved permanently 在请求的资源已被移除时使用,响应的Location首部应该包含资源现在所处的url
302 Found 客户端应该使用Location首部指出的url来定位资源,但将来的请求仍应该使用老的url。
303 See Other 告知客户端应该使用另一个url来获取资源,新的url位于响应报文的Location首部。
304 Not Modified 表示资源未被修改,带有这个状态码的响应不应该包含主体部分
305 Use Proxy 必须用代理来访问资源,代理的位置由location首部给出。只是相对于这个资源必须使用代理访问。
307 Temporary Redirect 和302类似,客户端应该使用Location首部指出的url来定位资源,但将来的请求仍应该使用老的url。
401 Unauthorized 请求客户端在获取对资源的访问权之前,对自己进行认证。
404 Not Found 服务器无法找到所请求的Url
405 Method Not Allowed 发起的请求中带有不支持的方法时。应该在响应中包含Allow首部,告知客户端可以用哪些。
406 Not Acceptable 客户端可以指定自己要接收什么类型的实体,但是服务器没有与之匹配的资源时。
407 Proxy Authentication Required 与401类似,但是是要求代理服务器。
408 Request TimeOut 客户端完成请求所花的时间太长。
409 Conflict 服务器担心请求会引发冲突
410 Gone 与404类似,只是服务器曾拥有过此资源。
411 Length Required 服务器要求在请求报文中包含content-length时使用。
412 Precondition failed 客户端发起了条件请求,且其中一个条件失败了。客户端包含Except首部时发起的就是条件请求。
413 Request Entity Too Large 请求主体部分比服务器能够或者希望处理的要大
415 Unsupported Media Type 服务器无法理解或不支持请求实体的内容类型
416 Requested Range Not Satisfiable 请求指定资源的某个范围,但是范围无效或者无法满足。
417 Exceptation Failed 请求的Except首部包含了一个期望,但服务器无法满足。
500 Internal Server Error 服务器内部错误
501 Not Implemented 请求超出服务器的能力范围
503 Service Unavailable 服务器现在无法为请求提供服务,但将来可以
504 Gateway Timeout 某个网关或代理在等待另一服务器的响应,超时了。
505 HTTP Version Not Supported 服务器不支持这个协议版本
Trailer:分块传输的报文,可以用其列出报文的trailer部分的首部集合
Transfer-Encoding: 告知接收端,为了保证报文的传输,采用了什么编码方式
Update:发送端想要升级使用的新版本或新协议。
Accept-Encoding: 能接受的编码方式
条件请求首部:要求服务器对某个请求进行响应之前,确保某个条件为真。
If-Modified-Since 如果在某个时间之后被修改过
If-Range 允许对文档的某个范围进行条件请求
Range 如果服务器支持range请求,就请求资源的指定范围。
Authorization 包含了客户端提供给服务器,以便对自身进行认证的数据
Proxy-Authorization:与Authorization相同,不过是与代理认证时用的
Proxy-Connection:与Connect相同,不过是与代理连接时用的
Title:对html来说,就是html的源端给出的标题
Accept-Ranges:对此资源来说服务器可接受的范围类型
Vary:服务器查看的其他首部列表,可能会使响应发生变化
Proxy-Authenticate:来自代理的对客户端的质询列表
WWW-Authenticate 来自服务器的对客户端的质询列表
实体首部:用于应对实体主体部分的首部,如Content-Type
Content-Location:资源实际所处位置
Content-Range:在整个资源中此实体表示的字节范围
Last-Modified:实体最后一次被修改的时间