NoteDeep

报文流

http报文是http应用间发送的数据块。
报文向下游流动
Http报文会像河水一样流动,不管是请求还是响应报文,所有报文都会向下游流动。

组成部分

  1. 描述的起始行
  2. 包含属性的首部(header)块
  3. 包含数据的主体部分(body)
起始行和首部就是由行分隔的ASCII文本,每行都以一个回车符(ASCII码13)和一个换行符(ASCII码10)作为结束。称为CRLF。
主体中可包含文本或二进制数据,也可为空。

报文的语法

请求报文起始行:method url version(http版本)
响应报文起始行:version status reason-phrase(原因短语)

首部

可以有零个或多个首部,每个首部都包含一个名字加冒号,然后是一个可选的空格。再然后是值和CRLF结束。

主体部分

包含一个由任意数据组成的数据块。

http 方法
GET:通常用于请求服务器发送某个资源

HEAD:和GET很类似,但服务器在响应中只返回首部,不返回实体的主体部分
可以在不获取资源的情况下了解资源的情况
通过状态码看看它是否存在
通过查看首部,测试资源是否被修改了

PUT:会向服务器写入文档,允许用户对内容进行修改

POST: 用来向服务器输入数据,通常用来支持html的表单,把表单中的数据发往服务器。

TRACE:客户端发起一个请求,这个请求可能会经过防火墙、代理、网关、或者其他一些应用,每个中间节点都可能会修改原始的HTTP请求。TRACE允许客户端在最终将请求发送给服务器时,看看它变成了什么样子。行程最后一站的服务器会弹回一条TRACE响应,并在响应主体中携带它收到的原始请求报文。这样客户端就可以看到,原始请求报文是否或者如何被修改过。

OPTIONS:请求web服务器告知其支持的各种功能。可以询问服务器通常支持哪些method,或者对某些特殊资源支持哪些方法。

DELETE:请服务器删除请求url所指定的资源。

扩展方法
HTTP被设计成字段可扩展。并不是所以扩展方法都被正式定义了。
扩展方法示例:
LOCK 允许用户锁定资源,比如可在编辑某个资源时将其锁定,以防别人对其同时进行修改。
MKCOL 允许用户创建资源
COPY 便于在服务器上复制资源
MOVE 在服务器上移动资源

状态码分类

100~101 信息提示
100 continue 说明收到了请求的初始部分,请客户端继续。它的目的是:客户端有一个实体的主体部分要发送给服务器,但是希望在发送之前查看一下服务器是否会接受这个实体。
101 switching Protocols 说明服务器正在根据客户端的指定,将协议切换成update首部所列的协议

200~206 成功
200 OK
201 Created 用于创建服务器对象的请求,响应的实体主体部分中应该包含各种引用了已创建资源的URL
202 Accepted 请求已被接受,但服务器还未对其执行任何动作。不能保证服务器会完成这个请求,只是意味着在接受请求时,看起来是有效的。
203 Non-Authoritative Infomation 实体首部包含的信息不是来自源端服务器,而是来自资源的一份副本。如果中间节点上有一份资源的副本,但没有验证过,就会出现这种情况。
204 No Content 响应报文包含首部和状态行,但没有实体的主体部分。
205 Reset Content 负责告知浏览器清除当前页面中所有的html表单元素。
206 Partial Content 成功执行了一个部分或range(范围)请求。客户端可以通过特殊的首部来获取部分或某个范围内的文档。

300~305 重定向
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首部给出。只是相对于这个资源必须使用代理访问。
306 未使用
307 Temporary Redirect 和302类似,客户端应该使用Location首部指出的url来定位资源,但将来的请求仍应该使用老的url。

400~415 客户端错误
400 Bad Request 错误的请求
401 Unauthorized 请求客户端在获取对资源的访问权之前,对自己进行认证。
402 保留
403 Forbidden 请求被服务器拒绝了。
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 请求主体部分比服务器能够或者希望处理的要大
414 Request URI Too Long
415 Unsupported Media Type 服务器无法理解或不支持请求实体的内容类型
416 Requested Range Not Satisfiable 请求指定资源的某个范围,但是范围无效或者无法满足。
417 Exceptation Failed 请求的Except首部包含了一个期望,但服务器无法满足。

500~505 服务器错误
500 Internal Server Error 服务器内部错误
501 Not Implemented 请求超出服务器的能力范围
502 Bad Gateway 网关或代理错误
503 Service Unavailable 服务器现在无法为请求提供服务,但将来可以
504 Gateway Timeout 某个网关或代理在等待另一服务器的响应,超时了。
505 HTTP Version Not Supported 服务器不支持这个协议版本

首部

通用首部:客户端和服务器都可使用,比如Date

Connection: 允许指定与连接有关的选项
Date:报文创建时间
MIME-Version:MIME版本
Trailer:分块传输的报文,可以用其列出报文的trailer部分的首部集合
Transfer-Encoding: 告知接收端,为了保证报文的传输,采用了什么编码方式
Update:发送端想要升级使用的新版本或新协议。
Via:显示报文经过的中间节点(代理,网关)
Cache-Control 缓存指示
Pragma 传送指示,但不专用于缓存

请求首部:请求报文特有的,比如Accept

Client-Ip
From: E-mail地址
Host:接受请求的服务器的ip和端口
Referer:请求来源

Accept: 能接收哪些媒体类型
Accept-Charset: 能接受哪些字符集
Accept-Encoding: 能接受的编码方式
Accept-Language: 能接受的语言

条件请求首部:要求服务器对某个请求进行响应之前,确保某个条件为真。
Except 请求所要求的服务器行为
If-Match 如果实体标记匹配
If-Modified-Since 如果在某个时间之后被修改过
If-None-Match
If-Range 允许对文档的某个范围进行条件请求
If-Unmodified-Since
Range 如果服务器支持range请求,就请求资源的指定范围。

安全请求首部:可以对请求进行质询/响应认证
Authorization 包含了客户端提供给服务器,以便对自身进行认证的数据
Cookie 客户端用它向服务器传送一个令牌

代理请求首部:
Max-Forward: 最大的转发次数
Proxy-Authorization:与Authorization相同,不过是与代理认证时用的
Proxy-Connection:与Connect相同,不过是与代理连接时用的

响应首部: 响应报文特有的

Age:从最初创开始,响应的持续时间。
Public:支持的请求方法列表
Retry-After:请在此时间重试
Server:服务器应用程序的名称和版本
Title:对html来说,就是html的源端给出的标题
Warning:更详细的警告信息

协商首部:
Accept-Ranges:对此资源来说服务器可接受的范围类型
Vary:服务器查看的其他首部列表,可能会使响应发生变化
安全响应首部:
Proxy-Authenticate:来自代理的对客户端的质询列表
Set-Cookie:在客户端设置一个令牌
WWW-Authenticate 来自服务器的对客户端的质询列表

实体首部:用于应对实体主体部分的首部,如Content-Type

Allow:可以对此实体执行的请求方法
Location:告知客户端实体时间上位于何处

Content-Base:基础url
Content-Encoding:主体的编码方式
Content-Language:主体使用的语言
Content-Length:主体的长度
Content-Location:资源实际所处位置
Content-MD5:主体的MD5校验和
Content-Range:在整个资源中此实体表示的字节范围
Content-Type:类型

实体缓存首部:

ETag:实体标记
Expires:实体缓存到什么时候
Last-Modified:实体最后一次被修改的时间

扩展首部:非标准首部,由应用程序开发者创建。






评论列表

    报文流
    组成部分
    报文的语法
    首部
    主体部分
    状态码分类
    通用首部:客户端和服务器都可使用,比如Date
    请求首部:请求报文特有的,比如Accept
    响应首部: 响应报文特有的
    实体首部:用于应对实体主体部分的首部,如Content-Type
    实体缓存首部: