学习目标:
报文是如何流动的;
HTTP报文的三个组成部分;
请求和响应报文之间的区别;
请求报文支持的各种功能;
响应报文返回的各种状态码;
各种各样的HTTP首部都是用来干什么的。
-
报文是如何流动的:
请求报文从客户端流向服务器,中间会经过若干代理。
应答报文从服务器流向客户端,流动路径一般与请求报文完全相反。 -
HTTP报文的三个组成部分:
HTTP报文分为三个部分组成:起始行、包含属性的首部块、可选的主体部分。请求命令的报文格式:
请求行: 请求方法|空格|URL|空格|协议版本|回车换行
请求头部: 头字段|:|值|回车换行
…
头字段|:|值|回车换行
空行: 回车换行
请求数据: …实例: GET /hello.txt HTTP/1.1 User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3 Host: www.example.com Accept-Language: en, mi
响应结果的报文格式:
状态行: 协议版本|空格|响应状态码|空格|描述字符串|回车换行
消息报头: 头字段|:|值|回车换行
…
头字段|:|值|回车换行
空行: 回车换行
响应正文: …实例: HTTP/1.1 200 OK Date: Mon, 27 Jul 2009 12:28:53 GMT Server: Apache Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT ETag: "34aa387-d-1568eb00" Accept-Ranges: bytes Content-Length: 51 Vary: Accept-Encoding Content-Type: text/plain <HTML> Hello, World! </HTML>
-
请求和响应报文之间的区别:
请求报文起始行是HTTP方法、URL、HTTP版本,应答报文起始行是的HTTP版本、状态码、原因短句。
请求报文和应答报文的首部字段不同。
大部分的请求报文没有主体部分。 -
请求报文支持的各种功能:
GET: 请求指定的页面信息,并返回实体主体。安全方法,不会改变服务器的资源。
HEAD: 类似于GET请求,但不返回具体的内容,只获取报头。安全方法,不会改变服务器的资源。
POST: 向指定资源提交数据进行处理请求。数据被包含在请求体中,可能会导致新的资源的建立或已有资源的修改。
PUT: 从客户端向服务器传送数据取代指定文档的内容。无论执行多少次,产生的效果是一致的。
PUTCH: 对PUT方法的补充,用来对已知资源进行局部更新。
DELETE: 请求服务器删除指定的页面,但操作不一定会被执行。
CONNECT: 预留给能够将连接改为管道方式的代理服务器。
OPTIONS: 允许客户端查看服务器的性能。
TRACE: 回显服务器收到的请求,主要用于测试或诊断。 -
响应报文返回的各种状态码:
分类 分类描述
1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误HTTP状态码列表:
状态码 状态码英文名称 状态码描述
100 Continue 收到了请求的初始部分,请客户端继续。
101 Switching Protocols 服务器根据客户端Update首部的指定切换协议。
200 OK 请求成功。一般用于GET与POST请求。
201 Created 用于创建服务器对象的请求,服务器应在发送这个请求前创建好对象,并在Location首部包含对对象的引用URL。
202 Accepted 已经接受请求,但并未处理完成。实体部分或许有对请求完成时间的估计。
203 Non-Authoritative Information 非授权信息。请求成功,但返回的实体首部信息不是来自源端服务器,而是一个副本。
204 No Content 没有实体的主体部分。主要用于浏览器不转为显示新文档的情况下,对其进行更新。
205 Reset Content 服务器处理成功,浏览器应重置文档视图。
206 Partial Content 服务器成功处理了一个范围请求。响应首部中必须包含Content-Range、Date、ETag或者Content-Location。
300 Multiple Choices 客户端请求一个实际指向多个资源的URL时会返回这个状态码。返回这个状态码时会带有一个选项列表供用户选择。如果同时返回了Location首部,则Location首部包含首选URL。
301 Moved Permanently 请求的资源已被永久移动。响应Location首部中会包括新的URL,今后任何新的请求都使用新的URL代替。
302 Found 与301类似,但只是临时移动,当前操作使用新的URL,今后应继续使用原有URL。
303 See Other 告知客户端应使用另一个URL来获取资源。新的URL位于响应的Location首部。主要目的允许POST请求的响应将客户端定向到某个资源。
304 Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。
305 Use Proxy 所请求的资源必须通过代理访问。代理的位置由Location首部给出。
306 Unused 已经被废弃的HTTP状态码。
307 Temporary Redirect 临时重定向,与302类似。
400 Bad Request 客户端请求的语法错误,服务器无法理解。
401 Unauthorized 要求客户端的身份认证。
402 Payment Required 保留。
403 Forbidden 服务器理解客户端的请求,但是拒绝执行。并且不想说明拒绝原因。
404 Not Found 服务器无法根据客户端的请求URL找到资源。
405 Method Not Allowed 客户端请求中的方法被禁止。在响应首部中应包含Allow首部,已告知对所请求的资源可以使用哪些方法。
406 Not Accepted 服务器无法根据客户端请求的内容特性完成请求。
407 Proxy Authentication Required 与401类似,但是是代理使用的。
408 Request Timeout 服务器等待客户端发送的请求时间过长。可能关闭连接。
409 Conflict 服务器完成客户端的PUT请求时可能此代码,代表服务器处理请求时发生了冲突
410 Gone 客户端请求的资源已经不存在。但曾经拥有过此资源。
411 Length Required 服务器无法处理客户端发送的不带Content-Length的请求信息。要求客户端在请求中包含Content-Length首部。
412 Precondition Failed 客户端发起了条件请求。但有条件失败。
413 Request Entity Too Large 客户端请求实体过大,服务器无法处理,因此拒绝请求,服务器可能关闭连接。如果只是暂时无法处理,则会包含一个Retry-After的响应信息。
414 Request-URL Too Large 请求的URL过长,服务器无法处理。
415 Unsupported Media Type 服务器无法处理附带的媒体格式。
416 Requested range not satisfiable 客户端进行范围请求但是请求的范围无效时使用。
417 Expectation Failed 服务器无法满足客户端Expect首部。
500 Internal Server Error 服务器内部错误,无法完成请求。
501 Not Implemented 服务器不支持请求的功能,无法完成请求。
502 Bad Gateway 作为网关或者代理尝试执行请求时,从响应链的下一条链路收到了一条伪响应。
503 Service Unavailable 由于超载或系统维护,服务器暂时无法处理客户端的请求,但将来可以。如果知道资源什么时间可用,在Retry-After首部包含可用的日期。
504 Gateway Time-out 网关或代理服务器未及时从远端服务器获取请求。
505 HTTP Version not supported 服务器不支持请求的HTTP协议的版本,无法完成处理。
- 各种各样的HTTP首部都是用来干什么的:
首部和方法配合工作,共同决定了客户端和服务器能做什么事情。
首部 描述
通用首部:
Connection 允许客户端和服务器指定与连接有关的选项,包括keep-alive、close、代理删除逐跳首部
Date 提供报文创建的格林威治时间
MIME-Version 给出了使用的MIME版本
Trailer 如果报文采用了分块传输编码,就可以使用这个首部列出报文拖挂的首部。
Transfer-Encoding 告知接收端报文采用了什么编码方式。
Update 给出了发送端想要使用的新版本或协议
Via 显示了报文经过的中间节点
Cache-Control 用于随报文传送缓存指示
Pragma 随报文传送指示
请求首部:
Client-IP 提供了运行客户端的机器的IP地址
From 提供了客户端用户的E-mail地址
Host 给出了接受请求的服务器的主机名和端口号
Referer 提供了包含当前请求URL的文档的URL
UA-Color 提供了与客户端显示器的显示颜色有关的信息
UA-CPU 给出了客户端CPU的类型或制造商
UA-Disp 提供了与客户端显示器(屏幕)能力有关的信息
UA-OS 给出了运行在客户端机器上的操作系统名称及版本
UA-Pixels 提供了客户端显示器的像素信息
User-Agent 将发起请求的应用程序名称告知服务器
Accept 告诉服务器能够发送哪些媒体类型
Accept-Charset 告诉服务器能够发送哪些字符集
Accept-Encoding 告诉服务器能够使用哪些编码方式
Accept-Datetime 设置接受的版本时间
Accept-Language 告诉服务器能够发送那些语言
TE 告诉服务器能够使用哪些扩展传输编码
Expect 允许客户端列出某请求所要求的服务器行为
If-Match 如果实体标记与文档当前的实体标记相匹配,就获取这份文档
If-Modified-Since 除非在指定的日期之后资源被修改过,否则就限制这个请求
If-None-Match 如果提供的实体标记与当前文档的实体标记不相符,就获取这份文档
If-Range 允许对文档的某个范围进行条件请求
If-Unmodified-Since 除非在指定的日期之后资源没有被修改过,否则就限制这个请求
Range 如果服务器支持范围请求,就请求资源的指定范围
Authorization 包含了客户端提供给服务器,以便对其自身进行认证的数据
Cookie 客户端用它向服务器传送一个令牌(它并不是真正的安全首部,但确实隐含了安全功能)
Cookie2 用来说明请求端支持的cookie版本
Max-Forwards 在通往远端服务器的路径上,将请求转发给其它代理或网关的最大次数——与TRACE方法一起使用
Proxy-Authorization 与Authorization首部相同,但这个首部是在与代理建立连接时使用的
Proxy-Connection 与Connection首部相同,但用于代理
响应首部:
Age 响应持续时间
Public 服务器资源支持的请求方法列表
Retry-After 如果资源不可用的话,在此日期或时间重试
Server 服务器应用程序的名称和版本
Title 主体的标题
Warning 比原因短句中更详细一点的警告报文
Accept-Ranges 服务器可接受的范围类型
Vary 服务器查看的其它首部的列表
Proxy-Authorization 来自代理对客户端的质询列表
WWW-Authentication 来自服务器对客户端的质询列表
Allow 列出了可以对此实体执行的请求方法
Location 告知客户端实体实际上位于何处;用于将接收端定向到资源的位置
Content-Base 解析主体中的相对URL时使用的基础URL
Content-Encoding 对主体执行的任意编码方式
Content-Language 理解主体时最适宜使用的自然语言
Content-Length 主体的长度或尺寸
Content-Location 资源实际所处的位置
Content-MD5 主体的MD5校验和
Content-Range 在整个资源中此实体表示的字节范围
Content-Type 主体的MIME类型
ETag 与实体相关的实体标记
Expires 实体的有效日期
Last-Modified 实体最后被修改的时间