具有XHR的IE11跨域缓存

问题描述 投票:0回答:2

我仅在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错误/问题吗?有什么解决方法吗?

https xmlhttprequest internet-explorer-11
2个回答
0
投票

请尝试在URL的开头添加“ http://allow-any-origin.appspot.com/”。


0
投票

似乎是有记录的限制,并且仅在Microsoft Edge中受支持

https://msdn.microsoft.com/en-us/library/hh673569(v=vs.85).aspx

Microsoft Edge通过缓存通过启用了CORS的XHR操作下载的资源,与直接下载这些资源的方式相同,可以提高网络性能。以前,在许多情况下,此类项目将禁用缓存。这种新行为允许在后续请求中从本地磁盘加载更多资源,从而减少了网络使用并缩短了加载时间。“

解决方法是将站点添加到受信任的区域中,并更改安全性设置以激活跨域数据源,但我认为它仅对有限的情况(如Intranet或特殊应用程序,而不是面向公众的网站)才可行

另一种解决方法可能是将资源保留在本地存储中

© www.soinside.com 2019 - 2024. All rights reserved.