我正在开发一个网页,需要在iframe中显示由另一家公司的SharePoint服务器提供的报告。他们对此没有意见。
我们试图在iframe中渲染的页面却出现了"X-Frame-Options: SAMEORIGIN",这导致浏览器(至少是IE8)拒绝在框架中呈现内容。
首先,这是否是他们可以控制的,还是SharePoint默认会这样做?如果我要求他们关闭此设置,他们能做到吗?
其次,我能否采取措施告诉浏览器忽略此HTTP头并直接呈现框架?
我正在开发一个网页,需要在iframe中显示由另一家公司的SharePoint服务器提供的报告。他们对此没有意见。
我们试图在iframe中渲染的页面却出现了"X-Frame-Options: SAMEORIGIN",这导致浏览器(至少是IE8)拒绝在框架中呈现内容。
首先,这是否是他们可以控制的,还是SharePoint默认会这样做?如果我要求他们关闭此设置,他们能做到吗?
其次,我能否采取措施告诉浏览器忽略此HTTP头并直接呈现框架?
更新:2019-12-30
看起来这个工具不再可用!
[请求更新!]
更新 2019-01-06:您可以使用我的X-Frame-Bypass Web组件绕过X-Frame-Options
在<iframe>
中。它通过使用多个CORS代理扩展了IFrame元素,并在最新版本的Firefox和Chrome中进行了测试。
您可以按如下方式使用它:
(Optional) Include the Custom Elements with Built-in Extends polyfill for Safari:
<script src="https://unpkg.com/@ungap/custom-elements-builtin"></script>
Include the X-Frame-Bypass JS module:
<script type="module" src="x-frame-bypass.js"></script>
Insert the X-Frame-Bypass Custom Element:
<iframe is="x-frame-bypass" src="https://example.org/"></iframe>
X-Frame-Options头是在浏览器层面上强制执行的安全功能。
如果您能够控制用户群体(例如企业应用的IT部门),那么您可以尝试使用类似于Greasemonkey脚本的东西(如果您能够a)在所有人员中部署Greasemonkey并b)以共享方式部署您的脚本)...
或者,您可以代理他们的结果。 在您的服务器上创建一个端点,让该端点打开与目标端点的连接,并简单地将流量向后导。
是的,Fiddler对我来说是一个选择:
CustomRules.js
).OnBeforeResponse
Add the following lines:
oSession.oResponse.headers.Remove("X-Frame-Options");
oSession.oResponse.headers.Add("Access-Control-Allow-Origin", "*");
至于第二个问题-您可以使用Fiddler过滤器手动设置响应X-Frame-Options
头,例如ALLOW-FROM *
。但是,当然,这个技巧只对您有效-其他用户仍然无法看到iframe内容(除非他们也这样做)。
X-Frame-Options
选项,它只是使用代理来抓取目标页面并返回没有头信息的内容。它只适用于GET请求,无法获取cookies,只能抓取第三方代理(其中之一为cors.io
,jsonp.afeld.me
,cors-anywhere.herokuapp.com
)可以访问到的页面(可能会在其中一个站点上留下内容的副本)。由于OP询问Sharepoint,这个连接可能是通过VPN进行的,并且需要cookie,这两者都无法与未经记录的第三方代理一起使用。 - Keith