2

私はこれに対する解決策を探していましたが、今のところ何もありません。Node.js/Express で HTML ページを動的にレンダリングし、HTML 文字列を SHA256 ハッシュして 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 ではページのキャッシュに問題はありません。

4

1 に答える 1

1

あなたの応答にはこれらのヘッダーがあります -

キャッシュ制御: public、max-age=0、must-revalidate、proxy-revalidate

有効期限: 1970 年 1 月 1 日 (木) 00:00:00 GMT

これらのヘッダーを削除すると、うまくいくはずです。

ご参考までに :

  1. must-revalidate は、リソースがリクエストされるたびにブラウザにリクエストを強制します
  2. Expired ヘッダーと max-age=0 は、ブラウザにリソースをキャッシュしないように指示します
于 2012-08-27T16:21:15.260 に答える