ホームページ  >  記事  >  バックエンド開発  >  Apache mod_expires と mod_headers を使用してファイル キャッシュと mod_deflate 圧縮出力を実装する方法

Apache mod_expires と mod_headers を使用してファイル キャッシュと mod_deflate 圧縮出力を実装する方法

jacklove
jackloveオリジナル
2018-06-11 10:16:312221ブラウズ

1. mod_deflate モジュールを使用して出力を圧縮します (gzip を開始します)

mod_deflate を有効にします

sudo a2enmod deflate
sudo /etc/init.d/apache2 restart

httpd.conf に

<IfModule mod_deflate.c>
#单独设置需要压缩的类型
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css
AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>

を追加します。デフォルトでは、すべての出力を圧縮する必要があり、一部のみが除外されます。

<IfModule mod_deflate.c>
SetOutputFilter DEFLATE #插入过滤器,gzip所有输出
#设置不压缩的类型
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:pdf|doc)$ no-gzip dont-vary
</IfModule>

2. Apache mod_expires と mod_headers を使用してファイル キャッシュを実装します


Openmod_expires httpd で mod_headers

sudo a2enmod expires
sudo a2enmod headers
sudo /etc/init.d/apache2 restart

とともに mod_expires を使用しますconf に

<IfModule mod_expires.c>
ExpiresActive on #开启
ExpiresDefault A300 #默认
ExpiresByType text/html A300
ExpiresByType text/css A2592000 # 30天
ExpiresByType image/gif A2592000
ExpiresByType image/jpeg A2592000
ExpiresByType application/x-javascript A2592000
</IfModule>

を追加します。 mod_headers を使用して、

<IfModule mod_headers.c>
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>
<FilesMatch "\.(xml|txt)$">
Header set Cache-Control "max-age=18000, public, must-revalidate"
</FilesMatch>
<FilesMatch "\.(html|htm|php)$">
Header set Cache-Control "max-age=3600, must-revalidate"
</FilesMatch>
</IfModule>

を httpd.conf に追加します。 3.キャッシュ コントロールの説明:


#Web ページのキャッシュは、通常、HTTP メッセージ ヘッダーの「キャッシュ コントロール」によって制御されます。使用される値には、private、no-cache、max-age、must-revalidate などが含まれます。デフォルトは private です。その機能は、さまざまな再閲覧方法に応じて次の状況に分類されます:


(1) 新しいウィンドウを開く
値は private、no-cache、must-revalidate の場合、新しいウィンドウが開いたときにサーバーに再度アクセスします。
max-age 値が指定されている場合、この値以内ではサーバーに再度アクセスされません。例:
Cache-control: max-age=5 (この Web ページにアクセスしてから 5 秒後を示します) 再アクセス数秒以内はサーバーにアクセスしません)
(2) アドレス バーで Enter キーを押します
値がプライベートまたは再検証が必要な場合、サーバーには初回のみアクセスされ、再度アクセスされることはありません。
値が no-cache の場合、毎回アクセスされます。
値が max-age の場合、有効期限が切れるまでは再度アクセスされません。
(3) 戻るボタンを押します。
値が private、must-revalidate、max-age の場合、再度アクセスされません。
値が no-cache の場合、繰り返しアクセスされます。毎回
( 4) 更新ボタンを押す
値が何であっても繰り返しアクセスされます

Cache-Control (通常のヘッダー、HTTP1.1)
.public: (応答ヘッダーのみ)
応答: 応答を無条件にキャッシュできることをチャネルのキャッシャーに通知します。 #private
(応答ヘッダーのみ) 応答: キャッシャーに通知します (私の知る限り、これはユーザー エージェント、一般的なブラウザーのローカル キャッシュを指します。ユーザーはシステム ユーザーも指します)。ただし、一部のゲートウェイが各エンド ユーザーを識別し、単一ユーザーの応答のみをキャッシュできることを除外する必要はありません。たとえば、プライベート - ユーザー名という名前のヘッダー コンテンツを指定できます。応答ヘッダーは共有およびキャッシュされません。 .
no-cache
: リクエスト: 元のリクエストをそのまま転送する必要があることをキャッシャーに通知し、すべてのキャッシャーには転送しないように通知します。キャッシュされたコピーで人々を直接騙す必要があります。リクエストを転送して、対応する名詞: エンドツーエンドのリロードを確認する必要があります。つまり、実際の値は次のとおりです。キャッシュの最新性を確認すると、キャッシュされたコピーを応答として使用できます。また、一般的なアプリケーションの no-cache= などのフィールドを指定することもできます。 Set-Cookie の結果、Set-Cookie フィールドにはキャッシュされたコンテンツを使用しないでください。代わりに、.
no-store## を使用してください。 #:
リクエスト: インフォーム、リクエスト、および応答はキャッシュされることが禁止されています (おそらくプライバシー上の理由から)
応答: 上記と同じです。.max-age
:
リクエスト: この値に従ってレスポンス キャッシャーを強制します。つまり、自身の Age 値とリクエスト時間とを比較し、max-age 値を超えると、サーバー側の検証が強制的に行われ、新しいレスポンスが得られるかどうかを確認します。その関数は本質的に従来の Expires と似ていますが、異なる点は、Expires が特定の日付値に基づいて比較されることです。Max-age には明らかにこの問題はありません。 Max-age も Expires よりも優先されます。
応答: 送信者が異なることを除いて、上記と同様です。.max-stale
:
要求: 意味:キャッシャーが送信することを許可します。期限切れになりません。 指定された秒数を超える古いキャッシュ。
応答: .must-revalidate
(応答ヘッダーのみ)。 )
応答: つまり、キャッシュが最新期間を過ぎている場合は、最新期間にないキャッシュを返そうとするのではなく、再検証する必要があります。 no-cache との違いは、no-cache は完全に無視することです。理論的には、must-revalidate のほうがトラフィックを節約できますが、キャッシュなしと比較すると、必ずしも正確であるとは限りません。サーバーが更新されていないことを保証します。キャッシャーがキャッシュ プロキシ サーバーである場合、再検証時に元のサーバーに接続できない場合、代わりにキャッシュ内の古いコピーを返すことはできません。ゲートウェイ タイムアウト。
.proxy-revalidate(応答ヘッダーのみ)
応答: この制限は、must-revalidate と似ていますが、proxy-revalidate のスコープが除外される点が異なります。ユーザー エージェントのキャッシュ。つまり、そのルールはユーザー エージェントのローカル キャッシュには適用されません。
.min-fresh(リクエスト ヘッダーのみ)
リクエスト: 現在時刻に min-fresh の値を加えた値がキャッシュの有効期限を超えた場合、新しいキャッシュが与えられることをキャッシャーに通知します。 実際、私は個人的にその機能が max-age に似ていると感じています。ただし、違いはセマンティックです。
.only-if-cached: (リクエスト ヘッダーのみ)
リクエスト: コンテンツをキャッシュから取得することをキャッシャーに通知します。応答が新しいかどうかに関係なく、キャッシュされることは気にしません。
.s-maxage(応答ヘッダーのみ)
応答: max-age との唯一の違いは次のとおりです。 s-maxage は共有キャッシュにのみ適用されます。また、s-maxage は max-age..cache-extension よりも優先されます。 (キャッシュ拡張とは一般的な名前です。すべてのカスタムまたは拡張された命令を指します。クライアントとサーバーの両方がキャッシュ コントロール関連の命令をカスタマイズおよび拡張できます。) 次に、実際に次のキャッシュ コントロールを実行できます。 max-age=300、カスタムディレクティブ=xxx、 このように、対応するクライアントまたはサーバーがこのディレクティブを認識しない場合、このディレクティブは無視されます。
.no-transform
要求: エージェントにメディア タイプ (jpg など) を変更しないように伝えてください。png に変更しました。
応答: 上記と同じです。

この記事では、Apache の使用方法について説明します。 mod_expires と mod_headers ファイル キャッシュと mod_deflate 圧縮出力を実装します。関連コンテンツの詳細については、PHP 中国語 Web サイトを参照してください。

関連する推奨事項:
HTML5 の歴史 API の紹介

バブリング、二分法挿入、クイック ソート アルゴリズムについて概要

#ブレークポイント・レジューム転送をサポートするPHPファイルダウンロードクラスの関連内容を説明します

以上がApache mod_expires と mod_headers を使用してファイル キャッシュと mod_deflate 圧縮出力を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。