HTTP基础之请求首部字段篇(二)

今天接着上一篇博客,来盘点分析一下HTTP协议中的请求表头

请求标头

请求标头用于客户端发送HTTP请求到服务器中所使用的字段,下 面我们一起来看一下HTTP 请求标头 都包含哪些字段,分别是什么意思。下面一一总结介绍

HTTP基础之请求首部字段篇(二)

Accept

HTTP请求标头会告知客户端能够接收的MIME类型是什么那么什么是MIME类型呢?在回答这个问题前你应该先了解一下什么是MIME?
HTTP基础之请求首部字段篇(二)
也就是说,MIME类型其实就是一系列消息内容类型的集合。那么MIME类型都有哪些呢?
文本文件: text/html、 text/plain、 text/css、application/xhtml+xml、 application/xml
图片文件: image/jpeg、 image/gif、 image/png
视频文件: video/mpeg、 video/quicktime
应用程序二进制文件 : application/octet-stream、 application/zip

比如,如果浏览器不支持PNG图片的显示,那Accept就不指定image/png,而指定可处理的image/gif和image/jpeg等图片类型。

一般MIME类型也会和q这个属性一 起使用,q是什么? q表示的是权重,来看一个例子。

HTTP基础之请求首部字段篇(二)
这是什么意思呢?若想要给显示的媒体类型增加优先级,则使用q=来额外表示权重值,没有显示权重的时候默认值是1.0,我给你列个表格你就明白啦!
HTTP基础之请求首部字段篇(二)
也就是说,这是一个放置顺序,权重高的在前,低的在后,application/xml;q=0.9 是不可分割的整体。

Accept-Charset

Accept-Charset表示客户端能够接受的字符编码。Accept-Charset 也是属于内容协商的一部分,它和Accept - 样,也可以用q来表示字符集,用逗号进行分割,例如
HTTP基础之请求首部字段篇(二)

Accept-Encoding

表示HTTP标头会标明客户端希望服务端返回的内容编码,这通常是一种压缩算法。Accept- Encoding也是属于内容协商的一部分,使用并通过客户端选择Content- Encoding内容进行 返回。即使客户端和服务器都能够支持相同的压缩算法,服务器也可能选择不压缩并返回,这种情况可能是由于这两种情况造成的:
●要发送的数据已经被压缩了一次,第二次压缩并不会导致发送的数据更小
●服务器过载,无法承受压缩带来的性能开销,通常,如果服务器使用CPU超过80%
Mi crosoft则建议不要使用压缩下 面是Accept- Encoding的使用方式

下面是Accept- Encoding的使用方式:
HTTP基础之请求首部字段篇(二)
gzip :由文件压缩程序gzip生成的编码格式,使用Lempel-Ziv编码 (LZ77) 和32位CRC的
压缩格式,感兴趣的同学可以读一下( https://en.wikipedia.org/wiki/LZ77_ and_ LZ78#LZ77 )

compress :使用Lempel-Ziv-Welch (LZW)算法的压缩格式, 有兴趣的同学可以读( https:/
/en.wikipedia.org/wiki/LZW )
deflate : 使用zlib 结构和deflate压缩算法的压缩格式,参考( https://en.wikipedia.org/wik
i/Zlib)和( https://en.wikipedia.org/wiki/DEFLATE)
●br :使用Brotli 算法的压缩格式,参考( https://en.wikipedia.org/wiki/Broti)
●不执行压缩或不会变化的默认编码格式
●:匹配标头中未列出的任何内容编码,如果没有列出Accept-Encoding , 这就是默认值,
并不意味着支持任何算法,只是表示没有偏好
● q=采用权重q值来表示相对优先级,这点与首部字段Accept相同。

Accept-L anguage

Accept-Language请求表示客户端需要服务端返回的语言类型,Accept-L _anguage也属于内容协商的范畴。服务端通过Content-Language 进行响应,和Accept首部字段一样,按权重值q 来表示相对优先级。例如
HTTP基础之请求首部字段篇(二)

Authorization

HTTP Authorization
请求头用于向服务器认证用户代理的凭据,通常用在服务器以401未经授权状
态和WWW-Authenticate标头响应之后,啥意思呢?你不明白的话我画张图给你看

HTTP基础之请求首部字段篇(二)
请求标头Authorization是用来告知服务器,用户的认证信息,服务器在只有收到认证后才会返回给客户端200 OK的响应,如果没有认证信息,则会返回401并告知客户端需要认证信息。详细关于Authorization的信息,后面也会详细解释。

Expect

Expect HTTP请求标头指示服务器需要满足的期望才能正确处理请求。如果服务器没有办法完成客服端所期望完成的事情并且服务端存在错误的话,会返回417 Expectation Failed 。HTTP 1.1只规定了100-continue 。
●如果服务器能正常完成客户端所期望的事情,会返回100
●如果不能满足期望或返回任何其他4xx 的状态码,会返回417
例如

HTTP基础之请求首部字段篇(二)

From(此标头不常用)

From请求头用来告知服务器使用用户代理的电子邮件地址。通常情况下,其使用目的就是为了显示搜索引擎等用户代理的负责人的电子邮件联系方式。我们在使用代理的情况下,应尽可能包含From首部字段。例如
HTTP基础之请求首部字段篇(二)

Host

请求头指明了服务器的域名(对于虚拟主机来说),以及(可选的)服务器监听的TCP端口号。
如果没有给定端口号,会自动使用被请求服务的默认端口(比如请求一 个HTTP的URL会自动使用80作为端口)。

HTTP基础之请求首部字段篇(二)
特别说明:
Host首部字段在HTTP/1.1规范内是唯-一 个必须被包含在请求内的首部字段。

lf-Match

lf-Match后面可以跟一-大堆属性,形式像If-Match这种的请求头称为条件请求,服务器接收到条件请求后,需要判定条件请求是否满足,只有条件请求为真,才会执行条件请求
类似的还有lf-Match、 lf-Modified-Since、 lf-None-Match、 If-Range、 lf-Unmodified Since
对于GET和POST 方法,服务器仅在与列出的ETag (响应标头)
之一匹配时才返回请求的资源。
这里又多了一个新词ETag ,我们稍后再说ETag的用法。对于像是PUT 和其他非安全的方法,在这种情况下,它仅仅将上传资源。

下面是两种常见的案例

对于GET和POST 方法,会结合使用Range标头,它可以确保新发送请求的范围与上一个
请求的资源相同,如果不匹配的话,会返回416 响应。)对于其他方法,特别是PUT方法,If -Match 可以防止丢失更新,服务器会比对lf-Match的字段值和资源的ETag值,仅当两者一致时,才会执行请求。反之,则返回状态码412 (Precondition Failed)的响应。例如

HTTP基础之请求首部字段篇(二)

lf-Modified-Since

If -Modified-Since是HTTP条件请求的一部分,只有在给定日期之后,服务端修改了请求所需要的资源,才会返回200 OK的响应。如果在给定日期之后,服务端没有修改内容,响应会返回304 并且不带任何响应体。If-Modified-Since 只能使用GET 和HEAD 请求。
lf-Modified- Since与lf-None-Match结合使用时,它将被忽略,除非服务器不支持lf-None-Match。一般表示如下

HTTP基础之请求首部字段篇(二)
相关表示时间问题:HTTP基础之请求首部字段篇(二)

If-None-Match

条件请求,它与If -Match的作用相反, 仅当If-None -Match的字段值与ETag 值不一致时,可处理该请求。对于GET和HEAD仅当服务器没有与给定资源匹配的ETag 时,服务器将返回200作为响应。对于其他方法,仅当最终现有资源的ETag与列出的任何值都不匹配时,才会处理请求。
当GET 和POST 发送的If-None-Match与ETag匹配时,服务器会返回304 。

HTTP基础之请求首部字段篇(二)
有同学可能会好奇W/是什么意思,这其实是ETag的弱匹配,关于ETag我们会在响应标头中详细讲述。

lf-Range

If-Range也是条件请求,如果满足条件(If-Range 的值和ETag值或者更新的日期时间一致),则会发出范围请求,否则将会返回全部资源。它的一般表示如下

HTTP基础之请求首部字段篇(二)

If-Unmodified-Since

If-Unmodi fied-Since HTTP 请求标头也是一个条件请求,服务器只有在给定日期之后没有对其进行修改时,服务器才返回请求资源。如果在指定日期时间后发生了更新,则以状态码412 Precondition Failed 作为响应返回 。

HTTP基础之请求首部字段篇(二)

**Max-Forwards **

MDN把这个标头置灰了,所以下面内容取自《图解HTTP’》Max- Forwards-般用于TRACE和OPTION 方法,发送包含Max-Forwards 的首部字段时,每经过一个服务器,Max-Forwards 的值就会-1,直到Max-Forwards为0时返回。Max-Forwards 是一个十进制的整数值。
HTTP基础之请求首部字段篇(二)
可以灵活使用首部字段Max-Forwards,针对以上问题产生的原因展开调查。由于当Max. Forwards字段值为0时,服务器就会立即返回响应,由此我们至少可以对以那台服务器为终点的传输路径的通信状况有所把握。

Proxy-Authorization

Proxy-Authorization是属于请求与认证的范畴,我们在.上面提到一个认证的HTTP标头是
Authorization,不同于Authorization发生在客户端-服务器之间; Proxy-Authorization 发生在代理服务器和客户端之间。它表示接收到从代理服务器发来的认证时,客户端会发送包含首部字段Proxy-Authorization的请求,以告知服务器认证所需要的信息。

HTTP基础之请求首部字段篇(二)

Range

Range HTTP 请求标头指示服务器应返回文档指定部分的资源,可以一次请求一一个Range来返回多个部分。
服务器会将这些资源返回各个文档中。如果服务器成功返回,那么将返回206响应;如果Range范围无效,服务器返回416 Range Not Satisfiable 错误;服务器还可以忽略Range标头,并且返回200作为响应。

HTTP基础之请求首部字段篇(二)

Referer

HTTP Referer属性是请求标头的一部分,当浏览器向web服务器发送请求的时候,一般会带 上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得-一些信息用于处理。

User-Agent

首部字段User-Agent 会 将创建请求的浏览器和用户代理名称等信息传达给服务器。

HTTP基础之请求首部字段篇(二)
资料参考:
《图解HTTP》
相关帖子与博客

学习是条漫长的过程,应当坚持不懈,不断努力,对生活有态度,对技术有追求。