我正在尝试使用MVC5将谷歌地图加载到iframe中,但我被错误阻止了
拒绝在一个框架中显示“https://www.google.com/maps?cid=XXXXX”,因为它将“X-Frame-Options”设置为“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标头(或至少改变它以允许地图)?
更新
我刚检查了发送的标头,它们是正确的,因为它们要么
X-Frame-Options:ALLOW-FROM https://www.google.com
如果删除属性但保留global.ascx更新
,或者根本不存在然而,当我运行页面并看到这些标题时,它仍然给我SAMEORIGIN错误。
答案 0 :(得分:1)
事实证明,我完全是愚蠢的,并且误解了x-frame-options的工作原理。这是为了阻止您的网站页面通过iframe显示在其他网站上。
因此,我为SAMEORIGIN获取的x-frame-options http标头实际上来自谷歌。我认为,当网址从他们的地方返回api我可以使用它,但显然你只能链接到它。
创建一个新的地图api密钥并启用地图嵌入api,我可以使用place_id,并将以下网址调用到iframe中:
std::cout
如果没有我获得标题(或者对我的标题执行任何额外操作),这将显示。
我会把这个留在这里以防万一有人像我一样愚蠢