ここにいくつかのコード例があります。同じ URL に対して 4 つの xmlhttprequests() を続けて作成します。この場合、URL は呼び出しごとに新しい UUID を返すため、4 つの要求が送信され、4 つの異なる応答が返されることが予想されます。Chrome 18、Firefox、および Safari では、これが発生します。
ただし、Chrome 19 では、1 つのリクエストのみが送信されますが、ブラウザは 4 つのリクエストすべてが同じ値で返されたかのように動作します。つまり、コールバックは 4 回実行されますが、毎回同じ応答テキストが返されます。開発者ツールと Wireshark はどちらも、実際に行われたリクエストは 1 つだけであることを確認しています。
ブラウザーのキャッシュ動作に関係しているのではないかと考えましたが、クライアント側 (pragma: no-cache) とサーバー側 (Cache-Control: no-cache) の両方で遊んでも役に立ちませんでした。リクエストごとに異なる偽のクエリ パラメーターを追加すると、4 つの実際のリクエストすべてが強制的に作成されますが、何が変更され、それを処理する別の方法 (URL パラメーター以外) に興味があります。また、これについて話している他の人を見つけることができないので、私は何か変なことや間違ったことをしているのではないかと疑っています.
<!doctype HTML>
<script>
function doOne(i) {
var xh = new XMLHttpRequest();
xh.open("GET", "/uuid", true);
xh.setRequestHeader("pragma", "no-cache");
xh.onreadystatechange = function() {
if (xh.readyState == 4) {
var p = document.createElement('p');
p.innerHTML = xh.responseText;
document.body.appendChild(p);
}
}
xh.send(null);
}
window.onload = function() {
for (var i = 0; i < 4; i++) {
doOne(i);
}
}
</script>
参考までに、このテスト ケース (web.py) のサンプル サーバーに使用しているものを次に示します。
#!/usr/bin/env python
import uuid
import web
urls = (
'/uuid', 'Uuid',
)
class Uuid():
def GET(self):
web.header('Cache-Control', 'no-cache');
return str(uuid.uuid1())
app = web.application(urls, globals())
if __name__ == '__main__':
app.run()