0

組み込みシステムでカスタム Web サーバーを使用していますが、キャッシュ用の HTTP ヘッダーを正しく設定するのに問題があります。

私たちの Web サーバーはすべての動的コンテンツを XML として生成し、半静的 XSL ファイルを使用して、適切な測定のためにいくつかの動的 JSON 要求を半静的画像とともにスローして表示しています。XSL とイメージ ファイルを変更する可能性のあるファームウェアの更新を行う必要がある場合に問題が発生するため、「半静的」と言います。

XSL および画像ファイルをキャッシュし、XML および JSON 応答をキャッシュしないようにする必要があります。私は HTTP 応答を完全に制御しており、現在:

  1. XSL ファイルと画像ファイルで ETag を使用し、変更された時間とサイズを使用して ETag を生成する
  2. Cache-Control の設定: XML および JSON 応答に対するキャッシュなし

前述したように、XSL とイメージ ファイルが時々キャッシュされるファームウェアの更新まで、すべてがうまく機能します。最新バージョンの Firefox と Safari では問題なく動作することを確認しましたが、IE ではいくつか問題がありました。

この問題の解決策の 1 つは、バージョンごとに XSL ファイルと画像ファイルの名前を変更し (例: logo-v1.1.png、logo-v1.2.png)、Expires ヘッダーを将来の日付に設定することです。これは XSL ファイルでは難しいので、避けたいと思います。

注: ユニットには時計がありますが、ユーザーが設定する必要があり、100% 信頼できない可能性があるため、ETag を使用するときにキャッシュの問題が発生する可能性があります。

採用すべきベストプラクティスは何ですか? できるだけ多くの Web サーバー リクエストを回避したいのですが、ソフトウェアの更新後に古い XSL ファイルとイメージ ファイルを無効にすることが最優先事項です。

4

2 に答える 2

0

同じプロジェクトに取り組んでいますか?私はこれを処理するための最良の方法を考え出すために多くの行き詰まりを乗り越えました。

.htmlファイルと.shtmlファイル(動的JSONデータ)をすぐに期限切れにするように設定しました。("Cache-Control:no-cache \ r \ nExpires:-1 \ r \ n")他のすべては10年で期限切れになるように設定されています。("Cache-Control:max-age = 290304000 \ r \ n")

私のmakefileは、すべての.htmlファイルに対してperlスクリプトを実行し、「半静的」コンテンツ(images、javascript、css)と呼ばれるものを識別します。次に、スクリプトはそれらのファイルに対してmd5チェックサムを実行し、ファイルにチェックサムを追加します。

<script type="text/Javascript" src="js/all.js?7f26be24ed2d05e7d0b844351e3a49b1">

疑問符の後のすべては無視されますが、引用符の間のすべてが一致しない限り、ブラウザは疑問符をキャッシュしません。

同じスクリプトを使用してすべてが結合および縮小されるため、all.jsとall.cssを使用します。

好奇心から、どの組み込みWebサーバーを使用していますか?

于 2010-04-27T23:52:31.427 に答える
0

試してみてくださいCache-Control: no-storeno-cache応答をキャッシュできることをクライアントに通知します。キャッシュがオリジンサーバーに接続できない場合を除いて、通常は再利用されません。

ところで、ETagを単独で設定しても、応答はキャッシュ可能になりません。また、を設定する必要がありますCache-Control: max-age=nnn

http://redbot.org/で回答がどのように扱われるかを確認できます

于 2010-04-30T06:43:02.323 に答える