gpt4 book ai didi

javascript - XMLHttpRequest 在 Chrome 19 中表现不同—— 'faking' 请求?

转载 作者:行者123 更新时间:2023-12-02 18:49:41 25 4
gpt4 key购买 nike

这是一些示例代码。连续对同一个 url 发出四个 xmlhttprequests()。在这种情况下,我预计会发出四个请求,并有四个不同的响应,因为在这种情况下,URL 在每次调用时都会返回一个新的 UUID。在 Chrome 18、Firefox 和 Safari 中,就会发生这种情况。

然而,在 Chrome 19 中,只有一个请求通过线路,但浏览器的行为就好像所有四个请求都返回相同的值。也就是说,回调执行四次,但每次都使用相同的响应文本。开发者工具和 Wireshark 都确认实际上只发出了一个请求。

我认为这可能与浏览器缓存行为有关,但是同时使用客户端(pragma:no-cache)和服务器端(Cache-Control:no-cache)并没有帮助。添加每个请求都不同的虚假查询参数确实会强制它发出所有四个实际请求,但我仍然很好奇发生了什么变化以及处理它的另一种方法可能是什么(除了 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()

最佳答案

我在 Rails 应用程序中使用 Chrome 19 时也遇到了同样的问题。要修复此问题,此代码对我来说效果很好:

before_filter :set_cache_buster
def set_cache_buster
if request.xhr?
response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate"
response.headers["Pragma"] = "no-cache"
response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
end
end

它禁用每个 XMLHttpRequest 的缓存。

鸣谢:http://blog.serendeputy.com/posts/how-to-prevent-browsers-from-caching-a-page-in-rails/

关于javascript - XMLHttpRequest 在 Chrome 19 中表现不同—— 'faking' 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10630204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com