在报告服务器端启用 CORS

Enable CORS at Reporting server side

我正在使用 https://www.npmjs.com/package/ngx-ssrs-reportviewer

在 angular 中呈现 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 绕过了这个错误 本地。但显然,我不能强迫用户安装此插件来加载报告。

我知道响应 headers 是在响应中设置服务器端的。 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>

但它给我错误

Refused to display in a frame because it set 'X-Frame-Options' to 'sameorigin'

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

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.