前言
请求头信息是发送请求时专用的头信息,本节将会介绍:
Accept Accept-Charset Accept-Encoding Accept-Language Authorization Proxy Authorization Expect From Host Max-Forwards 10种头信息的用法,含义及作用
下面的‘用户代理’指的是浏览器,代理服务器,缓存服务器等代替人类用户发送请求的软件/服务器
1. Accept
Accept:text/html,application/xml;q=0.9,*/*;q=0.8
Accept 字段表明了用户代理能够处理的文件媒体类型,及其优先级。一次可以指定多个类型,用, 分割
- 媒体类型采用
type/subtype 的形式表明 - 优先级采用
q=xx 表明,权重值在0~1之间(可精确到小数点后3位),1最高,0最低(表示不接受)。默认为1 - 优先级与其指代的媒体类型之间用
; 分割 服务器从候选的列表中优先选择权重高的文件类型,并在响应头中使用Content-Type 标明
2. Accept-Charset
Accept-Charset:iso-8859-5,unicode-1-1;q=0.8
Accept-Charset 表明用户代理支持的字符集及他们的相对优先顺序,用q 表示优先级。一次性可指定多个字符集,用, 隔开 服务器在列表中优先选择权重值高的字符集。并使用Content-Type 标明
3. Accept-Encoding
Accept-Encoding:gzip,deflate;q=0.8
Accept-Encoding 字段表明了用户/代理可以接受的内容编码方式。 一些编码的方式的例子:
gzip :表示采用 Lempel-Ziv coding (LZ77) 压缩算法,以及32位CRC 校验的编码方式。compress :采用 Lempel-Ziv-Welch (LZW) 压缩算法。deflate :采用 zlib 结构和 deflate 压缩算法。br :表示采用 Brotli 算法的编码方式。identity :不压缩。除非特别指明,这个标记始终可以被接受。* :任意编码方式
4. Accept-Language
Accept-Language:zh-cn, zh;q=0.9, en-us;q=0.8, en;q=0.7, *;q=0.5
Accept-Language 表明用户代理可使用理解的自然语言。更多的语言编码参考:语言代码表 服务器会有限选择其中权重值较高的语言,使用Content-Language 响应头标明其选择
5.Authorization
Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
Authorization 用于用户身份验证。通常会在服务器返回401 Unauthorized 状态码以及WWW-Authenticate 响应头信息之后在后续请求中发送此请求头信息 语法:
Authorization: <type> <credentials>
<type> :验证类型。 常见的是 “基本验证(Basic)” 。其他类型包括
<credentials> :凭证 如果使用“基本验证”方案,凭证通过如下步骤生成:
- 用冒号将用户名和密码进行拼接(如:aladdin:opensesame)
- 将第一步生成的结果用
Base64 方式编码(YWxhZGRpbjpvcGVuc2VzYW1l)
6. Proxy Authorization
Proxy-Authorization: <type> <credentials>
与Authorization 的不同点在于,这个首部适用于客户端向代理服务器认证,通常是在接收到代理服务器返回的407 Proxy Authentication Required 状态码后添加
7. Expect
Expect: 100-continue
Expect 字段表示一个期望条件。HTTP 1.1 版本中只有一个取值100-continue 。啥意思?看例子:
PUT /somewhere/fun HTTP/1.1
Host: origin.example.com
Content-Type: video/h264
Content-Length: 1234567890987
Expect: 100-continue
客户端:接下来我想发送一个视屏文件给你,这个视频文件有1234567890987字节这么大,你能不能接收?能的话就返回100 contine 状态码给我 如果服务器可以接收就会返回100 contine 状态码,否则返回417 Expectation Failed 状态码
8.From
From: webmaster@example.org
该头信息包含一个电子邮箱地址,这个电子邮箱地址属于发送请求的用户代理的实际掌控者(人类用户)。通常,其目的就是为了显示搜索引擎等用户代理的负责人的电子邮箱地址。
如果你在运行一个机器人代理程序(比如爬虫),那么 Form 首部应该随请求一起发送,这样的话,在服务器遇到问题的时候,例如机器人代理发送了过量的、不希望收到的或者不合法的请求,站点管理员可以联系到你。
9. Host
Host: <host>:<port>
host :主机名port :端口,可省略。默认端口号:如果是HTTP请求,则是80。如果是HTTPS请求,则是443
例子:
Host: xxx.example.com
该首部告知服务器请求的资源所在的互联网主机名和端口号(其实就是URL)。
有同学可能有疑问:URL不是已经在浏览器地址栏写了吗,为什么还要用Host 指定。这就牵扯到一个问题,浏览器是如何根据URL来找到目标主机的?
浏览器并不是根据URL来找目标主机的,而是根据IP地址,一个主机只有一个IP地址。所以就需要一个中间者将URL转变为IP地址。这个中间者叫做:DNS 服务器。
当我们在浏览器输入URL,并开始发起请求时。浏览器首先会向DNS 服务器发送请求,将URL转变为IP地址。然后根据IP地址寻找目标主机。
这就存在一个问题:如果一个服务器上部署了多个站点,每个站点都有不同的URL怎么办?比如: www.X1.com 和www.X2.com 在同一个主机上,这个主机的IP地址是123.123.123.123 。经过DNS 解析,www.X1.com 和www.X2.com 的IP地址都是123.123.123.123 。
浏览器找到了这个主机,说我想要XX资源 主机:你想要谁的XX资源 浏览器:我也不知道,我就要XX资源 主机:(沙雕),拜拜了您呐。
所以知道Host 的作用了吧。Host 头信息在HTTP 1.1 版本中是唯一一个要求必须包含在请求头信息中的头信息。如果请求头信息中没有包含Host 头信息或者不止一个Host 首部,很大概率会收到400 Bad Requst 响应。
为什么是很大概率,而不是一定会? 因为并不是每个人都会遵守协议
如果服务器未设定主机名,可以给个空值:
Host:
10. Max-Forwards
Max-Forwards:10
该字段指定请求最多可以经过几个服务器,每经过一个,就会把值减一,当值为0时,返回响应
这篇到此结束,下篇将介绍:
If-Match If-Modified-Since If-None-Match If-Range If-Unmodified-Since Range Refer TE 9个请求头信息。 关注我,获取最新的更新
Reference
[1]. HTTP Headers
|