使用 MVC5 允许来自不同域的帧
Allow frame from different domain with MVC5
我正在尝试使用 MVC5 将 google 地图加载到 iframe 中,但我被错误阻止了
Refused to display 'https://www.google.com/maps?cid=XXXXX' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'.
经过大量搜索,我尝试了以下方法:
将AntiForgeryConfig.SuppressXFrameOptionsHeader = true;
添加到global.ascx
中的Application_Start
创建一个属性(在 global.ascx 中设置和不设置的情况下都尝试过):
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (filterContext != null)
{
filterContext.HttpContext.Response.Headers["X-Frame-Options"] = "ALLOW-FROM https://www.google.com";
base.OnActionExecuted(filterContext);
}
}
尝试属性 OnResultExecuted(ResultExecutedContext filterContext)
而不是 OnActionExecuted
在web.config中删除它:
<httpProtocol>
<customHeaders>
<remove name="X-Frame-Options" />
</customHeaders>
</httpProtocol>
有什么我想念的吗?我如何摆脱这个 http header(或至少将其更改为允许地图)?
更新
我刚刚检查了发送的 header,它们是正确的,因为它们要么说
X-Frame-Options: ALLOW-FROM https://www.google.com
或者如果我删除该属性但保留 global.ascx 更新
,则根本不存在
然而,当我 运行 页面并看到这些 header 时,它仍然给我 SAMEORIGIN 错误。
事实证明我完全愚蠢并且误解了 x-frame-options 的工作原理。这是为了阻止您的网站页面通过 iframe 显示在另一个网站上。
所以我为 SAMEORIGIN 获取的 x-frame-options http header 实际上来自 google。我以为 url 从他们的位置返回 api 我可以直接使用它,但显然你只能 link 到它。
创建一个新的地图 api 键并启用地图嵌入 api,我可以使用 place_id 并将以下 url 调用到 iframe :
https://www.google.com/maps/embed/v1/place?key=YOUR_API_KEY&q=place_id:PLACE_ID
这会显示我没有得到 header(或对我的 header 做任何额外的事情)。
我会把它留在这里,以防有人像我一样愚蠢
我正在尝试使用 MVC5 将 google 地图加载到 iframe 中,但我被错误阻止了
Refused to display 'https://www.google.com/maps?cid=XXXXX' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'.
经过大量搜索,我尝试了以下方法:
将
AntiForgeryConfig.SuppressXFrameOptionsHeader = true;
添加到global.ascx 中的创建一个属性(在 global.ascx 中设置和不设置的情况下都尝试过):
public override void OnActionExecuted(ActionExecutedContext filterContext) { if (filterContext != null) { filterContext.HttpContext.Response.Headers["X-Frame-Options"] = "ALLOW-FROM https://www.google.com"; base.OnActionExecuted(filterContext); } }
尝试属性
OnResultExecuted(ResultExecutedContext filterContext)
而不是OnActionExecuted
在web.config中删除它:
<httpProtocol> <customHeaders> <remove name="X-Frame-Options" /> </customHeaders> </httpProtocol>
Application_Start
有什么我想念的吗?我如何摆脱这个 http header(或至少将其更改为允许地图)?
更新
我刚刚检查了发送的 header,它们是正确的,因为它们要么说
X-Frame-Options: ALLOW-FROM https://www.google.com
或者如果我删除该属性但保留 global.ascx 更新
,则根本不存在然而,当我 运行 页面并看到这些 header 时,它仍然给我 SAMEORIGIN 错误。
事实证明我完全愚蠢并且误解了 x-frame-options 的工作原理。这是为了阻止您的网站页面通过 iframe 显示在另一个网站上。
所以我为 SAMEORIGIN 获取的 x-frame-options http header 实际上来自 google。我以为 url 从他们的位置返回 api 我可以直接使用它,但显然你只能 link 到它。
创建一个新的地图 api 键并启用地图嵌入 api,我可以使用 place_id 并将以下 url 调用到 iframe :
https://www.google.com/maps/embed/v1/place?key=YOUR_API_KEY&q=place_id:PLACE_ID
这会显示我没有得到 header(或对我的 header 做任何额外的事情)。
我会把它留在这里,以防有人像我一样愚蠢