浅析浏览器缓存背后的HTTP

一. 回车分为两种情况:

1.请求的URI在浏览器缓存中未过期,此时直接从浏览器缓存中读取资源。

2.请求的URI在浏览器缓存中过期了,此时会在请求头中出If-Modified-Since或If-None-Match等(具体字段可能不同)向服务器确认此URI请求的资源是否更新过,其中If-Modified-Since是的时间是由上次HTTP响应的Last-Modified决定的,而If-None-Match的值是上次响应的ETag值,服务器鉴定之后,没有修改的话返回304 Not-Modified,浏览器从缓存中直接读取资源;如果有修改的话,则正常返回新的资源。


二. F5刷新

客户端发送的请求中包含max-age指令时,如果判定资源的缓存时间数值比指定时间的数值更小,那么客户端就就接收缓存的资源,当max-age值为0,那么缓存服务器通常将请求转发给源服务器。

当服务器返回的响应中包含max-age指令时,指定时间内缓存服务器将不对资源的有效性再做确认,而max-age数值代表资源保存为缓存的最长时间。

注意:在HTTP1.1版本中max-age优先于Expires首部字段,而在HTTP1.0版本中恰好相反。


刷新时浏览器会在请求头中的Cache-Control中增加max-age=0,这时在HTTP1.1版本中不管浏览器缓存过的文件过期没有,都需要将请求发送往服务器进行确认。


三. Ctrl+F5强制刷新

此时Cache-Control会换成no-cache,为了兼容HTTP1.0版本可能会出现Pragma: no-cache;客户端要求所有的中间服务器不返回缓存的资源,直接到服务器上重新下载。


Cache-Control会优先于其他设置比如:Expires和last-Modified,一下是设置不同cache-control值浏览器对应的响应:

浅析浏览器缓存背后的HTTP