0

Web ページがあり、その中にいくつかの画像などがあります。キャッシュをクリアして URL にアクセスします。ページ要求には、次の応答ヘッダーがあります。

Cache-Control:public, max-age=600
Connection:keep-alive
Content-Encoding:gzip
Content-Language:en
Content-Type:text/html; charset=utf-8
Date:Wed, 21 Nov 2012 07:14:35 GMT
Etag:"1353481170-1"
Expires:Sun, 19 Nov 1978 05:00:00 GMT
Last-Modified:Wed, 21 Nov 2012 06:59:30 +0000
Server:Apache/2.2.3 (CentOS)
Vary:Cookie,Accept-Encoding

画像の 1 つには、次の応答ヘッダーがあります。

Accept-Ranges:none
Cache-Control:max-age=1209600
Connection:keep-alive
Content-Encoding:gzip
Content-Length:2206
Content-Type:text/css
Date:Wed, 21 Nov 2012 07:14:36 GMT
ETag:"6c4f9-89e-4cee5893ab000"
Expires:Wed, 05 Dec 2012 07:14:36 GMT
Last-Modified:Tue, 20 Nov 2012 04:19:12 GMT
Server:Apache/2.2.3 (CentOS)
Vary:Accept-Encoding 

同じ URL にもう一度アクセスして、Chrome でコンソールを表示すると、メインのリクエストではブラウザが If-modified-since を送信し、サーバーからプロンプト 304 を取得するのに対し、画像ではブラウザはリクエストを送信せず、キャッシュから提供されます。

私の質問は次のとおりです。

  1. 秒数が異なっていても、両方のリソースの最初の応答に max-age ヘッダーと last-modified ヘッダーがある場合、ブラウザーは css/JS/img をテキスト coz とは異なる方法で処理しますか? それから、なぜ一方はまだリクエストを送信し、もう一方は送信しなかったのですか。

  2. 優先される max-age ヘッダーと last-modified ヘッダーがある場合は? max-age (AFAIK) の目的は、サーバーへのラウンド トリップを保存することです。HTTP に従って、キャッシュが last-modified ヘッダーを取得した場合、後続のリクエストで常に if-modified-since を送信します。

4

1 に答える 1

0
  1. いいえ、ブラウザはファイルを別様に扱うべきではありません。ヘッダーの内容に従うだけです。受信したファイルの有効期限がまだ切れていないため、ブラウザーは画像の新しい要求を送信しません。max-age ヘッダーと Expires ヘッダーの両方で、 が 2 週間有効期限切れにならないように指定しています。

  2. Last-Modifiedヘッダーは関係ないと思います。Dateage は、オブジェクトが変更されたときではなく、(ヘッダーで指定されたように) オブジェクトが送信されてからの時間として計算されます。

max-ageより良い質問は、キャッシュ制御ディレクティブとExpiresヘッダーの間でどちらが優先されるかです。RFC 2616 セクション 14.9.3 は次のように述べています。

応答に Expires ヘッダーと max-age ディレクティブの両方が含まれている場合、Expires ヘッダーがより制限的であっても、max-age ディレクティブが Expires ヘッダーをオーバーライドします。

オブジェクトの有効期限が切れると、そのLast-Modified時間がIf-Modified-Since リクエストのヘッダーで使用されます。

于 2012-11-21T08:29:49.640 に答える