特定のURLにETagを提供するWebサーバーがあります。ブラウザがこのURLのリクエストを実行すると、http-header "If-None-Match"に、そのURLに対するサーバーからの以前の応答に含まれているETag値が提供されます。ここで、プログラムでリクエストヘッダー「If-Modified-Since」を追加し、それを未来または過去の日付に設定すると(関係ありません)、ブラウザは「If-None-Match」ヘッダーの送信を停止します。私はこれをFireFoxとChromeの両方で見ました(他のブラウザではテストされていません)。HTTP / 1.1仕様から、これが当てはまるはずだと結論付けることはできません。なぜこれが起こるのですか?
シナリオを再現する簡単なコード例を次に示します。このコードは、サーバーが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);