请求首部字段
1. Accept
GET /9_Q4simg2RQJ8t7jm9iCKT-xh_/s.gif HTTP/1.1
Accept: image/png,image/svg+xml,image/*;q=0.8,video/*;q=0.8,*/*;q=0.5
2. Accept-Charset
Accept-Charset: iso-8859-5, unicode-1-1;q=0.8
3. Accept-Encoding
Accept-Encoding: br, gzip, deflate
4. Accept-Language
告知服务端客户侧支持的语言类型,让服务端从中选择一种响应。
Accept-Language: zh-cn
5. From
From: imooc@example.org
6. Host
告诉服务器自己要访问的的服务域名信息,有可能一台服务器绑定了多个不同域名,并且不同域名对应了不同服务。
Host: www.imocc.com
7. Authorization
Authorization: <type> <credentials>
-
<type>
认证类型。常见的类型是Basic
; -
<credentials>
如果使用Basic
身份验证方案,则凭证的构造方式如下所示:
base64(user:passwd)
Authorization: Basic GJxhZGRpbjpvcGWun3VzYW1l
这种认证方式目前是比较少用了,比较用户名和密码放在请求头,而且 base64 简单加密是可逆的。建议用 Https 的加密协议。
8. Proxy-Authorization
跟 Authorization 类似,不同的是 Authorization 是客户端与服务端的认证,Proxy-Authorization 是客户端与代理服务器的认证。
9. If-Match
在请求头部添加资源条件,服务器会验证条件为真才会返回请求的资源。
If-Match: <etag_value>, <etag_value>, …
ETag(Entity Tag) 是资源版本的标识符。工作方式类似于 Last-Modified,只是 ETag 值是资源的 Digest(比如,MD5 hash):
10. if-none-match
与 if-Match 的作用相反,即 Etag 判断为 false 服务端才会处理该请求:
if-none-match: <etag_value>
11. if-Modified-Since
也是在请求头部的条件,只是它关注的是资源的更新时间。如果服务端端资源在客户端 if-Modified-Since 指定的日期没有更新过,即资源不够新鲜就不会返回给客户端。
12. if-Range
if-Range 通常会带一个 Range 属性,当 if-Range 对应的 Etag 匹配时,服务端需要返回 Range 范围内的资源。最常见的场景就是断点续传,先根据 Etag 确定好一个资源。在断点续传中时间比较久资源更能会被修改到,可能会影响到客户端的资源 Range。如果 Etag 对应的 Digest 摘要一致就代表资源跟客户端想要的是一样,此时根据客户端要的 Range 部分返回。
If-Match: "123456"
Range: bytes=1000-2000
13. If-Unmodified-Since
If-Unmodified-Since 和 If-Modified-Since 的作用 相反。它的作用的是告知服务器,指定的请求资源只有在字段值内指定的日期时间之后,未发生更新的情况下,才能处理请求。
14. Max-Forwards
客户端端请求有可能被服务端转发到其它代理服务,该字段限制服务端的转发次数。
15. User-Agent
通常存储了浏览器客户端的信息
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Safari/605.1.15
16. Referer
资源在请求的过程中有可能被转发,Referer 字段记录了请求的原始地址
比如在 www.google.com
里有一个 www.baidu.com
链接,那么点击这个 www.baidu.com
,它的 header信息里就有如下:
Referer=http://www.google.com
17. TE
Transfer Encode 告诉服务端自己能够处理的传输编码。