首页 > 解决方案 > 拒绝在框架中显示 LOCALHOST,因为“X-Frame-Options”设置为“sameorigin”

问题描述

这个问题专门针对本地主机。我正在尝试将 localhost 网页嵌入到另一个 localhost 网页中,但它指出这无法完成。这是 chrome 开发者工具中的消息:

Refused to display 'http://127.0.0.1:4040/jobs/' in a frame because it set 'X-Frame-Options' to 'sameorigin'.

如图所示

我曾尝试同时使用 firefox 和 chrome。这是来自 Firefox 的错误消息:

Load denied by X-Frame-Options: “SAMEORIGIN” from “http://127.0.0.1:4040/jobs/”, site does not permit cross-origin framing from “http://localhost:8888/lab”.

为什么 localhost 不被认为是同源?

如何删除对本地主机的此限制?

先感谢您。

注意我宁愿在 AJAX 请求上使用 iframe,除非 AJAX 可以像 iframe 那样复制网页。

标签: google-chromefirefoxx-frame-optionswebsecurityspark-ui

解决方案


Kevin Reid 的回答是正确的,他的代理服务器解决方案也是正确的。但我会添加更多细节。

来自Mozilla 开发者网络

如果两个 URL 的协议、端口(如果指定)和主机相同,则两个 URL 具有相同的来源。您可能会看到这被称为“方案/主机/端口元组”,或者只是“元组”。(“元组”是一组项目,它们共同构成一个整体——双/三/四/五/等的通用形式。)

http://127.0.0.1:4040并且http://localhost:8888不是同一来源。哎呀,根据定义,甚至可能不是同一http://127.0.0.1来源。http://localhost

怎么修?此解决方案特定于 IIS 10 Windows Server 2016。但 Kevin 所说的想法是启用“反向代理”。

  1. 安装应用程序请求路由。
  2. 转到应用程序请求路由缓存 -> 服务器代理设置并选中启用代理。
  3. 转到 URL 重写并创建入站规则。这将是两个入站规则(端口 4040 和 8888)。这样做的目的是路由localhost/jobstolocalhost:4040/jobslocalhost/labsto localhost:8888/labs。实际上,这将使两个 Web 服务器具有相同的来源,http://localhost.
  4. 您的模式可能类似于并重写作业 Web 服务器的jobs(/)?(.*)URL http://localhost:4040/jobs/{R:2}。测试模式以获得{R:x}正确的。
  5. 使用浏览器进行测试,如果您可以访问http://localhost/jobshttp://localhost/labs.
  6. iframe 现在应该可以工作了。

推荐阅读