10

次の3つの.htaccessルールの違いと、それぞれをいつ使用するか、どちらか一方を優先する特別なユースケースはありますか?:

Header set Cache-Control "max-age=290304000"
Header set Expires "Thu, 15 Apr 2020 20:00:00 GMT"
ExpiresDefault "access plus 10 years"
4

2 に答える 2

7

HeaderHTTPヘッダーフィールドを変更できるようにするmod_headersのディレクティブです。この場合Header set、前述のヘッダーフィールドのCache-ControlExpiresを効果的に設定するため、既存のヘッダーフィールドは上書きされます。

最初のディレクティブは、ヘッダーフィールドCache-Controlに値を設定します。この値max-age=290304000は、応答時間に対して290304000秒であるフレッシュネスライフタイムを記述します。

これとは対照的に、2番目のディレクティブは、ヘッダーフィールドExpiresThu, 15 Apr 2020 20:00:00 GMTに、絶対時間値を使用して鮮度の有効期間を表す値を設定します。

Cache-Controlmax-age値とExpires有効期限タイムスタンプの両方をもう一方に変換できます

4.2.1。鮮度の寿命の計算

キャッシュは、次の最初の一致を使用して、応答の鮮度の有効期間(freshness_lifetimeとして示される)を計算できます。

  • ..。

  • max-age responseディレクティブ(セクション5.2.2.8)が存在する場合は、その値を使用するか、または

  • Expires応答ヘッダーフィールド(セクション5.3)が存在する場合は、その値からDate応答ヘッダーフィールドの値を引いた値を使用するか、

  • ..。

ただし、両方が存在する場合は、有効期限よりもCache-Controlmax-ageが優先されます。

応答にmax-ageディレクティブ(セクション5.2.2.8 )を含むCache-Controlフィールドが含まれている場合、受信者はExpiresフィールドを無視する必要があります。同様に、応答にs-maxageディレクティブ(セクション5.2.2.9)が含まれている場合、共有キャッシュの受信者はExpiresフィールドを無視する必要があります。どちらの場合も、Expiresの値は、Cache-Controlフィールドをまだ実装していない受信者のみを対象としています。

これらのHTTPキャッシング制御ヘッダーフィールドを手動で設定する代わりに、mod_expiresExpiresDefaultディレクティブを使用すると、HTTPキャッシングを簡単にセットアップできます。鮮度の有効期間は、絶対値または相対値のいずれかで、応答時間(ie access/ now)または要求されたファイルの変更時間(ie modification)を基準にして記述できます。Cache-ControlExpiresの両方を使用します。

この場合、3番目のディレクティブは、デフォルトの鮮度の有効期間を応答時から10年に設定します。

を使用して手動で行う代わりに、HTTPキャッシュ制御にmod_expiresを使用しますHeader。これははるかに便利で、相対的な鮮度と絶対的な鮮度の両方の時間を許可し、Cache-ControlExpiresの両方を使用します。

于 2010-09-19T15:39:16.833 に答える
3

最初のルールは、max-ageエントリをCache-Controlに追加します。ブラウザは、ここに指定された秒単位の時間の後にドキュメントを再フェッチする必要があります。

2番目と3番目のルールは、期限切れヘッダーを作成します。ブラウザは、ここに指定された日付にドキュメントを再フェッチする必要があります。そして、サーバーはいくつかの計算を行う必要があります。

2番目のルールは、すべてのブラウザーとすべてのリソースを同時に更新するように強制しますが、3番目と最後のルールは、要求時間に応じてブラウザーのキャッシュを無効にすることに注意してください。トラフィックの多いサイトがある場合は違いがわかります。おそらく2020年4月15日に劇的なピークが発生します。:)

経験則として:max-ageを使用します。それは非常によくサポートされており、無効な日付を作成する機会はありません。さらに、それはより短いです。

参考文献:

10個のURLは、「01 jan 0001」の有効期限を使用して、有効期限が切れている(おそらくミイラ化されている)と正式に述べています。

于 2010-09-19T13:53:19.850 に答える