Cas*_*ynn 69 caching http cache-control http-headers
我正在使用Amazon S3为我的网站提供静态资产.我想让浏览器尽可能长时间地缓存这些资产.我应该在资产中包含哪些元数据标头
Cache-Control: max-age=???
Run Code Online (Sandbox Code Playgroud)
mah*_*off 98
通常建议将一年作为标准最大值.请参阅RFC 2616:
要将响应标记为"永不过期",源服务器会在发送响应大约一年后发送过期日期.HTTP/1.1服务器不应该在将来发送超过一年的过期日期.
虽然这适用于较旧的expires标准,但cache-control在没有任何明确的标准指导的情况下适用也是有意义的.只要您通常需要,并且选择任意更长的值可能会破坏一些用户代理.所以:
Cache-Control: max-age=31536000
Run Code Online (Sandbox Code Playgroud)
Geo*_*ath 22
考虑不要"尽可能长时间"存储它,而是尽可能长时间地合理安排.例如,您不太可能需要将其缓存超过10年......我是对的吗?
RFC在此处讨论了max-age:http: //www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3
Eric Lawrence说,在IE9之前,Internet Explorer会将任何具有Cache-Control的资源视为陈旧:max-age值超过2147483648(2 ^ 31)秒,大约68年(http://blogs.msdn.com/b /ie/archive/2010/07/14/caching-improvements-in-internet-explorer-9.aspx).
其他用户代理当然会有所不同,所以...尝试选择一个不太可能(而不是可能!)导致溢出的数字.最大年龄大于31536000(一年)没什么意义,非正式地认为这是一个合理的最大值.
创建最长 1 年缓存建议的人没有正确考虑。
首先,如果向访问者提供过时的缓存文件,那么为什么在 1 年后突然加载新版本会带来任何好处?如果一个文件有 1 年的 TTL,从功能的角度来看,这显然意味着该文件根本不打算更改。
那么为什么需要超过 1 年的时间呢?
1)为什么不呢?它没有任何目的告诉访问者浏览器“嘿,这个文件已经有 1 年了,检查它是否已更新可能是一个想法”。
2)CDN服务。大多数内容交付网络使用缓存头来决定从边缘服务器有效地提供文件多长时间。如果您对文件有 1 年的缓存控制权,它会在某个时候开始从源服务器重新请求未更改的文件,并且需要完全重新填充边缘缓存,从而导致客户端加载速度变慢,并且不必要呼唤原点。
最多 1 年有什么意义?哪些浏览器会因设置高于 31536000 的数量而窒息?
| 归档时间: |
|
| 查看次数: |
46339 次 |
| 最近记录: |