拒绝在框架中显示 LOCALHOST,因为“X-Frame-Options”设置为“sameorigin”
Posted
技术标签:
【中文标题】拒绝在框架中显示 LOCALHOST,因为“X-Frame-Options”设置为“sameorigin”【英文标题】:Refusing to display LOCALHOST in a frame because 'X-Frame-Options' set to 'sameorigin' 【发布时间】:2020-07-02 19:13:24 【问题描述】:这个问题专门针对本地主机。我正在尝试将 localhost 网页嵌入到另一个 localhost 网页中,但是它指出这无法完成。这是 chrome 开发者工具中的消息:
Refused to display 'http://127.0.0.1:4040/jobs/' in a frame because it set 'X-Frame-Options' to 'sameorigin'.
Pictured here
我尝试同时使用 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 那样复制网页。
【问题讨论】:
【参考方案1】:我不知道是否有任何关于 localhost 的附加规则,但总的来说,端口号是来源的一部分。所以它算作同源,你需要使用相同的端口号,即一个Web服务器。
如果您出于某种技术原因绝对需要使用多台服务器,您可以让一台服务器充当另一台服务器的“反向代理”,或者使用单个反向代理服务器与两者通信。
【讨论】:
【参考方案2】:Kevin Reid 的回答是正确的,他的代理服务器解决方案也是正确的。但我会添加更多细节。
来自Mozilla Developer Network
如果协议、端口(如果指定)和主机相同,则两个 URL 具有相同的来源。您可能会看到这被称为“方案/主机/端口元组”,或者只是“元组”。 (“元组”是一组项目,它们共同构成一个整体——双/三/四/五/等的通用形式。)
http://127.0.0.1:4040
和 http://localhost:8888
的来源不同。哎呀,根据定义,甚至 http://127.0.0.1
和 http://localhost
可能不是同一个来源。
如何解决?此解决方案特定于 IIS 10 Windows Server 2016。但正如 Kevin 所说,其想法是启用“反向代理”。
-
安装应用程序请求路由。
转到应用程序请求路由缓存 -> 服务器代理设置并选中启用代理。
转至 URL 重写并创建入站规则。这将是两个入站规则(端口 4040 和 8888)。这样做的目的是将
localhost/jobs
路由到localhost:4040/jobs
和localhost/labs
到localhost:8888/labs
。实际上,这将使两个 Web 服务器具有相同的来源,http://localhost
。
您的模式可能类似于 jobs(/)?(.*)
并为作业 Web 服务器重写 URL http://localhost:4040/jobs/R:2
。测试模式以获得正确的R:x
。
使用浏览器测试是否可以访问http://localhost/jobs
和http://localhost/labs
。
iframe 现在应该可以工作了。
【讨论】:
以上是关于拒绝在框架中显示 LOCALHOST,因为“X-Frame-Options”设置为“sameorigin”的主要内容,如果未能解决你的问题,请参考以下文章
拒绝在框架中显示网站,因为它的“X-Frame-Options”
拒绝在框架中显示,因为它将“X-Frame-Options”设置为 DENY facebook fb.ui 共享方法
拒绝在框架中显示,因为它将“X-Frame-Options”设置为“SAMEORIGIN”
拒绝在框架中显示 xyz,因为它设置了 X-Frame-Options - 我可以设置允许的域吗?
自定义搜索引擎拒绝在框架中的iframe中显示,因为它将“X-Frame-Options”设置为“sameorigin”