【问题标题】:Enable CORS at Reporting server side在报告服务器端启用 CORS
【发布时间】:2021-03-12 05:57:55
【问题描述】:

我正在使用 https://www.npmjs.com/package/ngx-ssrs-reportviewer 以角度呈现 SSRS 报告

但它不允许我这样做并给我一个错误:

 Refused to display 'http://SSRSServerName/Reports' In a frame, because it set `X-Frame-Options` to `SAMEORIGIN`.

我通过安装 chrome 扩展程序 https://chrome.google.com/webstore/detail/ignore-x-frame-headers/gleekbfjekiniecknbkamfmkohkpodhe 绕过了这个错误 本地。但很明显,我不能强迫用户安装这个插件来加载报告。

我知道响应标头在响应中设置为服务器端。 Angular 在客户端中运行,与此无关。 但是解决这个问题的可能方法是什么。

更新

我尝试在 Global.asax 文件中允许 ssrs 端的 CORS

 <%@ Application Inherits="Microsoft.ReportingServices.WebServer.Global" %>
<%@ Import namespace="System.Web" %>
<%@ Import namespace="System.Security" %>
<script runat="server">
protected void Application_BeginRequest()
  {
string origin = Request.Headers.Get("Origin");
if (Request.HttpMethod == "OPTIONS")
{
    Response.AddHeader("Access-Control-Allow-Origin", origin);
    Response.AddHeader("Access-Control-Allow-Headers", "*");
    Response.AddHeader("Access-Control-Allow-Methods", "GET,POST,PUT,OPTIONS,DELETE");
    Response.StatusCode = 200;
    Response.End();
}
else
{
    Response.AddHeader("Access-Control-Allow-Origin", origin);
    Response.AddHeader("Access-Control-Allow-Headers", "*");
    Response.AddHeader("Access-Control-Allow-Methods", "GET,POST,PUT,OPTIONS,DELETE");
}  }  </script>

但它给了我错误

拒绝在框架中显示,因为它将“X-Frame-Options”设置为“sameorigin”

【问题讨论】:

  • 正如您所说,响应标头设置在服务器端,因此您的客户端无法(也不应该尝试)绕过它们。看看这个类似的问题。 stackoverflow.com/questions/25098021/…
  • 我试图从报告服务器设置它,因为我有访问权限,但它仍然无法正常工作。加载时遇到的错误“X-Frame-Options”标头不是可识别的指令。标题将被忽略。我正在关注这个答案stackoverflow.com/a/38712051/5729812
  • 您能否展示一些代码以便更好地理解?
  • 我刚刚更新了我的问题,请看。

标签: angular same-origin-policy x-frame-options


【解决方案1】:

您的代码中似乎缺少标题。添加以下内容。

response.AddHeader("X-Frame-Options", "ALLOW-FROM example.com");

example.com 替换为您托管 Iframe 的位置。 这应该专门允许来自您的域。更多信息请参见https://dotnetcoretutorials.com/2017/01/08/set-x-frame-options-asp-net-core/

Chrome 似乎正在停止对此的支持(目前尚不清楚该日期何时会不断推迟)。我认为您可以添加以下内容来解决此问题。

response.Headers.Add( "X-Content-Security-Policy", "default-src *;");

有关 CSP 的更多信息,请参阅此答案 Asp net core Content Security Policy implementation

您使用的库似乎建议以下内容。所以看起来你需要从同一个域运行你的服务器和你的前端,或者库不支持它。

Preventing Mixed Content The report viewer uses iframes so if your reportserver is HTTP and you are trying to render it in an HTTPS application you will run into issues.

【讨论】:

  • 我已经添加了 response.Headers.Add("X-Content-Security-Policy", "default-src *;");我的代码中的行,但仍然出现相同的错误“拒绝在框架中显示,因为它将'X-Frame-Options'设置为'sameorigin'。
  • 您是否尝试过上面的 x-frame-options 建议? developer.mozilla.org/en-US/docs/Web/HTTP/Headers/… 为您提供有关 x-frame 弃用的更多信息。我还用更多信息更新了我的答案。
  • 不,我没有在 HTTPS 上呈现报告。目前我的 Angular 应用程序有 url localhost:12345 和报告服务器也在 serverName/ReportServer
猜你喜欢
  • 1970-01-01
  • 2018-01-30
  • 1970-01-01
  • 1970-01-01
  • 2019-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多