首页 > 解决方案 > 当操作 url 是跨域时,Microsoft 浏览器不会将表单发布到 iframe

问题描述

我有一个网站,通过在 iframe 中发布带有目标的表单,将报告导出为各种文件格式,并且 http 响应是一个可以下载的文件。

过去,我的 Web 服务器和 html/js 资产都托管在同一个域中,并且所有浏览器都运行良好。

我只是将我的静态资产移动到不同域上的 cdn,并在我的网站上使用access-control-allow-originx-frame-options allow-fromcontent-security-policy frame-ancestors. 报告导出在 Chrome 和 Firefox 上运行良好,但不再适用于 Microsoft Edge 或 IE 浏览器。

在 Edge 上,开发者工具的网络跟踪显示POST到服务器的请求是“待定的”并且永远不会完成,但没有请求的服务器日志。在 IE 上,HTTP POST确实可以正常完成,但浏览器不会提示保存文件。在这两种浏览器上,开发人员工具都显示没有OriginHTTP 标头,这对于设置x-frame-options响应至关重要。所以这可以解释为什么 IE 拒绝保存文件。但 Edge 甚至没有提交请求。

我的问题是:

  1. 为什么边缘不提交 HTTP POST
  2. 为什么两个浏览器都不发送 HTTPOrigin标头?我应该依赖Referer标题吗?

标签: internet-exploreriframecorsmicrosoft-edge

解决方案


我最终得出的结论是,将表单发布到 iframe 以下载文件的方法已经过时,并且可能无法得到浏览器的完全支持,尤其是在 cors 场景中。相反,我认为使用 html5 文件 api 可能是更现代的方法,如下所述: https ://stackoverflow.com/a/23797348/1237919

确实,我尝试了这种方法,它在所有浏览器中都很好用!


推荐阅读