尝试使用Google趋势中的嵌入脚本会导致Chrome下面出现以下错误。
Refused to display 'url' in a frame because it set 'X-Frame-Options' to 'sameorigin'.
我把脚本放在index.html
的主体中,并在本地托管,也在外部服务器上托管。
从我可以收集到的,它是停止'clickjacking',但谷歌提供的脚本不适用于他们自己的浏览器似乎很奇怪。 Firefox工作得很好。
这是谷歌趋势嵌入的一个根本问题,只是不使用谷歌自己的产品,还是我的服务器设置问题?
这是因为您的浏览器设置为阻止第三方Cookie。启用第三方Cookie以及嵌入式Google趋势iframe将起作用。
如果仔细查看失败的iframe请求,它将包含此标头:
p3p:CP =“这不是P3P政策!有关详细信息,请参阅g.co/p3phelp。”
标题链接到this page,并附有以下解释:
在某些情况下,我们用于保护和验证您的Google帐户并存储您的偏好的Cookie可能会在与您访问的网站不同的域中提供。例如,如果您使用Google +1按钮访问网站,则可能会发生这种情况。
某些浏览器要求第三方cookie使用P3P协议来声明其隐私惯例。但是,P3P协议的设计并未考虑到这些情况。因此,我们在Cookie中插入了一个链接,该链接将用户引导至一个页面,在该页面中他们可以了解有关与这些Cookie相关的隐私惯例的更多信息。
在我使用基于弹簧的项目时,我早就遇到了同样的问题。有一件事我可以事先告诉你,这不是谷歌趋势的问题,你需要通过稍微改变你的请求来解决它。使用您的请求标头,您需要发送额外的标头X-Frame-Options
并将其值设置为SAMEORIGIN
。
我没有提供有关这方面的细节,因为类似的问题已经讨论过here。
希望这可以帮助!!!
更新1:
不要对X-Frame-Options
和你嵌入的框架感到困惑。当您尝试在网页上嵌入框架时,浏览器会检查您是否允许使用SAMEORIGIN
。默认情况下,它未启用,因此您收到错误。但是在你的后端代码中,如果你配置的方式是每次请求,你的框架都会添加一个标题为X-Frame-Options
,其值为SAMEORIGIN
,然后浏览器将允许它。请注意,SAMEORIGIN
将允许您网站上的每个网页,这可能会导致安全问题。所以另一种选择是,您只需使用ALLOW-FROM标记设置Google趋势网站,而不是sameorigin
。
(根据你的评论,你使用的是Laravel框架(我从未使用过php),this link对你有用。或者你可以谷歌“如何在laravel中设置x-frame-options sameorigin”。