【问题标题】:Google Trends embedding and X-Frame-Options谷歌趋势嵌入和 X-Frame-Options
【发布时间】:2018-07-16 09:42:31
【问题描述】:

尝试使用 Google 趋势中的嵌入脚本会导致 Chrome 下出现以下错误。

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

我已将脚本放在 index.html 的正文中,并将其托管在本地以及外部服务器上。

据我所知,这是为了停止“点击劫持”,但 Google 提供的脚本不适用于他们自己的浏览器似乎很奇怪。 Firefox 运行良好。

这是 Google Trend 嵌入的根本问题,只是无法与 Google 自己的产品一起使用,还是我的服务器设置有问题?

【问题讨论】:

    标签: javascript embed x-frame-options google-trends


    【解决方案1】:

    这是因为您的浏览器设置为阻止第三方 cookie。启用第三方 Cookie,嵌入式 Google 趋势 iframe 将起作用。

    如果您仔细查看失败的 iframe 请求,它会包含此标头:

    p3p: CP="这不是 P3P 政策!有关更多信息,请参阅 g.co/p3phelp。"

    标题链接到this page,并附有以下解释:

    在某些情况下,我们用于保护和验证您的 Google 帐户以及存储您的偏好设置的 Cookie 可能来自与您正在访问的网站不同的域。例如,如果您访问带有 Google +1 按钮的网站,就可能发生这种情况。

    某些浏览器需要第三方 cookie 才能使用 P3P 协议来声明其隐私惯例。但是,P3P 协议的设计并未考虑到此类情况。因此,我们在我们的 cookie 中插入了一个链接,该链接将用户引导至一个页面,在那里他们可以了解与这些 cookie 相关的隐私惯例的更多信息。

    【讨论】:

      【解决方案2】:

      早在我从事基于 Spring 的项目时,我就遇到了同样的问题。我可以预先告诉你一件事,这不是谷歌趋势的问题,你需要稍微改变你的请求来解决它。 使用您的请求标头,您需要发送一个附加标头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”。

      【讨论】:

      • 感谢您的回复。我将如何从客户端向服务器发送额外的标头?我的印象是 X-Frame-Options Google 发送的,而不是 他们发送的。
      • 您使用的是哪种后端框架/语言?我使用了spring框架,所以我在SecurityConfig.java文件中配置了它。
      • Laravel/PHP,但我直接嵌入到 React 前端。
      • 我已根据您的评论更新了我的答案。希望它对你有用。
      • 我想我明白了,谢谢!我会玩一点,让你知道它是怎么回事。
      猜你喜欢
      • 2014-01-08
      • 2016-02-10
      • 1970-01-01
      • 1970-01-01
      • 2021-08-09
      • 1970-01-01
      • 2015-03-08
      • 2018-10-01
      • 1970-01-01
      相关资源
      最近更新 更多