HTTP报文的做用git
HTTP报文时是HTTP进行请求和响应时用来交换信息的,能够理解它为搬东西的包裹,来搬运交换的信息
由客户端流入源端服务器,服务器处理完以后,流回(流出)用户的Agent代理中github
报文流入源端服务器示意图:web
全部报文的发送者都在接收者的上游
对于请求报文来讲,客户端是发送者,对于响应报文来讲,服务器端是发送者算法
报文向下游流动示意图:浏览器
HTTP报文分为两类:缓存
请求和响应报文的基本报文结构相同,都是由三部分组成:服务器
请求报文和响应报文只有起始行的语法不一样frontend
<method> <request-url> <version> <header> <entity-body>
<version> <status-code> <reason-phrase> <header> <entity-body>
下面是对各部分的简要说明:ide
字段名 | 描述 |
---|---|
方法(method) | HTTP请求方法 |
请求url (request-url) | 请求资源的路径 |
版本(version) | 使用的HTTP版本,格式为: HTTP/<主要版本号>.<次要版本号> |
状态码(status-code) | 数字HTTP状态码,用于描述请求过程的状态,好比成功、失败 |
缘由短语(reason-phrase) | 上面数字状态码的简短文本描述 |
首部(header) | 能够有0或多个首部。格式为: <名字>:<值>,以空行结束 |
主体(entity-body) | 包含由任意数据组成的数据块,并非全部报文都有主体 |
请求和响应报文示例:
上面咱们知道HTTP报文分为请求报文和响应报文两类,并且只有起始行不一样
这里咱们是请求报文的起始行为请求行,响应报文的起始行为响应行
HTTP报文的首部字段向请求和响应报文中添加一些附加信息,本质上来讲,它们只是一些<名字>/<值>对的列表
HTTP规范定义了几种首部字段,应用程序也能够随意发明本身所用的首部
既能够出如今请求报文中,也能够出如今响应报文中
字段 | 描述 |
---|---|
Cache-Control | 经过指定首部字段Cache-Control的指令,就能操做缓存的工做机制。 |
Connection | 控制不在转发给代理的首部字段;管理持久链接。 |
Data | 代表建立HTTP报文的时间和日期。 |
Pragma | 只用在客户端发送的请求中,全部的中间服务器不返回缓存的资源。 |
Trailer | 事先说明报文主体后记录了哪些首部字段。一样能够用在分块传输编码时。 |
Transfer-Encoding | 规定了传输报文主体时采用的编码方式。 |
Upgrade | 用于检测HTTP协议及其余协议是否可使用更高的版本进行通讯。 |
Via | 为了追踪客户端与服务器之间的请求和响应报文的传输路径。 |
Warning | 一般会告知用户一些与缓存相关的问题的警告 |
提供请求相关的信息
字段 | 描述 |
---|---|
Accept | 该字段可通知服务器,用户代理可以处理的媒体类型及媒体类型的相对优先级。 |
Accept-Charset | 用来通知服务器用户代理支持的字符集及字符集的相对优先顺序,可一次性指定多种字符集。 |
Accept-Encoding | 用来告知服务器用户代理支持的内容编码及内容编码的优先级顺序。 |
Accept-Language | 用来告知服务器用户代理嫩巩固处理的天然语言集(中文或英文等),以及天然语言集的相对优先级。 |
Authorization | 用来告知服务器,用户代理的认证信息。 |
Expect | 客户端使用首部字段Except来告知服务器,指望出现的某种指定行为。 |
From | 用来告知服务器使用用户代理的用户的电子邮件地址。 |
Host | 告知服务器,请求的资源所处的互联网主机名和端口号。Host首部字段在HTTP/1.1规范内是惟一一个必须包含在请求内的首部字段。 |
If-Match | 相似于If-xxx这样的请求首部,能够称为条件请求。 |
If-Modified-Since | 告知服务器若该字段值早于资源的更新时间,则但愿能处理该请求。 |
If-None-Match | 该字段值得实体标记值与请求资源的ETag不一致时,它就告知服务器处理该请求。 |
If-Range | 它告知服务器若指定的If-Range字段值和请求资源的ETag值或时间相一致时,则做为范围请求处理。反之则返回全体资源。 |
If-Unmodified-Since | 告知服务器,指定的请求资源只有在字段值内指定的日期时间以后,未发生更新的状况下,才能处理请求。 |
Max-Forwards | 经过TRACE方法或OPTIONS方法,发送包含首部字段Max-Forwards的请求时,该字段以十进制整数形式指定可通过的服务器最大数目。当服务器接收到Max-Forwards值为0的请求时,则再也不进行转发,而是直接返回响应。 |
Proxy-Authorization | 客户端会发送包含首部字段Proxy-Authorization的请求,以告知服务器认证所须要的信息。 |
Range | 告知服务器资源的指定范围。 |
TE | 告知服务器客户端可以处理响应的传输编码方式及相对优先级。 |
User-Agent | 将建立请求的浏览器用户代理名称等信息传达给服务器 |
提供响应相关的信息
字段 | 描述 |
---|---|
Accept-Ranges | 用来告知客户端服务器是否可以处理范围请求,以指定获取服务器端某个部分的资源。 |
Age | 告知客户端,源服务器在多久前建立了响应。单位秒。 |
ETag | 告知客户端实体标识,它是一种可将资源以字符串形式作惟一标识的方式。 |
Location | 能够将响应接收方引导至某个与请求URI位置不一样的资源。 |
Proxy-Authenticate | 把由代理服务器所要求的认证信息发送给客户端。 |
Retry-After | 告知客户端应该在多久以后再次发送请求。 |
Server | 告知客户端当前服务器上安装的HTTP服务器应用程序的信息。 |
Vary | 可对缓存进行控制,源服务器回向代理服务器传达关于本地缓存使用方法的命令。 |
WWW-Authenticate | 用于HTTP访问认证 |
描述主体的长度和内容,或者资源自身
字段 | 描述 |
---|---|
Allow | 用于通知客户端可以支持Request-URI指定资源的全部HTTP方法。 |
Content-Encoding | 告知客户端服务器对实体的主体部分选用的内容编码方式。(gzip/compress/deflate/identity) |
Content-Language | 告知客户端,实体主体使用的天然语言。(中文或英文等语言) |
Content-Length | 代表了实体主体部分的大小。 |
Content-Location | 给出与报文主体返回资源对应的URI。 |
Content-MD5 | 是一串由MD5算法生成的值,其目的在于检查报文主体在传输过程当中是否保持完整,以及确认传输到达。 |
Content-Range | 针对范围请求,返回响应时使用的首部字段,能告知客户端做为相应返回的实体的哪一个部分符合范围请求。 |
Content-Type | 说明了实体主体内对象的媒体类型,该字段用type/subtype形式赋值。 |
Expires | 会将资源失效的日期告知客户端。 |
Last-Modified | 指明资源最终修改的时间 |
规范中没有定义的新首部
HTTP状态码被分为五大类:
状态码 | 短语描述 | 描述 |
---|---|---|
100 | Continue | 继续,通常在发送post请求时,已发送了http header以后服务端将返回此信息,表示确认,以后发送具体参数信息 |
200 | OK | 正常返回信息 |
201 | Created | 请求成功而且服务器建立了新的资源 |
202 | Accepted | 服务器已接受请求,但还没有处理 |
301 | Moved Permanently | 请求的网页已永久移动到新位置。 |
302 | Found | 临时性重定向。 |
303 | See Other | 临时性重定向,且老是使用 GET 请求新的 URI。 |
304 | Not Modified | 自从上次请求后,请求的网页未修改过。 |
400 | Bad Request | 服务器没法理解请求的格式,客户端不该当尝试再次使用相同的内容发起请求。 |
401 | Unauthorized | 请求未受权。 |
403 | Forbidden | 禁止访问。 |
404 | Not Found | 找不到如何与 URI 相匹配的资源。 |
500 | Internal Server Error | 最多见的服务器端错误。 |
503 | Service Unavailable | 服务器端暂时没法处理请求(多是过载或维护) |
状态码 | 描述 |
---|---|
100 | 客户必须继续发出请求 |
101 | 客户要求服务器根据请求转换HTTP协议版本 |
200 | 代表该请求被成功地完成,所请求的资源发送回客户端 |
201 | 提示知道新文件的URL |
202 | 接受和处理、但处理未完成 |
203 | 返回信息不肯定或不完整 |
204 | 请求收到,但返回信息为空 |
205 | 服务器完成了请求,用户代理必须复位当前已经浏览过的文件 |
206 | 服务器已经完成了部分用户的GET请求 |
300 | 请求的资源可在多处获得 |
301 | 本网页被永久性转移到另外一个URL |
302 | 请求的网页被转移到一个新的地址,但客户访问仍继续经过原始URL地址,重定向,新的URL会在response中的Location中返回,浏览器将会使用新的URL发出新的Request。 |
303 | 建议客户访问其余URL或访问方式 |
304 | 自从上次请求后,请求的网页未修改过,服务器返回此响应时,不会返回网页内容,表明上次的文档已经被缓存了,还能够继续使用 |
305 | 请求的资源必须从服务器指定的地址获得 |
306 | 前一版本HTTP中使用的代码,现行版本中再也不使用 |
307 | 申明请求的资源临时性删除 |
400 | 客户端请求有语法错误,不能被服务器所理解 |
401 | 请求未经受权 |
402 | 保留有效ChargeTo头响应 |
403 | 禁止访问,服务器收到请求,可是拒绝提供服务 |
404 | 一个404错误代表可链接服务器,但服务器没法取得所请求的网页,请求资源不存在。eg:输入了错误的URL |
405 | 用户在Request-Line字段定义的方法不容许 |
406 | 根据用户发送的Accept拖,请求资源不可访问 |
407 | 相似401,用户必须首先在代理服务器上获得受权 |
408 | 客户端没有在用户指定的饿时间内完成请求 |
409 | 对当前资源状态,请求不能完成 |
410 | 服务器上再也不有此资源且无进一步的参考地址 |
411 | 服务器拒绝用户定义的Content-Length属性请求 |
412 | 一个或多个请求头字段在当前请求中错误 |
413 | 请求的资源大于服务器容许的大小 |
414 | 请求的资源URL长于服务器容许的长度 |
415 | 请求资源不支持请求项目格式 |
416 | 请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段 |
417 | 服务器不知足请求Expect头字段指定的指望值,若是是代理服务器,多是下一级服务器不能知足请求长 |
500 | 服务器遇到错误,没法完成请求 |
502 | 网关错误 |
503 | 因为超载或停机维护,服务器目前没法使用,一段时间后可能恢复正常 |