我们有这样的云设置:

User Request -> Perlbal (SSL unwrapping) -> Squid (Caching) -> Apache -> HTTP Response

我们支持某些页面,而不是在其他页面上支持SSL。除了perlbal层之外的所有内容仅处理未加密的http,因为perlbal拆开了SSL,但是它确实添加了一个 X-Forwarded-Proto 标题以使应用程序知道是否使用了SSL。

如果请求通过HTTP登录应用程序(APACHE),则当该特定页面要求SSL重定向到HTTPS时。

当要求安全资源的请求到达我们的申请时,如果应用程序发送 Cache-Control: public, ,鱿鱼缓存正确的内容。问题是,如果用户在缓存后尝试访问该资源的HTTP版本,则鱿鱼将其处理为缓存命中并通过HTTP返回缓存资源,而实际上我们需要将其视为缓存,因为x - 寄生proto与原始请求不匹配。

这是怎么做的?我们的申请发送:

Vary: X-Forwarded-Proto,Accept-Encoding

我很难找到有关此的任何文章/文档,而这个不同的标题似乎是其他人建议的,但它不起作用。鱿鱼不论指示SSL或其他方式的X-Forward-Proto标头,都提供缓存的内容。

有帮助吗?

解决方案

OMFG。

出于历史原因,我们在.htaccess中拥有了这一点:

BrowserMatch "MSIE" brokenvary=1
BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1
BrowserMatch "Opera" !brokenvary
SetEnvIf brokenvary 1 force-no-vary

三个猜测一旦IE 6用户访问我们的网站,鱿鱼缓存会发生什么。删除了变化的标题。缓存策略破坏了。

螺丝即。删除这是一个不错的举动。现在一切正常。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top