代码之家  ›  专栏  ›  技术社区  ›  jacob

当操作url为跨原点时,Microsoft浏览器不会将表单发布到iframe

  •  1
  • jacob  · 技术社区  · 6 年前

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

    过去,我的web服务器和html/js资产都托管在同一个域中,所有浏览器都工作正常。

    我只是将静态资产移动到另一个域上的cdn,并允许该域在我的网站上使用 access-control-allow-origin ,则, x-frame-options allow-from content-security-policy frame-ancestors 。报告导出在Chrome和Firefox上运行良好,但在Microsoft Edge或IE浏览器上都不再有效。

    在Edge上,开发人员工具网络跟踪显示 POST 到服务器的请求处于“挂起”状态,从未完成,但没有请求的服务器日志。在IE上 HTTP POST 完成得很好,但浏览器不会提示保存文件。在这两种浏览器上,开发人员工具都显示没有 Origin HTTP标头,这对于设置 x-frame-options 回答这也许可以解释IE拒绝保存文件的原因。但Edge甚至没有提交请求。

    我的问题是:

    1. 为什么edge不提交HTTP 邮递 ?
    2. 为什么两个浏览器都不发送HTTP 起源 标题?我应该依靠 Referer 标题?
    1 回复  |  直到 6 年前
        1
  •  0
  •   jacob    6 年前

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

    事实上,我尝试过这种方法,它在所有浏览器中都非常有效!