0

最初の応答ヘッダーが適切に設定されていれば、ブラウザーからの接続をまったく回避することは可能ですか?

/* Caching control */
$age = 3600*24*30; // 30 days
header('Expires: ' . gmdate('D, d M Y H:i:s ', time() + $age) . 'GMT');

これをセットアップしようとしましたが、とにかくリクエストがサーバーに到達しています。

私はこれを見つけました:

Expires ヘッダーには、実装が簡単であるという利点があります。ただし、ほとんどの場合、非常に組織化された人でない限り、サイトの特定のページがいつ更新されるかを正確に知ることはできません。ブラウザーはページの有効期限が切れた後にのみサーバーに接続するため、キャッシュしたページが古くなっていることをブラウザーに伝える方法はありません。さらに、ブラウザがキャッシュされたページを要求したときにサーバーと通信しないため、Web サイトにアクセスするトラフィックに関する知識も失われます。

問題は、上記の Expires ヘッダーが機能しないのはなぜですか?

** リクエスト ヘッダー **

GET /ru/templates/bannerpartial HTTP/1.1
Host: 192.168.1.3
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.12) Gecko/20101026 AlexaToolbar/alxf-1.54 Firefox/3.6.12 FirePHP/0.4
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Cookie: bla-bla-bla
Cache-Control: max-age=0

** 応答ヘッダー **

HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 16:48:26 GMT
Server: Apache/2.2.14 (Unix) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l PHP/5.3.1 mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1
X-Powered-By: PHP/5.3.1
Set-Cookie: ZDEDebuggerPresent=php,phtml,php3; path=/
Expires: Thu, 09 Dec 2010 16:48:26 GMT
Cache-Control: must-revalidate
Content-Encoding: gzip
Vary: Accept-Encoding
Content-Length: 118
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
4

2 に答える 2

3

次の設定で .htaccess ファイルを使用する方が簡単です。

<ifModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 1 seconds"
    ExpiresByType text/html "access plus 10 seconds"
    ExpiresByType image/gif "access plus 31536000 seconds"
    ExpiresByType image/jpeg "access plus 31536000 seconds"
    ExpiresByType image/png "access plus 31536000 seconds"
    ExpiresByType image/ico "access plus 86400 seconds"
    ExpiresByType image/x-icon "access plus 86400 seconds"
    ExpiresByType text/css "access plus 31536000 seconds"
    ExpiresByType text/javascript "access plus 31536000 seconds"
    ExpiresByType application/javascript "access plus 31536000 seconds"
    ExpiresByType application/x-javascript "access plus 31536000 seconds"
    ExpiresByType application/x-shockwave-flash "access plus 31536000 seconds"
<FilesMatch "\.(flv|gif|jpg|jpeg|png|ico)$">
   Header set Cache-Control "max-age=31536000"
</FilesMatch>

AddType image/vnd.microsoft.icon .ico
ExpiresByType image/vnd.microsoft.icon "access plus 1 months"

</ifModule>

うまくいかない場合は、Apache の httpd.conf ファイル内の以下の行のコメントを外してください (ホストされているサーバーのほとんどは、デフォルトでこのモジュールを有効にしています)。

LoadModule expires_module modules/mod_expires.so

Expires ヘッダーは、リンクをクリックするか、ブラウザの URL バーを選択して Enter キーを押した場合にのみ機能します。リロード ボタンを押す (または F5 キーを押す) と、ブラウザーは expires ヘッダーを無視し、コンテンツをリロードします。

于 2010-11-12T21:01:33.253 に答える
0

試してみてくださいcache-control: max-age。詳細については、このガイドを参照してください: http://www.mnot.net/cache_docs/

于 2010-11-12T21:10:09.147 に答える