HTTP协议——HTTP请求首部

本文详细介绍了HTTP请求中的一系列首部字段,包括Accept、Accept-Charset、Accept-Encoding、Accept-Language、Authorization等,用于告知服务器客户端的能力、偏好及认证信息。这些首部字段在内容协商、条件请求和身份验证等方面起着关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        请求首部是只在请求报恩中有意义的首部。用于说明是谁或什么在发送请求、请求源自何处,或者客户端的洗好及能力。服务器可以根据请求首部给出的客户端信息,试着为客户端提供更好的响应。
        请求首部字段如下:

首部字段名

说明

Accept

用户代理可处理的媒体类型

Accept-Charset

优先的字符集

Accept-Encoding

优先的内容编码

Accept-Language

优先的语言(自然语言)

Authorization

Web认证信息

Expect

期待服务器的特定行为

From

用户的电子邮箱地址

Host

请求资源所在服务器

If-Match

比较实体标记(ETag)

If-Modified-Since

比较资源的更新时间

If-None-Match

比较实体标记(与If-Match相反)

If-Range

资源未更新时发送实体Byte的范围请求

If-Unmodified-Since

比较资源的更新时间(与If-Modified-Since相反)

Max-Forwards

最大传输逐跳数

Proxy-Authorization

代理服务器要求客户端的认证信息

Range

实体的字节范围请求

Referer

对请求中URI的原始获取方

TE

传输编码的优先级

User-Agent

HTTP客户端程序的信息


 1、Accept

        Accept首部字段可通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级。可以使用type/subtype这种形式,一次性指定多种媒体类型。
常见的集中媒体类型如下:

  • 文本文件:text/html,text/plain,text/css
  • 图片文件:image/jpeg,image/gif,image/png
  • 视频文件:video/mpeg,video/quicktime
  • 应用程序使用的二进制文件:application/octet-stream,application/zip

        Accept首部格式如下:
        Accept:type/subtype
        如果想要给显示的媒体类型增加优先级,则使用q= 来额外表示权重值,用分号(;)来进行分隔,权重范围是0~1,精确到小数点后3位。1位最大值,不指定q时,默认q=1.0
        例如:Accept:type/subtype,application/xhtml+xml,application/xml;q=0.1

2、Accept-Charset

        Accept-Charset首部字段可用来通知服务器用户代理支持的字符集及字符集的相对优先顺序。另外,可一次指定多种字符集,与首部字段Accept相同的是,也可以用权重q值来表示相对优先级。
该首部字段应用于内容协商机制的服务器驱动协商。
        格式例子如下:
        Accept-Charset:iso-8859-5,unicode-1-1:q=0.8

3、Accpet-Encoding

        Accept-Encoding首部字段用来告知服务器用户代理支持的内容编码及内容编码的优先级顺序,可一次性指定多种内容编码。

4、Accept-Language

        首部字段ccept-Language用来告知服务器用户代理能够处理的自然语言集。(指中文或英文等),以及自然语言集的相对优先级。可一次指定多种自然语言集。和Accept首部字段一样,按权重值Q来表示相对优先级。

5、Authorization

        首部字段Authorization是用来告知服务器,用户代理的认证信息。通常,想要通过服务器认证的用户代理会在接收到返回的401状态码响应后,把首部字段Authorization加入请求中。共用缓存在接收到含有Authorization首部字段的请求时的操作处理会略有差异。

6、Expect

        客户端使用首部字段Expect来告知服务器,期望出现的某种特定行为。因为服务器无法理解客户端的期待作出回应而发生错误时,会返回状态码417Expectation Failed。
        客户端可以利用该首部字段,写明所期望的扩展。虽然HTTP/1.1规范只定义了100-continue。
        等待状态吗100响应的客户端在发生请求时,需要指定Expect:100-continue。

7、From

        首部字段From用来告知服务器使用用户代理的用户的电子邮件地址。通常,其使用目的就是为了显示搜索引擎等用户代理的负责人的电子邮件联系方式。使用代理时,应尽可能包含From首部字段。

8、Host

        首部字段Host会告知服务器,请求的资源所处的互联网主机名和端口号。Host首部字段在HTTP/1.1范围内是唯一一个必须被包含在请求内的首部字段。
        首部字段Host和以单台服务器分配多个域名的虚拟主机的工作机制有很密切的关联,这是首部字段Host必须存在的意义。
        请求被发送至服务器时,请求中的主机名会用IP地址直接替换解决。但如果这时,相同的IP地址下部署运行着多个域名,那么服务器就会被无法理解究竟是哪个域名对应的请求。因此,就需要使用首部字段Host来明确指出请求的主机名。若服务器未设定主机名,那直接发送一个空值即可。

9、If-Match

        形如If-XXX这种样式的请求首部字段,都可称为条件请求。服务器接收到附带条件的请求后,只有判断指定条件为真时,才会执行请求。
        首部字段If-Match,属附带条件之一,它会告知服务器匹配资源所用的实体标记值。这时的服务器无法使用弱ETag值。
      服务器会比对If-Match的字段值和资源的ETage值,仅当两者一致时,才会执行请求。反之,则返回状态码412 Precondition Failed的响应。
        可以使用星号(*)指定If-Match的字段值。这种情况,服务器会忽略ETag值,只要资源存在就处理请求。

10、If-None-Match

        首部字段If-None-Match属于附带条件之一。它和首部字段If-Match作用相反。用于指定If-None-Match字段值的实体标记值与请求资源的ETage不一致时,它就告知服务器处理该请求。
        在GET或HEAD方法中使用首部字段If-None-Match可获取最新的资源。因此,这与使用首部字段If-MOdified-Since时有些类似。

11、If-Modified-Since

        首部字段If-Modified-Since,属附带条件之一,它会告知服务器若If-Modified-Since字段值早于资源的更新时间,则希望能处理该请求。而在指定If-Modified-Since字段值的日期时间之后,如果请求的资源都没有过更新,则返回状态码304 Not Modified的响应。

12、If-Range

        首部字段If-Range属于附带条件之一。它告知服务器若指定的If-Range字段值和请求资源的ETage值或时间相一致时,则作为范围请求处理。反之,则返回全体资源。
        如果不适用If-Range的话,第一次请求中服务器资源如果有更新,那客户端持有资源的一部分也会随之失效,那么范围请求作为前提是无效的。然后客户端收到服务器返回的412 Precodition Failed作为响应返回,再次发送请求申请全部资源,那么一共就进行了两次请求,比起使用If-Range,需要花费两倍的时间。

13、If-Unmodified-Since

        首部字段If-Unmodified-Since和首部字段If-Modified-Since的作用相反。它的作用是告知服务器,指定的请求资源只有在字段值内指定的日期时间之后,未发生更新的情况下,才做处理。如果在指定日期时间后发生了更新,则以状态码412 Precondition Failed作为响应返回。

14、Max-Forwards

        通过TRACE方法或OPTIONS方法,发送包含首部字段Max-Forwards的请求时,该字段以十进制整数形式指定可经过的服务器最大数目。服务器在往下一个吴福气转发请求之前,Max-Forwards的值减1后重新赋值。当服务器接收到Max-Forwards值为0的请求时,则不再进行转发,而是直接返回响应。
        使用HTTP协议通信时,请求可能会经过代理等多台服务器。途中,如果代理服务器由于某些原因导致请求转发失败,客户端也就等不到服务器返回的响应了。对此我们无从可知。
        可以灵活使用首部字段Max-Forwards,针对以上问题产生的原因展开调查。由于当Max-Forwards字段值为0时,服务器就会立刻返回响应,由此至少可以对那台服务器为重点的传输路径的通信状态有所把握。

15、Proxy-Authorization

        接收到从代理服务器发来的认证质询时,客户端会发送包含首部字段Proxy-Authorization的请求,以告知服务器认证所需要的信息。
        这个行为是客户端和服务器之间的HTP访问认证相类似的,不同之处在于,认证行为发生在客户端和代理之间。客户端与服务器之间的认证,使用首部字段Authorization可起到相同的作用。

16、Range

        对于只需获取部分资源的范围请求,包含首部字段Range即可告知服务器资源的指定范围。如Range:bytes=5001-10000,则表示获取从第5001字节至10000字节的资源。
        接收到附带Range首部字段请求的服务器,会在处理请求之后返回状态码为206 Partial Content的响应。无法处理该范围请求时,则会返回状态码200 OK的响应及全部资源。

17、Referer

        首部字段Referer会告知服务器请求的原始资源URI。
        客户端一般都会发送Referer首部字段给服务器。但当直接在浏览器的地址栏输入URI,或处于安全性的考虑时,也可以不发送该首部字段。
        因为原始资源的URI中的查询字符串可能含有ID和密码等保密信息,要是写进Referer准发给其他服务器,则可能导致保密信息的泄漏。
        另外,Referer的正确的拼写应该是Referrer,Referer是一个错误的拼写,但一直沿用。

18、TE

        首部字段TE会告知服务器客户端能够处理响应的传输编码方式及相对优先级。它和首部字段Accept-Encoding的功能很相像,但用于传输编码。
        首部字段TE除了指定传输编码之外,还可以指定伴随trailer字段的分块传输编码的方式。应用后者时,只需要把trailers复制给该字段值。

19、User-Agent

        首部字段User-Agent会将创建请求的浏览器和用户代理名称等信息传达给服务器。
        由于网络爬虫发起请求时,有可能会在字段内添加爬虫作者的电子邮件地址。此外,如果请求经过处理,那么中间也很可能被添加上代理服务器名称。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值