您的位置:首页 > 理论基础 > 计算机网络

关于HTTP缓存

2017-05-08 17:35 169 查看
鉴于面试总是被问到这个问题,而且之前也是懂得大概,因此查看了MDN、阅读了《HTTP权威指南》,以及一些好的博客,这可能是我写得最全面的HTTP缓存了吧。

Cache-Control和Expire

以前一直以为只有浏览器可以设置cache-control,然而并不是:

Cache-Control可以通过设置max-age值来指定缓存的有效期(单位:秒)。

Cache-Control: max-age=3153600

Expires可以指定一个特定的缓存过期时间,效果同Cache-Control的max-age一样。

Expires: Fri, 01 Jul 2016 00:00:00 GMT

Cache-Control是浏览器设置还是服务器设置?

Cache-Control 通用消息头被用于在http 请求和响应中通过指定指令来实现缓存机制。缓存指令是单向的, 这意味着在请求里设置的指令,在响应中不用包含相同的指令。

意思就是浏览器设置了Cache-control,服务器端就不用设置?

浏览器Request:

Cache-Control: max-age=

Cache-Control: max-stale[=]

Cache-Control: min-fresh=

Cache-control: no-cache

Cache-control: no-store

Cache-control: no-transform

Cache-control: only-if-cached

服务器Response

Cache-control: must-revalidate

Cache-control: no-cache

Cache-control: no-store

Cache-control: no-transform

Cache-control: public

Cache-control: private

Cache-control: proxy-revalidate

Cache-Control: max-age=

Cache-control: s-maxage=

可以看到区别请求和响应都可以设置 no-cache, no-store,max-age。其他的都不一样。

可缓存性

public

表明响应可以被任何对象(包括:发送请求的客户端,代理服务器,等等)缓存。

private

表明响应只能被单个用户缓存,不能作为共享缓存(即代理服务器不能缓存它)。

only-if-cached

表明如果缓存存在,只使用缓存,无论原始服务器数据是否有更新。

no-cache

强制所有缓存了该响应的缓存用户,在使用已存储的缓存数据前,发送带验证器的请求到原始服务器

到期

max-age=

设置缓存存储的最大周期,超过这个时间缓存被认为过期(单位秒)。与Expires相反,时间是相对于请求的时间。

s-maxage=

覆盖max-age 或者 Expires 头,但是仅适用于共享缓存(比如各个代理),并且私有缓存中它被忽略。

max-stale[=]

表面客户端愿意接收一个已经过期的资源。 可选的设置一个时间(单位秒),表示响应不能超过的过时时间。

私有缓存与公有缓存

可以看到服务器端设置cache-control的参数有private和public,private强制只能被个人用户缓存,也就是私有缓存。而设置为public的话,表示可以被任何对象缓存,即公有缓存。

私有缓存

Web浏览器中有内建的私有缓存——大多数浏览器会将常用的文档缓存在你的个人电脑的磁盘和内存中,并且允许用户去配置缓存的大小等。例如,IE就可以从Tools(工具)——Internet Options查看,Navigator可以通过URL about:cache查看。

公有代理缓存

公有代理是特殊的共享代理服务器
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: