Ric*_*omi 24 safari firefox internet-explorer google-chrome browser-cache
13.2.2启发式过期
由于源服务器并不总是提供明确的到期时间,因此HTTP缓存通常会分配启发式到期时间,采用使用其他标头值(例如Last-Modified时间)的算法来估计合理的到期时间.HTTP/1.1规范没有提供特定的算法,但确实对其结果施加了最坏情况的约束.由于启发式到期时间可能会影响语义透明度,因此应谨慎使用,我们鼓励源服务器尽可能提供明确的到期时间. HTTP/1.1 RFC 2616
浏览器使用什么算法来估算合理的到期时间?
理想的答案将涵盖所有主要浏览器,并提供源代码或官方博客文章的证据.
Ano*_*non 14
让我们假设我们感兴趣的所有浏览器都是Internet Explorer 8或更新版本(例如IE5在缓存标头方面有一些可怕的行为).
只有一种基于标准的控制缓存方式(使用HTTP/1.1引入) - Cache-ControlHTTP标头.
由于至少1996年IE一直在使用退出策略来缓存HTTPS内容.
自从它推出以来,Chrome已经完成了对HTTPS的选择退出(即除非被告知,否则它将对其进行缓存).2011年,Firefox 4(但不是Safari)切换到HTTPS内容的选择退出缓存.来源.
仅使用HTTP标头来控制浏览器缓存.如果您决定反对这一点,请注意IE只识别在HTML中设置的两个缓存控制指令:
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">
Run Code Online (Sandbox Code Playgroud)
并且看起来只有前者在HTTPS场景中有用.此外,尝试Pragma在IE中使用时可能会出现问题.最后,Chrome会忽略元标记中的缓存指令,从而进一步降低其有用性.
不要使用Expires标题.在现代浏览器中Expires被取代Cache-Control.Expires: 0并且Pragma: no-cache在技术上是无效的响应标头.是的,它们从一开始就存在,但并非所有现代浏览器(例如Chrome)都使用它们并且它们已被取代Cache-Control.
所述Vary报头是一个雷区.在较旧的IE中如何Vary表现.XHR的表现如何Vary.找出详细信息是留给读者的一个练习 - 留下的印象是,最好为不同的内容使用不同的URL ...
允许浏览器通过设置发出条件请求ETags.
Etags允许浏览器进行轻量级检查以查看内容是否已更改,如果没有,则可以避免发出完整请求.
请注意,有些浏览器只是破碎而且需要黑客攻击.IE 8可能在下载已被告知不要缓存的文件时出现问题.
HttpResponseHeaders::GetFreshnessLifetimes()nsHttpResponseHead::ComputeFreshnessLifetime().computeFreshnessLifetimeForHTTPFamily()Ric*_*omi 10
来自Chromium的源代码:https://code.google.com/p/chromium/codesearch#chromium/src/net/http/http_response_headers.cc&l=1082&rcl=1421094684
if ((response_code_ == 200 || response_code_ == 203 ||
response_code_ == 206) && !must_revalidate) {
// TODO(darin): Implement a smarter heuristic.
Time last_modified_value;
if (GetLastModifiedValue(&last_modified_value)) {
// The last-modified value can be a date in the future!
if (last_modified_value <= date_value) {
lifetimes.freshness = (date_value - last_modified_value) / 10;
return lifetimes;
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 8
这篇博文说Internet Explorer 9使用max-age = (DownloadTime - LastModified) * 0.1:http://blogs.msdn.com/b/ie/archive/2010/07/14/caching-improvements-in-internet-explorer-9.aspx
这与Mozilla实际上是一样的(这个帖子相当陈旧,我不知道自那以后是否已经改变):https://developer.mozilla.org/en-US/docs/HTTP_Caching_FAQ
看起来像webkit("...... Safari使用的引擎的OS X系统框架版本......")使用与Chromium相同的启发式方法.
以下内容取自CacheValidation.cpp:
return (creationTime - lastModifiedValue) * 0.1;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4438 次 |
| 最近记录: |