1

こんにちは、地球人の皆さん!しばらくの間、考えられる解決策を空想していますが、この奇妙な問題の手がかりがありません。理由を説明してから、問題を説明しましょう。

javascripts ファイルを組み合わせて http リクエストを減らすために、私はそれらを php に入れました。これは、半年間キャッシュする頭痛のないシンプルで小さな幸せなソリューションです。(もっと多くのことがそのように機能するようになれば、人生はもっと良くなるでしょうか?) 火事と忘れの解決策。だから我慢した…

Web サイトは問題なく動作しますが、php で生成された js ファイルのヘッダーを表示すると、次のショーストッパーが表示されたようです。

An If-Modified-Since conditional request returned the full content unchanged.

PHPで生成されたファイルcombined.jsの何が問題になっていますか? 示唆に富む回答は大歓迎です!

以下のファイル < allcombined.js >

<?php
header("Content-type: text/javascript; charset=UTF-8");
header("Expires: " . gmdate ("D, d M Y H:i:s", time() + 2419200) . " GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s", time() - 604800) . " GMT");

ob_start("compress");

include('script1.js');
include('script2.js');
include('script3.js');

ob_end_flush(); 
?>
4

1 に答える 1

2

「If-Modified-Since」ヘッダーを処理するには、そのヘッダーを解析し、最終変更日と比較する必要があります。これは、Web サーバーの前に Varnish のような HTTP キャッシュがない限り、自動的には行われません。PHP では、日付が満足のいくものである場合、本文をレンダリングせず、代わりに304 Not Modified応答を返します。これが行われた良い例です。[php.net]

アセットに対する要求が予想より多いのは、Cache-Control または Pragma ヘッダーを設定していないためです。あなたはおそらくやりたい:

header("Cache-Control: public, max-age=2419200");
header("Pragma: public");

クライアントに時々更新をチェックインさせたい場合は、これほど長く max-age を設定したくないかもしれません...

于 2011-02-14T00:55:56.550 に答える