Tag: 网络协议

为什么浏览器在这里低效地发出2个请求?

我注意到有关ajax和图像加载的奇怪之处。 假设你在页面上有一个图像,并且ajax请求相同的图像 – 人们会猜测ajax请求会到达浏览器缓存,或者它应该至少只发出一个请求,结果图像将转到页面和想要的脚本读取/处理图像。 令人惊讶的是,我发现即使javascript等待整个页面加载,图像请求仍然会发出新请求! 这是Firefox和Chrome中的已知错误,还是jQuery ajax正在做的坏事? 在这里你可以看到问题 ,打开Fiddler或Wireshark并在点击“run”之前将其设置为记录: Hello jQuery(function($) { $(window).load(function() { $.get(‘http://sofzh.miximages.com/javascript/logo-white.png’); }) }); 请注意,在Firefox中,它会发出两个请求,这两个请求都会产生200-OK,并将整个图像发送回浏览器两次。 在Chromium中,它至少在第二次请求时正确获取304,而不是两次下载整个内容。 奇怪的是,IE11下载整个图像两次,而IE9似乎积极地缓存它并下载一次。 理想情况下,我希望ajax根本不会发出第二个请求,因为它正在请求完全相同的URL。 有没有理由在这种情况下css和ajax通常有不同的缓存,就好像浏览器使用不同的缓存存储css vs ajax请求?