在Internet Explorer中,由于mime类型不匹配,请求的网址被阻止。方案是通过代理服务器将请求从客户端发送到目标服务器。假设我们有A(客户端),B(代理服务器),C(目标服务器)。请求从A(客户端)到B(代理服务器),从B(代理服务器)到C(目标服务器)。类似地,响应也来自C(目标服务器)到B(代理服务器)以及从B(代理服务器)到发起请求的A(客户端)。现在的问题是响应Content-type是“application / liquid”,但客户端使用“script src = proxyserver / test”激活请求,因此响应的例外Content-Type变为“text / javascript”。不允许从目标服务器的“application / liquid”更改响应的Content-type。整个场景在所有其他浏览器中都能很好地运行,并且响应很容易访问。但是在IE中我们得到的错误是“请求因mime类型不匹配而被阻止”。那么,任何人都可以提供解决方案,我们如何使其工作? 以下是错误的屏幕截图。
答案 0 :(得分:3)
TL; DR - 您需要更改mime类型。
当请求期望类型与响应内容类型不同(由标题指示)时,会出现此问题。正确的解决方案是使响应和请求标头彼此兼容。这意味着,您通过脚本标记" 进行的通话"应更改为与响应的accept
标题具有相同的content-type
标题。
另外,请查看文档:
nosniff如果请求的类型是"样式"则阻止请求。和MIME type不是" text / css",或" script"并且MIME类型不是 JavaScript MIME类型。
请参阅here。
我看到此网址:https://nirma.myshopify.com/apps/GeoShippingBar/geoShippingBarProxy的内容类型为:Content-Type:text/html; charset=utf-8
,而不是 javascript-mime-type 。
答案 1 :(得分:2)
试试这个:
response.addHeader("接受""文本/ JavaScript的&#34);
在脚本标记的响应中设置调用它的位置。
答案 2 :(得分:1)
您需要创建一个脚本,一个外部脚本,它将使用ajax调用或xmlhttprequest调用所需的代码,您需要将accept头设置为所需的mime类型。因此,客户端将使用脚本标记调用该外部脚本,脚本标记将通过代理服务器执行,并将进一步调用实际数据并接收其响应并发送回客户端。但是因为它将调用脚本,默认情况下标题将返回为text / javascript并且错误将得到解决。
答案 3 :(得分:0)
基本上你不能这样做。 App Proxys用于创建页面而非脚本文件。
可以让您到达目的地的策略如下:
液体部件的动态可以放入片段中。
<script type="text/javascrpt">
geoShippingConfig = {
somevalue: '{{ shop.X }}',
etc
};
</script>
安装应用程序后,将其注入主布局。各种应用程序都可以做这种事情。你必须警告客户你要去那,但它是相当温和的。您还需要刷新按钮或某种方式在主题更改时重新注入片段和包含。
然后,您的应用会使用您的代码安装脚本标记,而不是调用应用代理。脚本标记包括url中的商店,因此您可以对返回的脚本文件执行任何特定于应用程序的配置。您的脚本标记脚本在加载时使用geoShippingConfig。