看完让你有一种恍然大悟醍醐灌顶的感觉 http服务器是什么?( 七 )

上面的 Accpet、 Accept-Language、Accept-Encoding 都是属于内容协商的请求标头,我们会在下面说明
Referer
HTTP Referer 属性是请求标头的一部分,当浏览器向 web 服务器发送请求的时候,一般会带上 Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理 。
Referer: https://developer.mozilla.org/testpage.htmlUpgrade-Insecure-Requests
Upgrade-Insecure-Requests 是一个请求标头,用来向服务器端发送信号,表示客户端优先选择加密及带有身份验证的响应 。
Upgrade-Insecure-Requests: 1If-Modified-Since
HTTP 的 If-Modified-Since 使其成为条件请求:

  • 返回200,只有在给定日期的最后一次修改资源后,服务器才会以200状态发送回请求的资源 。
  • 如果请求从开始以来没有被修改过,响应会返回304并且没有任何响应体
If-Modified-Since 通常会与 If-None-Match 搭配使用,If-Modified-Since 用于确认代理或客户端拥有的本地资源的有效性 。 获取资源的更新日期时间,可通过确认首部字段 Last-Modified 来确定 。
大白话说就是如果在 Last-Modified 之后更新了服务器资源,那么服务器会响应200,如果在 Last-Modified 之后没有更新过资源,则返回 304 。
If-Modified-Since: Mon, 18 Jul 2016 02:36:04 GMTIf-None-Match
If-None-Match HTTP请求标头使请求成为条件请求 。 对于 GET 和 HEAD 方法,仅当服务器没有与给定资源匹配的 ETag 时,服务器才会以200状态发送回请求的资源 。 对于其他方法,仅当最终现有资源的ETag与列出的任何值都不匹配时,才会处理请求 。
If-None-Match: "c561c68d0ba92bbeb8b0fff2a9199f722e3a621a"ETag 属于响应标头,后面进行介绍 。
内容协商内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源 。 内容协商会以响应资源的语言、字符集、编码方式等作为判断的标准 。
内容协商主要有以下3种类型:
  • 服务器驱动协商(Server-driven Negotiation)
这种协商方式是由服务器端进行内容协商 。 服务器端会根据请求首部字段进行自动处理
  • 客户端驱动协商(Agent-driven Negotiation)
这种协商方式是由客户端来进行内容协商 。
  • 透明协商(Transparent Negotiation)
是服务器驱动和客户端驱动的结合体,是由服务器端和客户端各自进行内容协商的一种方法 。
内容协商的分类有很多种,主要的几种类型是 Accept、Accept-Charset、Accept-Encoding、Accept-Language、Content-Language 。
Accept
接受请求 HTTP 标头会通告客户端其能够理解的 MIME 类型
那么什么是 MIME 类型呢?在回答这个问题前你应该先了解一下什么是 MIME
MIME: MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准 。 MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据 。
也就是说,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 表示的是权重,来看一个例子
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8这是什么意思呢?若想要给显示的媒体类型增加优先级,则使用 q= 来额外表示权重值,没有显示权重的时候默认值是1.0 ,我给你列个表格你就明白了
qMIME1.0text/html1.0application/xhtml+xml0.9application/xml0.8* / *
也就是说,这是一个放置顺序,权重高的在前,低的在后,application/xml;q=0.9 是不可分割的整体 。
Accept-Charset
accept-charset 属性规定服务器处理表单数据所接受的字符集 。
accept-charset 属性允许您指定一系列字符集,服务器必须支持这些字符集,从而得以正确解释表单中的数据 。
该属性的值是用引号包含字符集名称列表 。 如果可接受字符集与用户所使用的字符即不相匹配的话,浏览器可以选择忽略表单或是将该表单区别对待 。

推荐阅读