我仅在IE11中遇到此问题。 Chrome和Firefox都可以正常工作。
我正在尝试使用XHR从其他域获取图像。该图像托管在https地址中。代码类似于此小提琴:http://jsfiddle.net/ajojw9cq/
<img src="https://wordmagicbox.files.wordpress.com/2012/12/moto-morini-scrambler.jpeg?w=300&h=208" width=200 height=200/>
<script>
function handleStateChange() {
if (xhr.readyState === 4) {
switch (xhr.status) {
case 200:
console.log("200");
break;
case 404:
handleError();
break;
case 304:
console.log("304");
break;
default:
break;
}
}
}
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://img.desmotivaciones.es/201104/Sinttulo_2159.jpg");
xhr.onreadystatechange = handleStateChange;
xhr.send(null);
</script>
此小提琴与我的代码之间的主要区别是链接,并且我知道图像的域实际上允许我的域从中获取图像。
我确实在每个浏览器上都获得了图像,但是即使使用xhr.msCaching = "enabled"
,IE11似乎也不会缓存它们。
IE11还在每个XHR请求中发送一个“ Cache-control: no-cache
”标头,这很奇怪。我试图覆盖该标头,但它似乎不起作用。
[另一个观察结果是,当我使用<img>
标记并将src
设置为该图像的url时,它将正常缓存并得到304。如果使用XHR或Image()
类,则不会缓存(200),我真的需要它来缓存这两者之一。
这是IE11错误/问题吗?有什么解决方法吗?
请尝试在URL的开头添加“ http://allow-any-origin.appspot.com/”。
似乎是有记录的限制,并且仅在Microsoft Edge中受支持
https://msdn.microsoft.com/en-us/library/hh673569(v=vs.85).aspx
Microsoft Edge通过缓存通过启用了CORS的XHR操作下载的资源,与直接下载这些资源的方式相同,可以提高网络性能。以前,在许多情况下,此类项目将禁用缓存。这种新行为允许在后续请求中从本地磁盘加载更多资源,从而减少了网络使用并缩短了加载时间。“
解决方法是将站点添加到受信任的区域中,并更改安全性设置以激活跨域数据源,但我认为它仅对有限的情况(如Intranet或特殊应用程序,而不是面向公众的网站)才可行
另一种解决方法可能是将资源保留在本地存储中