【发布时间】:2018-12-17 19:21:26
【问题描述】:
我有一个通过 Facebook Messenger 应用程序打开的 Web 应用程序。在移动设备上,它在 Facebook Messenger 的 web 视图中打开,在桌面上,它在 iFrame 中打开。这适用于除 IE11 之外的所有浏览器。
我们将 X-Frame-Options 标头设置为“ALLOW-FROM https://www.messenger.com”。当应用程序首次加载到 iFrame 中时,它会毫无问题地加载。然后应用程序使用 302 响应请求并重定向。被重定向到的页面显示错误“此内容无法在框架中显示”。控制台中没有像通常在其他浏览器中阻止 iFrame 内容时出现的错误。
在 iFrame 中是否存在 IE11 不支持的重定向方面的某些方面?
申请详情: 这是一个在客户端使用 JS 的 Django 服务器端呈现的 Web 应用程序。我将尝试分解操作顺序:
请求 1:GET 到返回文档的端点 1 - 这已成功显示在 iFrame 中
请求 2:从客户端的 JS POST 到 endpoint1
const formData = new FormData();
formData.append('psid', thread_context.psid);
formData.append('tid', thread_context.tid);
const xhr = new XMLHttpRequest();
xhr.onload = function (event) {
if (this.status !== 200) {
handleError(this);
return;
}
window.location.href = this.responseURL;
};
xhr.onerror = handleError;
xhr.open('POST', postUrl);
xhr.send(formData);
响应是带有位置标头的状态代码 302
请求 3:GET 到 302 响应中返回的位置。
响应是状态代码 200,并在正文中包含文档。
这会导致上面的 xhr.onload 触发,然后调用 window.location.href 重定向到之前返回的新位置。
请求 4:GET 作为更新 window.location.href 的结果。响应为状态码 200。此时浏览器显示“内容无法在框架中显示”消息。
这些请求中的每一个都在响应中包含“ALLOW-FROM https://www.messenger.com”的 X-Frame-Options 标头。
【问题讨论】:
-
您提到应用程序加载后它会以 302 响应请求。您能否尝试提供有关该请求的更多信息。就像您使用的代码一样。你是如何尝试运行它的?或者您可以提供带有步骤的示例代码。我们将尝试运行它并尝试产生问题。
-
我会尝试在我的帖子中添加更多细节以提供帮助。不幸的是,我不能轻易地组合一个示例应用程序或允许任何人公开访问复制。
-
我认为问题的根源在于 IE 显然不支持 responseURL 属性 (developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/…),因此它是未定义的。似乎最终请求(“请求 4”)可能是刷新,而不是重定向的位置。所以我需要弄清楚如何在 IE 中正确获取重定向的位置。
标签: internet-explorer-11 facebook-iframe x-frame-options