.htaccess 高速缓存在HTTPS中不起作用

kq0g1dla  于 2022-11-30  发布在  其他
关注(0)|答案(4)|浏览(110)

我以前曾问过这个问题,并错误地认为我的问题并不真正存在(请参阅:Caching and HTTPS).我错了;这个问题确实存在。
以下是对我的问题的描述:
1.当我从一个HTTP页面加载一个资源(比如说,resource-a)时(当在一个HTTP页面上时,所有资源都来自HTTP),我得到一个200 OK。当我重新加载页面(或者转到另一个HTTP页面)时,resource-a得到一个304 Not Modified
1.当我从一个HTTPS页面加载resource-a时(当在一个HTTPS页面上时,所有资源都将从HTTPS加载),resource-a从HTTPS加载并得到一个200 OK。当我重新加载页面(或转到另一个HTTPS页面)时,我得到一个304 Not Modified
1.当我返回HTTP页面时,resource-a仍然得到304 Not Modified
1.当我返回到HTTPS页面时,resource-a得到一个200 OK缓存的副本发生了什么变化?我如何使它缓存?
以下是标题的示例:

Request URL: https://styles.mydomain.com/assets/styles/main.css
Request Method: GET
Status Code: 200 OK

Request Headers
Accept: text/css,*/*;q=0.1
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Connection: keep-alive
Host: styles.mydomain.com
Referer: https://www.mydomain.com/sign-in/
User-Agent: Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.79 Safari/537.4

Response Header
Accept-Ranges: bytes
Cache-Control: public
Connection: Keep-Alive
Content-Encoding: gzip
Content-Length: 11836
Content-Type: text/css
Date: Tue, 02 Oct 2012 09:51:20 GMT
Expires: Fri, 30 Sep 2022 09:51:20 GMT
Keep-Alive: timeout=5, max=99
Last-Modified: Tue, 02 Oct 2012 09:25:30 GMT
Server: Apache/2.2.22 (Unix) mod_ssl/2.2.22 OpenSSL/0.9.7a mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 PHP/5.3.8
Vary: Accept-Encoding
mum43rcc

mum43rcc1#

这只是一个最好的猜测,但我怀疑发生的情况是,当您通过HTTP连接缓存资源(或该高速缓存中为不安全的会话加载资源)时,它被标记为“不受信任”,因此没有资格从缓存中为HTTPS连接加载资源。
HTTPS的部分目的是确保资源不仅在传输过程中不会被窃听,而且不会被中间人修改。请考虑以下情况:

[HTTP] GET /foo.js (client -> middleman -> server)
Server replies "blue"
Middleman mutates "blue" into "green"
Client caches "green"

此时,该高速缓存中加载foo.js将导致foo.js的受感染副本被加载到HTTPS会话中,从而危及整个页面视图的安全性。(因为它不是通过安全连接高速缓存的),所以它安全地播放它并选择加载文件的新副本以确保不加载受危害的资源。
你的情况有点有趣,你有一个文件的安全缓存副本,但你从该高速缓存返回它的一个不安全的页面。我的猜测是,这是污染的文件,这样它可能不会被重新用于安全缓存。你在什么浏览器中使用这一点?
编辑:和一个想法;既然您有SSL可用,如果您总是加载资源的SSL版本会发生什么?2如果我的猜测是正确的,这应该可以防止该高速缓存被污染,并且应该允许资源保持缓存状态。

xhv8bpkk

xhv8bpkk2#

Chrome浏览器有一个bug,很遗憾没有人去修复它
https://helpx.adobe.com/mt/experience-manager/kb/cache-problems-on-chrome-with-SSL-certificate-errors.html
https://bugs.chromium.org/p/chromium/issues/detail?id=110649#c8
证书的任何错误都意味着页面将不会被缓存。

2w2cym1i

2w2cym1i3#

您是否正在使用任何.htaccess文件?如果是,请将以下代码放入.htaccess文件中进行缓存。

ExpiresActive On
ExpiresByType text/css "access plus 60 days"

希望这能对你有所帮助...

gcuhipw9

gcuhipw94#

很抱歉,我没有看到If-Modified-Since-requestheader,如果我是正确的(wiki),那么这个头是允许服务器用304 Not Modified应答所必需的。
所以问题是你的客户端没有发送正确的请求,也许你的客户端没有使用http缓存的内容来发送https请求。那么你是否在https模式下刷新,以检查它是否在第二个https请求中被请求?

相关问题