请求报文
响应报文
报文头
通常可以分为四类,分别是通用报文头、请求报文头、响应报文头、实体报文头。
常用的头部(以下为客户端发起请求时使用)
Accept
Accept 首部列举了用户代理希望接收的媒体资源的 MIME 类型。其中不同的 MIME 类型之间用逗号分隔,同时每一种 MIME 类型会配有一个品质因数q(quality factor),该参数明确了不同 MIME 类型之间的相对优先级。如上图中Accept-Encoding后面就有q=0.8的品质因子。
Accept-Encoding
Accept-Encoding 首部明确说明了(接收端)可以接受的内容编码形式(所支持的压缩算法)。该首部的值是一个Q因子清单(例如 br, gzip;q=0.8),用来提示不同编码类型值的优先级顺序。默认值 identity 则优先级最低(除非声明为其他优先级)。
所支持的值:
- gzip
表示采用 Lempel-Ziv coding (LZ77) 压缩算法,以及32位CRC校验的编码方式。 - compress
采用 Lempel-Ziv-Welch (LZW) 压缩算法。 - deflate
采用 zlib 结构和 deflate 压缩算法。 - br
表示采用 Brotli 算法的编码方式。 - identity
用于指代自身(例如:未经过压缩和修改)。除非特别指明,这个标记始终可以被接受。 - 通配符*
匹配其他任意未在该请求头字段中列出的编码方式。假如该请求头字段不存在的话,这个值是默认值。它并不代表任意算法都支持,而仅仅表示算法之间无优先次序。 - ;q= (qvalues weighting)
值代表优先顺序,用相对质量价值 表示,又称为权重。
Accept-Language
Accept-Language 首部用来提示用户期望获得的自然语言的优先顺序。该首部的值是一个Q因子清单(例如 “de, en;q=0.7”)。用户代理的图形界面上所采用的语言通常可以用来设置为默认值,但是大多数浏览器允许设置不同优先级的语言选项。
Connection
- Connection: keep-alive
表明客户端想要保持该网络连接打开,HTTP/1.1的请求默认使用一个持久连接。这个请求头列表由头部名组成,这些头将被第一个非透明的代理或者代理间的缓存所移除:这些头定义了发出者和第一个实体之间的连接,而不是和目的地节点间的连接。 - Connection: close
表明客户端或服务器想要关闭该网络连接,这是HTTP/1.0请求的默认值
Host
Host 请求头指明了服务器的域名(对于虚拟主机来说),以及(可选的)服务器监听的TCP端口号。
如果没有给定端口号,会自动使用被请求服务的默认端口(比如请求一个HTTP的URL会自动使用80端口)。
HTTP/1.1 的所有请求报文中必须包含一个Host头字段。如果一个 HTTP/1.1 请求缺少 Host 头字段或者设置了超过一个的 Host 头字段,一个400(Bad Request)状态码会被返回。
Host: <host>:<port>
Referer
Referer 请求头包含了当前请求页面的来源页面的地址,即表示当前页面是通过此来源页面里的链接进入的。服务端一般使用 Referer 请求头识别访问来源,可能会以此进行统计分析、日志记录以及缓存优化等。
在这种情况下,请求包中不含referer
- 来源页面采用的协议为表示本地文件的 “file” 或者 “data” URI;
- 当前请求页面采用的是非安全协议,而来源页面采用的是安全协议(HTTPS)。
User-Agent
User-Agent 首部可以用来识别发送请求的浏览器。该字符串中包含有用空格间隔的产品标记符及注释的清单。
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36
Content-Type
Content-Type 实体头部用于指示资源的MIME类型 media type 。
请求方法
- GET
GET方法请求一个指定资源的表示形式. 使用GET的请求应该只被用于获取数据. - HEAD
HEAD方法请求一个与GET请求的响应相同的响应,但没有响应体。故用于检测超链接。 - POST(不幂等)
POST方法用于将实体提交到指定的资源,通常导致在服务器上的状态变化或副作用. - PUT(幂等)
PUT方法用请求有效载荷替换目标资源的所有当前表示。不会导致在服务器上的状态变化或副作用。 - DELETE(有漏洞,不使用)
DELETE方法删除指定的资源。 - CONNECT
CONNECT方法建立一个到由目标资源标识的服务器的隧道。 - OPTIONS
OPTIONS方法用于描述目标资源的通信选项。 - TRACE(有漏洞,不使用)
TRACE方法沿着到目标资源的路径执行一个消息环回测试。 - PATCH
PATCH方法用于对资源应用部分修改。
响应状态码
1×× 信息响应
- 100 Continue
这个临时响应表明,迄今为止的所有内容都是可行的,客户端应该继续请求,如果已经完成,则忽略它。 - 101 Switching Protocol
该代码是响应客户端的 Upgrade 标头发送的,并且指示服务器也正在切换的协议。 - 102 Processing (WebDAV)
此代码表示服务器已收到并正在处理该请求,但没有响应可用。 - 103 Early Hints
此状态代码主要用于与Link 链接头一起使用,以允许用户代理在服务器仍在准备响应时开始预加载资源。
2×× 成功响应
- 200 OK
请求成功。成功的含义取决于HTTP方法:
GET:资源已被提取并在消息正文中传输。
HEAD:实体标头位于消息正文中。
POST:描述动作结果的资源在消息体中传输。
TRACE:消息正文包含服务器收到的请求消息
- 202 Accepted
请求已经接收到,但还未响应,没有结果。意味着不会有一个异步的响应去表明当前请求的结果,预期另外的进程和服务去处理请求,或者批处理。 - 206 Partial Content
服务器已经成功处理了部分 GET 请求。类似于 FlashGet 或者迅雷这类的 HTTP 下载工具都是使用此类响应实现断点续传或者将一个大文档分解为多个下载段同时下载。该请求必须包含 Range 头信息来指示客户端希望得到的内容范围,并且可能包含 If-Range 来作为请求条件。
3×× 重定向
- 301 Moved Permanently
被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一。如果可能,拥有链接编辑功能的客户端应当自动把请求的地址修改为从服务器反馈回来的地址。除非额外指定,否则这个响应也是可缓存的。 - 302 Found
请求的资源现在临时从不同的 URI 响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。 - 304 Not Modified
如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。304 响应禁止包含消息体,因此始终以消息头后的第一个空行结尾。常用于缓存服务器的返回请求。
4×× 客户端响应
- 400 Bad Request
1、语义有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求。
2、请求参数有误。 - 401 Unauthorized
当前请求需要用户验证。
403 Forbidden
服务器已经理解请求,但是拒绝执行它。
404 Not Found
请求失败,请求所希望得到的资源未被在服务器上发现。
5×× 服务端响应
- 500 Internal Server Error
服务器遇到了不知道如何处理的情况。 - 502 Bad Gateway
此错误响应表明服务器作为网关需要得到一个处理这个请求的响应,但是得到一个错误的响应。