为什么我在通过HTTPS上传时从IE8 / IE9上的plupload获得“安全错误”?

时间:2013-01-20 21:26:12

标签: jquery internet-explorer https iis-7.5 plupload

我正在使用plupload将文件上传到ASP.NET WebAPI服务。它在Chrome中工作正常,它在我的开发机器上的IE8 / IE9中运行良好。但是,当我连接到实际服务器上的网站时,上传文件会导致plupload的错误处理程序触发,错误代码为-400,错误消息为“安全错误”。

查看响应和请求标题一切正常。响应甚至包含正确的返回值!我猜这与使用https有关,但我不确定它在Chrome中是否正常工作。 (Firefox有一个完全不同的问题,但似乎至少得到了与IE不同的数据。)

我想知道它与请求Accept标头有关,即:

Accept  application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*

响应头的Content-Type是text / html,因为application / json导致IE想要保存响应而不是将其传递回脚本。

那么这个“安全错误”是什么?为什么我得到它?更重要的是,为什么我得到它,即使响应似乎正确回归?更重要的是,我该如何解决它?

编辑:好的,更多信息。显然,IE9使用html4运行时进行plupload,它使用iframe来处理文件上传。当数据返回并且它试图访问HTMLIFrameElement时,IE9会出现“访问被拒绝”错误。我理解这有助于防止xss错误,但似乎从iframe读取应该是安全的......

所以有人知道解决方法吗?

1 个答案:

答案 0 :(得分:1)

事实证明,IE8和IE9都使用plupload的HTML4运行时,而不是HTML5运行时。 HTML4正常运行时间通过呈现隐藏的iframe来处理上传。这里的问题是IE8 / 9禁止访问该iframe以防止XSS攻击,因此当plupload尝试读取上传结果时,我们会收到该安全错误。

解决方案基本上是让Web服务与调用它的页面保持相同的URL。在我的例子中,我刚刚在IIS中配置了一个指向Web服务站点的虚拟应用程序(它恰好位于同一台服务器上,但我认为它也适用于两台不同的服务器。)

在同一站点中创建虚拟应用程序允许您在仍然从辅助站点获取内容时引用主站点的URL。