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

我正在使用plupload将文件上传到ASP.NET WebAPI服务。 它在Chrome中运行良好,它在我的开发机器上的IE8 / IE9中运行良好。 但是,当我连接到实际服务器上的网站时,上传文件会导致plupload的error handling程序触发,错误代码为-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读取应该是安全的…

所以任何人都知道解决方法吗?

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

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

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