次の2つのリクエストの場合、次の2つのヘッダーのいずれかが変更されると、ブラウザーによってさらに重視されます:ETagまたはLast-Modified?優先順位は何ですか:ETagまたはLast-Modified HTTPヘッダー?
答えて
「OR」表現のようなものではありませんか?擬似コードで:
if ETagFromServer != ETagOnClient || LastModifiedFromServer != LastModifiedOnClient
GetFromServer
else
GetFromCache
よれセクション13.3.4 RFC 2616に、HTTP 1.1クライアントは、キャッシュ条件付き要求でのETagを使用しなければなりません、そして改変Etag及び最終の両方が存在する場合、それは両方を使用すべきです。サーバによって明示的に宣言されない限り、ETagヘッダは強力なバリデータ(13.3.3節参照)と見なされますが、Last ModifiedヘッダはDateヘッダとの間に少なくともわずかな差がない限り弱いとみなされます。ただし、サーバーはどちらかを送信する必要はありません(ただし可能な場合はSHOULD)。
クライアントは、ヘッダーが変更されているかどうかを確認しません。それは次の条件付き要求で盲目的に使うだけです。要求されたコンテンツを送信するか304 Not Modified応答を送信するかを評価するのはサーバー次第です。サーバーが1つのみを送信する場合、クライアントはその1つだけを使用します(しかし、強力なバリデーターだけが範囲要求に役立ちます)。もちろん、中間キャッシュの裁量にもなります(Cache Controlディレクティブでキャッシュできない限り)。また、サーバーがヘッダーにどのように作用するかについても判断できます。 RFCは、バリデーターが矛盾している場合は304 Not Modifiedを返してはいけませんが、ヘッダー値はサーバーによって生成されるため、余裕があります。
実際には、Chrome、FireFox、およびIE 7以上のすべてが両方のヘッダーを送信していることに気がつきました。 RFCの情報からすでに疑わしかった変更されたヘッダーを送信するときの動作もテストしました。私がテストした4つのクライアントは、ページがリフレッシュされた場合、またはページが現在のプロセスによって初めて要求された場合に限り、条件付き要求を送信しました。
=!正しい比較演算子です。コンバージョンは小さな違いを生む可能性があるため、クライアントはサーバーから受け取ったリテラル文字列を保持する必要があります。あなたは「もっと新しい方が良い」と考えることはできません。
なぜですか?サーバオペレータが悪いバージョンのリソースを元に戻す場合を考えてみましょう。元に戻ったバージョンはOLDERですが、正しいです。
クライアントは、現在サーバーによって提供されているバージョンを使用する必要があります。キャッシュされたバージョンは、同じ場合にのみ使用できます。したがって、サーバーは「新しい」ではなく、同等性をチェックする必要があります。
- 1. JOINの優先順位は?
- 2. Pythonで "="の演算子の優先順位は何ですか?
- 3. 通常のMavenコマンドの優先順位は何ですか:クリーンインストールまたはeclipse:eclipse?
- 4. VS2008のNoStepIntoエントリの優先順位は何ですか?
- 5. ロンボクの注釈の優先順位は何ですか?
- 6. 子オブジェクトの優先順位は何ですか?
- 7. CSSセレクタの優先順位は何ですか
- 8. メインスレッドの優先順位の値は何ですか?
- 9. MLFQの優先順位は何ですか?
- 10. Perl正規表現の優先順位ルールは何ですか?
- 11. MySQLの優先順位順
- 12. CSS優先順位
- 13. 優先順位キューマルチスレッド
- 14. プロセスの優先順位とスレッドの優先順位
- 15. C言語の優先順位の優先順位
- 16. 優先順位レベルのイベントエミッタライブラリ?
- 17. C#エクステンションメソッドの優先順位
- 18. システム全体でのインストールの優先順位はローカルインストールの優先順位ですか?
- 19. ANTLRルールの優先順位
- 20. CSSの優先順位
- 21. MVCルーティングパラメータの優先順位
- 22. JPAカスケードタイプの優先順位?
- 23. express.jsのルータ優先順位
- 24. Javaの優先順位
- 25. メソッドの優先順位
- 26. SQLサーバージョブの優先順位
- 27. Rails3ルーティングの優先順位
- 28. レクサーの優先順位
- 29. Javascriptでメッセージの優先順位付けはありますか?
- 30. libevのイベントの優先順位付けはできますか?
私は、最終的に変更されたタイムスタンプが次のように異なって比較されるべきだと考えます: if ETagFromServer!= ETagOnClient || LastModifiedFromServer> LastModifiedOnClient – RoyM
ETagが弱く、意味的に同等のエンティティを持つことができ、最後に変更されたヘッダーにフォールバックする可能性があるため、これはANDステートメントです。ピクチャが再エンコードされる可能性があり、元のエンコードと再エンコードが同じではないにもかかわらず、元のエンコードと再エンコードが同じであると言いたい場合を考えてみましょう。この場合、最後に変更されたものをフォールバックとして使用したいので、その両方が一貫していなければなりません。 – ParoX