InternetExplorer中使用代理

时间:2017-12-28 16:19:09

标签: javascript internet-explorer proxy mime

在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类型不匹配而被阻止”。那么,任何人都可以提供解决方案,我们如何使其工作? 以下是错误的屏幕截图。

enter image description here

4 个答案:

答案 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。