【发布时间】:2014-04-07 04:06:49
【问题描述】:
我读到请求是否经过身份验证或安全,它不会被缓存。我们之前在缓存上工作,现在计划购买 SSL 证书。
如果使用 SSL 连接无法完成缓存,那是否意味着我们在缓存方面的工作毫无用处?
【问题讨论】:
我读到请求是否经过身份验证或安全,它不会被缓存。我们之前在缓存上工作,现在计划购买 SSL 证书。
如果使用 SSL 连接无法完成缓存,那是否意味着我们在缓存方面的工作毫无用处?
【问题讨论】:
你的参考是错误的。通过 https 发送的内容将被缓存在现代浏览器中,但它们显然不能被缓存在中间代理中。例如,请参阅 http://arstechnica.com/business/2011/03/https-is-great-here-is-why-everyone-needs-to-use-it-so-ars-can-too/ 或 https://blog.httpwatch.com/2011/01/28/top-7-myths-about-https/。
【讨论】:
您可以使用 Cache-Control: public 标头来允许缓存通过 HTTPS 提供的表示。
虽然您引用的文档是 "If the request is authenticated or secure (i.e., HTTPS), it won’t be cached.",但它位于以“一般来说,这些是最常见的规则 [...]”开头的段落中。
同一份文档有更多细节after this:
有用的
Cache-Control响应头包括:
public— 将经过身份验证的响应标记为可缓存;通常,如果需要 HTTP 身份验证,响应会自动保密。
(适用于带有身份验证的 HTTP 也适用于 HTTPS。)
显然,实际上包含仅针对经过身份验证的用户的敏感信息的文档不应使用此标头提供,因为它们确实不应该被缓存。但是,将此标头用于适合缓存的项目(例如常见图像和脚本)应该会提高您网站的性能(正如预期的通过普通 HTTP 进行缓存一样)。
HTTPS 永远不会发生的事情是中间代理服务器(在客户端和您的网络服务器之间,至少是外部部分之间,如果您有负载平衡器或类似服务器)缓存资源。一些 CDN 将通过 HTTPS 提供内容(假设它适合您的系统信任这些 CDN)。一般来说,这些代理服务器无论如何都不会在您的缓存设计的控制之下。
【讨论】: