当我访问chesseng.herokuapp.com时,我得到一个看起来像的响应头
Cache-Control:private
Connection:keep-alive
Content-Encoding:gzip
Content-Type:text/css
Date:Tue, 16 Oct 2012 06:37:53 GMT
Last-Modified:Tue, 16 Oct 2012 03:13:38 GMT
Status:200 OK
transfer-encoding:chunked
Vary:Accept-Encoding
X-Rack-Cache:miss
然后我刷新页面然后得到
Cache-Control:private
Connection:keep-alive
Date:Tue, 16 Oct 2012 06:20:49 GMT
Status:304 Not Modified
X-Rack-Cache:miss
所以看起来缓存工作正常.如果它适用于缓存,则Expires和Cache-Control的重点是:max-age.更令人困惑的是,当我在https://developers.google.com/speed/pagespeed/insights/上测试该页面时,它告诉我"利用浏览器缓存".
的Cache-ControlHTTP/1.1头部可以指定最大年龄以及所述高速缓存的内容是否可以是公共或私有的,指示中间高速缓存是否能够高速缓存的内容.
例如,Ruby on Rails expires_in()默认使用Cache-Control: private
将其公开的风险是什么?如果它是公共的,哪些额外的地方可以缓存内容 - 例如它是代理服务器吗?
如果网站像Amazon.com,但用户是匿名的,那么可能没有太多的隐私问题怎么办?如果用户登录,可能会出现隐私问题,因为数据通过位置并且数据可见.如果那个位置想要"坏",那么Cache-Control: private无论如何它真的不需要关心.
如果它是一个用户可以登录的网站,但网站只搜索鱼油和维生素等健康产品,等等.在这种情况下,涉及的隐私更少,因为它与Amazon.com不同,在那里有更多种类的产品,例如用户可以真正关心隐私问题的书籍.
话虽如此,有什么额外的优势Cache-Control: public?
在Windows 7上,我使用的是命令行
python -m SimpleHTTPServer 8888
调用一个简单的Web服务器来提供目录中的文件,以便进行开发.
问题是服务器似乎将文件保留在缓存中.尽管有更新的文件,但仍会提供旧版本的文件.
有没有办法直接从命令行指定"无缓存"选项?
13.2.2启发式过期
由于源服务器并不总是提供明确的到期时间,因此HTTP缓存通常会分配启发式到期时间,采用使用其他标头值(例如Last-Modified时间)的算法来估计合理的到期时间.HTTP/1.1规范没有提供特定的算法,但确实对其结果施加了最坏情况的约束.由于启发式到期时间可能会影响语义透明度,因此应谨慎使用,我们鼓励源服务器尽可能提供明确的到期时间. HTTP/1.1 RFC 2616
浏览器使用什么算法来估算合理的到期时间?
理想的答案将涵盖所有主要浏览器,并提供源代码或官方博客文章的证据.
safari firefox internet-explorer google-chrome browser-cache
我已经阅读了很多与此相关的文章,也阅读了有关HTTP缓存的很好的文章:https : //developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching?hl = en#无效并更新缓存的响应, 但我仍然不清楚:
为什么发送ETag标头不足以使特定资源的浏览器缓存无效?为什么每个人都建议实际更改资源的URL /文件名以强制浏览器重新下载文件?如果浏览器已经使用特定的ETag缓存了文件,并且在服务器上修改了ETag,那还不够吗?