【问题标题】:Setting the src of an iFrame with parameters causes X-Frame-Options 'SAMEORIGINS' error使用参数设置 iFrame 的 src 会导致 X-Frame-Options 'SAMEORIGINS' 错误
【发布时间】:2018-04-04 16:04:20
【问题描述】:

我目前正在开发一个网站,使用angularjs 作为客户端,使用Web API 2 作为服务器端。

首先,我尝试使用iframeSSRS 报告嵌入到我的网站中。只要我向iframe src 提供以下(示例)链接,我就可以成功嵌入报告:

http://EXAMPLE-LINK/reports/report/Test%20Upgrade/Line%20Control?rs:embed=true

下面的图片是成功加载到网站的报告(快乐的日子):

其次,每当我使用相同的链接但这次为其提供参数以填充“Between”和“And”字段时,我都会收到以下控制台错误:

我正在使用的包含参数的链接如下:

http://EXAMPLE-LINK/reports/report/Test%20Upgrade/Line%20Control?&date1=01/03/2018&date2=04/04/2018?rs:embed=true"

最后,当我向iframe src 提供带有参数的链接时,我为什么会收到X-Frame-Options 'SAMEORIGIN' 错误?理想情况下,我想为iframe src 提供参数,否则我将不得不创建多个报告来实现网站功能。

如何在我的应用程序中忽略/删除 X-Frame-Options 'SAMEORIGIN' 标头响应?我是否需要在我的web.config 中添加一些customHeader 响应,或者有什么方法可以在我的网络应用程序启动期间删除标题?

【问题讨论】:

    标签: iframe reporting-services asp.net-web-api2 x-frame-options


    【解决方案1】:

    所以在尝试访问以下链接后: http://EXAMPLE-LINK/reports/report/Test%20Upgrade/Line%20Control?&date1=01/03/2018&date2=04/04/2018?rs:embed=true 在我的浏览器 URL 中出现以下错误:

    所以这让我相信我试图传递给我的iframe 的链接实际上是不正确的。

    所以我修改了我的链接以遵循以下结构,其中包括我的参数:

    http://EXAMPLE-LINK/reports/report/Test%20Upgrade/Line%20Control?rs:embed=true&date1=01/03/2018&date2=04/04/2018

    如您所见,我在SSRS 报告的参数之前传递了rs:embed=true 标记并成功!我现在可以加载我的iframe 并填充SSRS 报告参数。

    【讨论】:

      【解决方案2】:

      在 SQL Report Server 2019 中,您可以设置自定义 Content-Security-Policy: frame-ancestors <uri> 标头。至少在 Chrome 中,它会在X-Frame-Option 之前尊重这个值。此外,我启用了 CORS。

      这可以通过 SSMS 完成。连接到报表服务器实例,右键单击服务器并选择属性。然后转到高级部分。在“用户定义”下,您会找到 AccessControlAllowOrigin (CORS) 和 CustomHeaders。以下是一些示例值:

      AccessControlAllowOrigin: https://prod_app:8888/, http://dev_app:8888/
      CustomHeaders: <CustomHeaders><Header><Name>Content-Security-Policy</Name><Pattern>.*</Pattern><Value>frame-ancestors https://prod_app:8888 http://prod_dev:8888</Value></Header></CustomHeaders>
      

      这将启用来自 prod_app 的跨域请求,该请求在端口 8888 上运行,协议为 https,并允许来自所有来源的 iframe(不安全)。

      由于一些看似服务器端的缓存问题(ReportViewer.aspx 有一段时间没有应用自定义标头),我不得不重新启动报表服务器。

      最后,如果您搞砸了报表服务器属性并且您的报表服务器无法加载(RSPortal.exe 错误等),那么您可以通过转到 SQL 数据库 -> 报表服务器直接在 SQL 数据库中访问报表服务器属性-> dbo.ConfigurationInfo 表并清除或更新值。您必须重新启动报表服务器 windows 服务才能使用此方法使更改生效。

      【讨论】:

        猜你喜欢
        • 2015-02-06
        • 2014-05-10
        • 2014-03-23
        • 2017-06-13
        • 2019-09-21
        • 1970-01-01
        相关资源
        最近更新 更多