google-chrome - 拒绝在框架中显示 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 那样复制网页。
解决方案
Kevin Reid 的回答是正确的,他的代理服务器解决方案也是正确的。但我会添加更多细节。
如果两个 URL 的协议、端口(如果指定)和主机相同,则两个 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
tolocalhost:4040/jobs
和localhost/labs
tolocalhost:8888/labs
。实际上,这将使两个 Web 服务器具有相同的来源,http://localhost
. - 您的模式可能类似于并重写作业 Web 服务器的
jobs(/)?(.*)
URLhttp://localhost:4040/jobs/{R:2}
。测试模式以获得{R:x}
正确的。 - 使用浏览器进行测试,如果您可以访问
http://localhost/jobs
和http://localhost/labs
. - iframe 现在应该可以工作了。
推荐阅读
- python-3.x - 创建函数以返回多个数据帧
- css - 是什么导致了 Firefox 和 IE 上的列表项内的垂直错位,但在 Chrome 中却没有?
- linux - 将命令行参数打印到新的 Linux tex 文件中
- python - python中最有效的计算方式在对列表中查找对
- .net-core - 如何使用 Aes128CbcHmacSha256 创建令牌
- android - 从服务器下载文件时出现 Android SQLite 错误
- python - 计算特定值并将其写入文本文件的循环
- python - Python:如何在两个轴上附加到(稀疏)二维数组?
- ios - 如何在程序不崩溃的情况下结束 if-else 循环?
- java - 计算文本文件中的字母出现次数