私は特定のURLにETagを提供するWebサーバーを持っています。ブラウザーがこのURLの要求を実行すると、そのURLのサーバーからの前の応答に含まれているETag値に「If-None-Match」というhttpヘッダーが提供されます。今、私がプログラムでリクエストヘッダー "If-Modified-Since"を追加し、それを未来または過去の日付(問題ではない)に設定すると、ブラウザーは "If-None-Match"ヘッダーの送信を停止します。 FireFoxとChromeの両方でこれを見てきました(他のブラウザではテストされていません)。私はHTTP/1.1仕様から、これが当てはまるはずであると結論づけることはできません。なぜこれが起こるのですか?If-Modified-Sinceは、ブラウザのIf-None-Matchをオーバーライドします。
シナリオを再現する簡単なコード例を次に示します。このコードは、サーバーがEtagヘッダーで応答することを前提としています。今
var request = new XMLHttpRequest();
request.open("GET", someUrl, true);
request.onreadystatechange = function(){};
// This statement makes the browser stop sending the "If-None-Match" header
request.setRequestHeader("If-Modified-Since", "Sat, 29 Oct 1994 19:43:31 GMT");
request.send(null);
代わりにhttp://greenbytes.de/tech/webdav/draft-ietf-httpbis-p4-conditional-21.htmlを読むことができます。 –