【问题标题】:Google Chrome won't cache content谷歌浏览器不会缓存内容
【发布时间】:2012-08-22 03:41:26
【问题描述】:

我一直在寻找解决此问题的方法,但到目前为止一无所获。我在 Node.js/Express 中动态呈现 HTML 页面,通过 SHA256 散列 HTML 字符串生成 ETag,并通过 nginx 发送页面。出于某种原因,Google Chrome 不会缓存页面或为之前的 ETag 发送“If-None-Match”标头。

这是我的请求和响应标头:

请求:

GET / HTTP/1.1
Host: dev.logan.oikoi.co
Connection: keep-alive
Cache-Control: max-age=0
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.82 Safari/537.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: km_ai=Q%2FR9nmmebaNLthhixes8jxMubzQ%3D; km_uq=; kvcd=1346083163009; km_vs=1; km_lv=1346083163

回复:

HTTP/1.1 200 OK
Server: nginx/1.2.3
Date: Sun, 26 Aug 2012 06:20:46 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: Express
Cache-Control: public, max-age=0, must-revalidate, proxy-revalidate
Expires: Thu, 01 Jan 1970 00:00:00 GMT
ETag: "2e26404f4306e4d2a7c821f537aa3e714d655d260462f8a7fdd9f0a8ad501900"
Set-Cookie: connect.sid=rPrRyvqf3LhbilN0syPU3htr.776UPuqojSyF1YgS0AFcyac4qQtv%2FXF9TFSHQ96p6e8; path=/; expires=Sun, 26 Aug 2012 10:20:46 GMT; httpOnly; secure
Content-Encoding: gzip

编辑:我在最初的帖子中忘了提及,但 Firefox 缓存页面没有问题。

【问题讨论】:

    标签: http node.js google-chrome caching


    【解决方案1】:

    您的回复包含这些标题 -

    Cache-Control: public, max-age=0, must-revalidate, proxy-revalidate

    到期:格林威治标准时间 1970 年 1 月 1 日星期四 00:00:00

    删除这些标题,你应该会很好。

    仅供参考:

    1. must-revalidate 强制浏览器在每次请求资源时都发出请求
    2. Expires header 和 max-age=0 告诉浏览器不要缓存资源

    【讨论】:

    • 感谢您的快速回复!我尝试删除这两个标头,但浏览器仍然不会缓存内容或发送“If-None-Match”标头。至于为什么我尝试必须重新验证,正在呈现的页面是动态的并且偶尔会发生变化 - 我想通过不提供不必要的页面来节省带宽,同时仍然检查每个请求的页面是否新鲜。
    猜你喜欢
    • 1970-01-01
    • 2016-05-24
    • 1970-01-01
    • 2011-03-23
    • 2011-08-18
    • 2013-10-14
    • 2011-11-01
    • 2021-07-07
    • 2013-06-16
    相关资源
    最近更新 更多