1.Accept
:浏览器可接受的MIME类型。MIME 类型有很多种, 例如:
Accept:text/html,表明客户端希望接受 HTML 文本。
Accept:image/gif,表明客户端希望接受 GIF 图像格式的资源。
Accept:image/*,表明客户端可以接受所有image格式的子类型。
Accept:*/*,表明客户端可以接受所有格式的内容。
例如,如果浏览器和服务器同时支持 png 类型的图片,则浏览器可以发送包含 image/png 的 Accept 的头字段,服务器检查到 Accept 头中包含 image/png 这种 MIME 类型,可能在网页中的 img 元素中使用 png 类型的文件
2.Accept-Charset
: 浏览器可接受的字符集
Accept-Charset:UTF-8,ISO-8859-1
需要注意的是,
Accept-Charse
t 头字段没有在请求头中出现,则说明客户端能接受使用任何字符集的数据。Accept-Charset
头出现在请求消息里,但是服务器不能发送采用客户端期望字符集编码的文档,那么服务器将发送一个 406 错误状态响应,406 是一个响应状态码,表示服务器返回内容使用的字符集与Accept-Charset头字段指定的值不兼容。3.Accept-Encoding
: 浏览器能够进行解码的数据编码方式。这里的编码方式通常指的是某种压缩方式。
Accept-Encoding:gzip,compress
在上面的头字段中,gzip
和 compress
这两种格式是最常见的数据编码方式。在传输较大实体的内容之前,对其进行压缩编码,可以节省网络带宽和传输时间。服务器接收到这个请求头,它使用其中指定的一种格式对原始文档内容进行压缩编码,然后再将其作为响应消息的实体内容发送给客户端,并且在 Content-Encoding 响应头中指出实体内容所使用的压缩编码格式。浏览器在接收到这样的实体内容之后,需要对其进行反向解压缩。
需要注意的是,Accept-Encoding 和 Accept 消息头不同,Accept 请求头指定的 MIME 类型是指解压后的实体内容类型,Accept-Encoding 消息头指定的是实体内容压缩的方式。。
4.Accept-Language
:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。
5.Authorization
:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。
6.Connection
:表示是否需要持久连接。
7.Content-Length
:表示请求消息正文的长度。
8.Cookie
:这是最重要的请求头信息之一
9.From
:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。
10.Host
:初始URL中的主机和端口。
11.If-Modified-Since
:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modifie
d”应答。
12.Pragma
:指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝。
13.Referer
:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。
14.User-Agent
:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。
15.UA-Pixels
,UA-Color
,UA-OS
,UA-CPU
:由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型。
百度百科:https://baike.baidu.com/item/http%E8%AF%B7%E6%B1%82%E5%A4%B4/6623287?fr=aladdin
应用程序缓存是 HTML5 的重要特性之一,提供了离线使用的功能,让应用程序可以获取本地的网站内容,例如 HTML 、 CSS 、图片以及 JavaScript 。这个特性可以提高网站性能,它的实现借助于 manifest
文件,如下:
<html manifest=”example.appcache”>
html>
与传统浏览器缓存相比,它不强制用户访问的网站内容被缓存
优点:
浏览器的缓存机制也就是我们说的HTTP缓存机制,其机制是根据HTTP报文的缓存标识进行的。
浏览器和服务器进行Http通信时发送的数据即为Http报文,其中分为两部分:
header
- 报文的首部或头部,其中保存着各类请求的属性字段,关于Http的缓存相关规则信息均保存在header中body
- 请求体部分,Http请求真正传输的主体部分 Http缓存主要分为两种:强缓存和协商缓存,根据响应的header
内容来决定
获取资源形式 | 状态码 | 发送请求到服务器 | |
---|---|---|---|
强缓存 | 从缓存取 | 200(from cache) | 否,直接从缓存取 |
协商缓存 | 从缓存取 | 304(not modified) | 是,通过服务器来告知缓存是否可用 |
强缓存相关字段有expires
,cache-control
。如果cache-control
与expires
同时存在的话,cache-control
的优先级高于expires
, 即:cache-control优先级比expires高。
控制强制缓存的字段分别有
1. expires: 表示未来资源会过期的时间
即当发起请求的时间超过了 expires 设定的时间,会发送请求到服务器重新获取资源。
2. cache-control: 取值有五种, 如下:
private
:客户端可以缓存(默认值)public
:客户端和代理服务器均可缓存;max-age=xxx
:缓存的资源将在 xxx 秒后过期;no-cache
:需要使用协商缓存来验证是否过期;no-store
:不可缓存(所有内容都不会缓存,强制缓存,对比缓存都不会触发)协商缓存相关字段有Last-Modified/If-Modified-Since
,Etag/If-None-Match
1)在http 1.0
版本中,第一次请求,服务器通过 Last-Modified
来设置响应头的缓存标识,并且把资源最后修改的时间作为值填入,然后将资源返回给浏览器。
在第二次请求时,浏览器会首先带上 If-Modified-Since
请求头去访问服务器,服务器会将 If-Modified-Since
中携带的时间与资源修改的时间匹配。
2)在 http 1.1
版本中,在第一次请求时,服务器通过 Etag
来设置响应头缓存标识,并将资源和 Etag
一并返回给浏览器,浏览器缓存到本地。
在第二次请求时,浏览器会将 Etag
信息放到 If-None-Match
请求头去访问服务器,服务器收到请求后,会将服务器中的文件标识与浏览器发来的标识进行对比,
注:弊端,就是当服务器中的资源增加了一个字符,后来又把这个字符删掉,本身资源文件并没有发生变化,但修改时间发生了变化。当下次请求过来时,服务器也会把这个本来没有变化的资源重新返回给浏览器。
总结:强制缓存优先于协商缓存进行,若强制缓存(Expires和Cache-Control)生效则直接使用缓存,若不生效则进行协商缓存(Last-Modified / If-Modified-Since和Etag / If-None-Match),协商缓存由服务器决定是否使用缓存,若协商缓存失效,那么代表该请求的缓存失效,重新获取请求结果,再存入浏览器缓存中;生效则返回304,继续使用缓存
参考于: