文章目录
前言
请求头信息是发送请求时专用的头信息,本节将会介绍:
Accept
Accept-Charset
Accept-Encoding
Accept-Language
Authorization
Proxy-Authorization
Expect
From
Host
Max-Forwards
10种头信息的用法,含义及作用
下面的‘用户代理’指的是浏览器,代理服务器,缓存服务器等代替人类用户发送请求的软件/服务器
1. Accept
<!--
客户端接受:
1.html,权重为1
2.xml,权重为0.9
3.任何文件,权重为0.8
-->
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
<!--接受使用:iso-8859-5和unicode-1-1字符集编码的文件-->
Accept-Charset:iso-8859-5,unicode-1-1;q=0.8
Accept-Charset
表明用户代理支持的字符集及他们的相对优先顺序,用q
表示优先级。一次性可指定多个字符集,用,
隔开
服务器在列表中优先选择权重值高的字符集。并使用Content-Type
标明
3. Accept-Encoding
<!--内容可以使用gzip或者deflate压缩-->
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
<!--可以接受以下语言:
1. 中文(大陆)
2. 中文,权重0.9
3. 英语(美国),权重0.8
4. 英语,权重0.7
5. 任意语言,权重0.5
-->
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
<!--希望服务器可以返回100状态码-->
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
<!--发起这个请求的人类的电子邮箱是webmaster@example.org-->
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
<!--最多转发10次-->
Max-Forwards:10
该字段指定请求最多可以经过几个服务器,每经过一个,就会把值减一,当值为0时,返回响应
这篇到此结束,下篇将介绍:
If-Match
If-Modified-Since
If-None-Match
If-Range
If-Unmodified-Since
Range
Refer
TE
9个请求头信息。
关注我,获取最新的更新
下篇文章在这:Http头信息(二)——请求头信息(二)
Reference
[1]. HTTP Headers