1

内部システムのすべてのページで使用される大きな json データ オブジェクト (非圧縮で 300K、gzip で 40K 以上) があります。15分ごとに取得したい。この間に、ユーザーはおそらく私のシステムの数十ページにアクセスするでしょう。

Firebug の HTTP 応答ヘッダーは次のようになります。

Cache-Control   max-age=899, public
Connection  Keep-Alive
Content-Encoding    gzip
Content-Length  44017
Content-Type    text/html; charset=iso-8859-2
Date    Tue, 04 Dec 2012 16:21:45 GMT
Expires Tue, 04 Dec 12 17:36:45 +0100
Keep-Alive  timeout=15, max=99
Last-Modified   Tue, 04 Dec 12 17:21:45 +0100
Pragma  no-cache
Server  Apache
Set-Cookie  user_auth=xxx; expires=Wed, 12-Dec-2012 16:21:45 GMT; path=/; domain=example.com 
Vary    Accept-Encoding
X-Genaration-Time   0.13282179832458 sec.
X-Genarator vCRM 3.1 (c) Veracomp S.A.
X-Powered-By    PHP/5.3.3-7+squeeze14

キャッシュ ヘッダーは今後 15 分に設定されますが、Chrome も Firefox もそれをキャッシュしません。Firebug は、キャッシュについて次のように述べています。

Data Size   44017
Device  disk
Expires Thu Jan 01 1970 01:00:00 GMT+0100
Fetch Count 5
Last Fetched    Tue Dec 04 2012 17:21:45 GMT+0100
Last Modified   Tue Dec 04 2012 17:21:45 GMT+0100

Expires ヘッダーが無視されているようですが、なぜですか?

これは問題ではありませんが、コンテンツ タイプは text/html であるため、サーバーはそれを gzip で圧縮できますが、実際にはコンテンツは JSON であると書いたほうがよいでしょう。

これをリクエストするために Prototype.js を使用しています。リクエストヘッダーを設定しました:

Cache-control: max-age=900

Prototype.js は、キャッシュ無効化パラメータを URL に追加しません。Zend_Framework で PHP を使用して、応答を提供するように設定しています。

私は何を間違っていますか?

4

1 に答える 1

1

問題が解決しました。

@Victor が指摘したように、「Pragma: no-cache」ヘッダーを設定しました。ヘッダーはPHPによって何らかの方法で設定されました。私はWebサーバー管理者と協力して、Apacheでヘッダーの設定を解除することができました.
それでも十分ではありませんでした。私たちのフレームワークは、ページが更新されるたびに Cookie を設定しますが、それを無効にすることはできませんでした。ブラウザは、Cookie を設定するリクエストをキャッシュしたくありませんでした。Set-Cookie ヘッダーも設定解除する必要がありました。最後に、この 2 つの unset により、キャッシュを有効にすることができました。

<LocationMatch "(?i)/url/we/want/to/be/cached/.+">
       Header unset Pragma
       Header unset Set-Cookie
</LocationMatch>
于 2012-12-11T16:26:40.557 に答える