【问题标题】:Same origin policy / CORS in MVC 5MVC 5 中的同源策略/CORS
【发布时间】:2016-02-10 14:52:07
【问题描述】:

asp.net mvc 应用程序中的默认策略是什么?还有 CORS 和 X-Frame-Options 有什么关系?

如果我在端口上创建一个新的 MVC Web 应用程序(托管在 IIS 中),例如21232,我将 iframe 添加到索引视图,并将源设置为我的本地 IIS,例如

<iframe src="http://localhost/iisstart.htm" width="800" height="100"/>

这可以正常工作(即使在 Web 应用程序的不同端口上)。

如果我现在将 iframe 源更改为完全外部的东西,例如

<iframe src="http://www.google.com" width="800" height="100"/>

现在显示一个空的 iframe。如果我查看 Chrome 开发工具(两个示例中都使用了 Chrome),我会在控制台中看到一个错误

拒绝在框架中显示“https://www.google.co.uk”,因为它将“X-Frame-Options”设置为“SAMEORIGIN”。

  1. 为什么当地址位于与托管页面不同的端口时,第一个 URL 有效?
  2. X-Frame-Options 与 CORS 有什么关系?我尝试将以下内容添加到我的 web.config 中(参见 ref enable cors in IIS

&lt;add name="Access-Control-Allow-Origin" value="*" /&gt;

这没什么区别。看来我需要在 global.asax.cs 中的 Application_Start 中添加以下内容

AntiForgeryConfig.SuppressXFrameOptionsHeader = true;

X-Frame-Options 是否与 iframe 相关?

【问题讨论】:

    标签: asp.net-mvc-5 cors same-origin-policy x-frame-options


    【解决方案1】:

    我认为您将 X-Frame-Options 响应标头和 CORS 都搞混了。

    X-Frames-Options 响应标头用于指示是否应允许浏览器加载&lt;iframe&gt; 中的特定页面。另一方面,CORS 用于确定是否允许跨域使用 XMLHttpRequest(XHR)(以及其他一些东西)。

    所以是的,X-Frames-Options 仅适用于 &lt;iframe&gt;

    之所以能够在运行于端口21232 的Web 应用程序中从http://localhost/iisstart.htm 加载页面,是因为响应中没有X-Frame-Options 响应标头。您将无法使用http://www.google.com,因为它的 X-Frames-Options 设置为 SAMEORIGIN。这意味着除非您的域是 google.com,否则您将无法在 &lt;iframe&gt; 中加载它。

    您添加的Access-Control-Allow-Origin 标头与&lt;iframe&gt; 无关。您无法在页面中加载http://www.google.com

    【讨论】:

    • 好的,谢谢,我明白了,所以 SuppressXFrameOptionsHeader 只是为了让我的网站托管在 iframe 中。感谢您的澄清。
    • 认为造成混淆的一个原因是我想在 JavaScript 中访问/编辑 iframe 内容。根据stackoverflow.com/questions/2689984/…。看来这里需要遵守同源政策。
    猜你喜欢
    • 2019-11-16
    • 2021-04-02
    • 2014-03-12
    • 1970-01-01
    • 2015-04-23
    • 2013-01-18
    • 2014-07-23
    • 2015-05-23
    • 2014-08-18
    相关资源
    最近更新 更多