[关闭]
@demonly 2017-06-09T15:23:36.000000Z 字数 4494 阅读 1020

HTTP 协议

计算机网络


URL 与资源

URL 语法:<scheme>://<user>:<password>@<host>:<port>;<params>?<query>#<frag>
在 URL 中对于保留字符和受限字符需要进行编码

字符 保留/受限
% 保留作为编码字符的转义标志
/ 保留作为路径组件中分隔路径段的定界符
. 保留在路径组件中使用
.. 保留在路径组件中使用
# 保留作为分段定界符使用
? 保留作为查询字符串定界符使用
; 保留作为参数定界符使用
: 保留作为方案、用户/口令,以及主机/端口组件的定界符使用
$,+ 保留
@&= 在某些方案的上下文中有特殊的含义,保留
{} \^~[]'
<>" 不安全;这些字符在 URL 范围之外通常是有意义的
0x00 - 0x1F, 0x7F 受限,这些字符都在 US-ASCII 字符集的不可打印区间内
> 0x7F 受限,在此范围内的字符都不在 US-ASCII 字符集的 7 比特范围内

HTTP 报文

HTTP 请求报文

  1. <method> <request-URL> <version>
  2. <headers>
  3. <entity-body>

常用 HTTP 方法,并不是所有的服务器都需要实现这些方法,除了这些方法外还可以实现一些自己的请求方法

方法 描述
GET 从服务器获取一份文档
HEAD 只从服务器获取文档的首部
POST 向服务器发送需要处理的数据
PUT 将请求的主体部分存储在服务器上
TRACE 对可能经过代理服务器传送到服务器上去的报文进行追踪
OPTIONS 决定可以在服务器上执行哪些方法
DELETE 从服务器上删除一份文档

HTTP 扩展方法

方法 描述
LOCK 锁定资源,防止别人同时对其进行修改
MKCOL 创建资源
COPY 在服务器上复制资源
MOVE 在服务器上移动资源

响应报文

  1. <version> <status> <reason-phrase>
  2. <headers>
  3. <entity-body>

原因短语为状态码提供了文本形式的解释。

信息性状态码

状态码 原因短语 含义
100 Continue 说明收到了请求的初始部分,请客户端继续
101 Switching Protocols 说明服务器正在根据客户端的指定,将协议切换成 Update 首部所列的协议

成功状态码

状态码 原因短语 含义
200 OK 请求没问题,实体的主体部分包含了所请求的资源
201 Created 用于创建服务器对象的请求。主体部分中应该包含各种引用了已创建的资源的 URL,Location首部包含最具体的引用
202 Accepted 请求已被接受,但服务器还未执行任何动作。主体部分应该包含对请求状态的描述,还可以包含对请求完成时间的估计或者指向可以获取此信息的位置的指针
203 Non-Authoritative Information 实体首部包含的信息不是来自于源端服务器,而是来自资源的一份副本
204 No Content 没有实体的主体部分,主要用于在浏览器不转为显示新文档的情况下对其进行更新
205 Reset Content 告知浏览器清除当前页面中的所有 HTML 表单元素
206 Partial Content 成功执行了一个部分或 Range 请求

重定向状态码

状态码 原因短语 含义
300 Multiple Choices 表示资源有多个版本可以使用,客户端需要沟通解决
301 Moved Permanently 在请求的 URL 已被移除时使用。响应的 Location 首部中应该包含资源现在所处的 URL
301 Found 与 301 类似,客户端应该使用 Location 首部给出的 URL 来临时定位资源,但是将来的请求仍应使用老的 URL,仅用于 HTTP/1.0
303 See Other 告知客户端应该用另一个 URL 来获取资源。新的 URL 位于响应报文的 Location 首部。
304 Not Modified 资源未被修改
305 Use Proxy 说明必须通过一个代理来访问资源。代理的位置由 Location 首部给出
307 Temporary Redirect 与 301 类似,客户端应该使用 Location 首部给出的 URL 来临时定位资源,但是将来的请求仍应使用老的 URL,仅用于 HTTP/1.1

客户端错误状态码

状态码 原因短语 含义
400 Bad Request 用于告知客户端它发送了一个错误的请求
401 Unauthorized 请求客户端在获取对资源的访问权之前要对自己进行认证
403 Forbidden 说明请求被服务器拒绝了,可以在主体部分包含拒绝的理由
404 Not Found 用于说明服务器无法找到所请求的 URL
405 Method Not Allowed 请求的 URL 不支持该方法,响应中应该包含 Allow 首部
406 Not Acceptable 由于参数错误而没有匹配的资源
407 Proxy Authentication Required 与 401 类似,但用于要求对资源进行认证的代理服务器
408 Request Timeout 客户端完成请求所花的时间太长
409 Conflict 说明请求可能在资源上引发一些冲突,响应中应该包含描述冲突的主体
410 Gone 资源已被移除
411 Length Required 要求在请求报文中包含 Content-Length
412 Precondition Failed 条件请求其中的一个条件失败
413 Request Entity Too Large 客户端发送的主体部分太大
414 Request URI Too Long 请求的 URI 太长
415 Unsupported Media Type 服务器无法理解或支持客户端所发实体的内容类型
416 Requested Range Not Satisfiable 请求的范围无效或无法满足
417 Expectation Failed 请求的期望无法满足

服务器错误状态码

状态码 原因短语 含义
500 Internal Server Error 服务器遇到一个妨碍它为请求提供服务的错误
501 Not Implemented 客户端发起的请求超出服务器的能力范围
503 Bad Gateway 代理或网关服务器收到了一条伪响应
504 Gateway Timeout 网关或者代理服务器等待响应超时
505 HTTP Version Not Supported 无法支持或者不愿意支持该协议版本

首部

首部行可以分为多行以提高可读性,多出来的每行前面至少要有一个空格或制表符。

通用首部

首部 描述
Connection 允许客户端和服务器指定与请求/响应连接有关的选项
Date 提供日期和时间标志,说明报文是什么时间创建的
MIME-Version 给出了发送端使用的 MIME 版本
Trailer 如果报文采用了分块传输编码方式,就可以用这个首部列出位于报文拖挂部分的首部集合
Transfer-Encoding 告知接收端为了保证报文的可靠传输,对报文采用了什么编码方式
Update 给出了发送端想要“升级”使用的新版本或协议
Via 显示了报文经过的中间节点(代理、网关)

其中 Connection 首部的值可以是三种不同类型的标签:

通用缓存首部

首部 描述
Cache-Control 用于随报文传送缓存指示
Pragma 另一种随报文传送指示的方式,但并不专用于缓存

请求首部

首部 描述
Client-IP 提供了运行客户端的机器的 IP 地址
From 提供了客户端用户的 Email 地址
Host 给出了接受请求的服务器的主机名和端口号
Referer 提供了包含当前请求 URI 的文档的 URL
UA-Color 提供了与客户端显示器的显示颜色有关的信息
UA-CPU 给出了客户端 CPU 的类型或制造商
UA-Disp 提供了与客户端显示器能力有关的信息
UA-OS 给出了运行在客户端机器上的操作系统名称及版本
UA-Pixels 提供了客户端显示器的像素信息
User-Agent 将发起请求的应用程序名称告知服务器

Accept 首部

首部 描述
Accept 告诉服务器能够发送哪些媒体类型
Accept-Charset 告诉服务器能够发送哪些字符集
Accept-Encoding 告诉服务器能够发送哪些编码方式
Accept-Language 告诉服务器能够发送哪些语言
TE 告诉服务器可以使用哪些扩展传输编码

条件请求首部

首部 描述
Expect 允许客户端列出某请求所要求的服务器行为
If-Match 如果实体标记与文档当前的实体标记相匹配,就获取这份文档
If-Modified-Since 除非在某个指定的日期之后资源被修改过,否则就限制这个请求
If-None-Match 如果提供的实体标记与当前文档的实体标记不相符,就获取文档
If-Range 允许对文档的某个范围进行条件请求
If-Unmodified-Since 除非在某个指定日期之后资源没有修改过,否则就限制这个请求
Range 如果服务器支持范围请求,就请求资源的指定范围

安全请求首部

首部 描述
Authorization 包含了客户端提供的服务器,以便对其自身进行认证的数据
Cookie 向服务器传送一个令牌
Cookie2 说明请求端指出的 cookie 版本

代理请求首部

首部 描述
Max-Forward 将请求转发给其他代理或网关的最大次数
Proxy-Authorization 与 Authorization 首部相同,在代理进行认证时使用的
Proxy-Connection 与 Connection 首部相同,在与代理建立连接时使用的

响应首部

首部 描述
Age 响应持续时间(从最初创建开始)
Public 服务器为其资源支持的请求方法列表
Retry-After 如果资源不可用的话,在此日期或时间重试
Server 服务器应用程序软件的名称和版本
Title 对 HTML 文档来说,就是 HTML 文档的源端给出的标题
Warning 比原因短语中更详细一些的警告报文

协商首部

首部 描述
AcceptRanges 对此资源来说,服务器可接受的范围类型
Vary 服务器查看的其他首部列表,服务器会根据这些首部的内容挑选出最适合的资源版本发送给客户端

安全响应首部

首部 描述
Proxy-Authenticate 来自代理的对客户端的质询列表
Set-Cookie 设置 cookie
Set-Cookie2 设置 cookie
WWW-Authenticate 来自服务器的对客户端的质询列表

实体首部

首部 描述
Allow 列出了可以对此实体执行的请求或方法
Location 告知客户端实体实际上位于何处

内容首部

首部 描述
Content-Base 解析主题中的相对 URL 时使用的基础 URL
Content-Encoding 对主体执行的任意编码方式
Content-Language 理解主体时最适宜使用的自然语言
Content-Length 主体的长度或尺寸
Content-Location 资源实际所处的位置
Content-MD5 主题的 MD5 校验和
Content-Range 在整个资源中此实体表示的字节范围
Content-Type 这个主体的对象类型

实体缓存首部

首部 描述
ETag 与此实体相关的实体标记
Expires 实体不再有效,要从原始的源端再次获取此实体的日期和时间
Last-Modified 这个实体最后一次被修改的日期和时间
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注