谷歌浏览器将 localhost 重定向到 https
Posted
技术标签:
【中文标题】谷歌浏览器将 localhost 重定向到 https【英文标题】:Google Chrome redirecting localhost to https 【发布时间】:2014-10-06 07:10:39 【问题描述】:当我使用 Chrome 调试 Visual Studio 项目时,浏览器会尝试重定向到与我的网址等效的 https。我没有在 Web 项目中启用 SSL,并且起始 URL 是 http URL。当我使用 FireFox 或 IE 进行调试时,我没有这个问题。
我确实重新安装了 Chrome 解决了一天的问题。没有下载任何插件,第二天问题又出现了。
是什么让 Chrome 将 localhost 重定向到 https?
网络检查显示: 请求网址:data:text/html,chromewebdata 请求标头 显示临时标题 用户代理:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36
这些选项卡中没有预览,也没有响应数据。
【问题讨论】:
Network Inspector 显示什么? 网络检查根本没有显示太多。我什至看不到请求的 URL。请求 URL:data:text/html,chromewebdata 请求标头 显示临时标头 Cache-Control:no-cache Pragma:no-cache User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko ) Chrome/36.0.1985.143 Safari/537.36 CHROME 63:继续滚动寻找答案 只需重新安装我的 chrome 即可解决所有问题。现在我的 .dev 不再重定向到 https。我希望我早点尝试过..浪费了这么多时间.. 最近遇到此问题的任何人,如果您尝试使用.dev
作为您的本地域,这是一个全新的问题,所以我认为这些答案中的任何一个都不再适用。从 Chrome 63 开始...“Chrome 通过预加载的 HSTS 强制 .dev 域使用 HTTPS”。所以不再有自签名 SSL 证书。显然 .dev 是一个真正的域。谁知道呢。
【参考方案1】:
我相信这是由 HSTS 引起的 - 请参阅 http://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security
如果您有(开发)任何其他发送 HSTS 标头的本地主机站点...
例如。严格的传输安全性:max-age=31536000;包括子域;预加载
...那么根据 max-age 的值,未来对 localhost 的请求将需要通过 HTTPS 提供服务。
为了解决这个问题,我做了以下事情。
在 Chrome 地址栏中输入“chrome://net-internals/#hsts” 页面的最底部是查询域文本框 - 验证浏览器是否知道 localhost。 如果显示“未找到”,那么这不是您要寻找的答案。 如果是,使用上面的文本框删除本地主机域 您的网站现在应该可以使用普通的旧 HTTP 工作了这不是一个永久的解决方案,但至少可以让它在项目之间工作。如果有人知道如何从 HSTS 列表中永久排除 localhost,请告诉我:)
更新 - 2017 年 11 月
Chrome 最近将此设置移至删除域安全政策
更新 - 2017 年 12 月 如果您使用 .dev 域,请参阅下面的其他答案,因为 Chrome(和其他)通过预加载的 HSTS 强制 HTTPS。
【讨论】:
太令人沮丧了。但很高兴找到了原因。 我尝试查询“localhost”,但显示未找到 我知道这是一篇旧帖子,但是如果在根据接受的答案查询本地主机时,它确实返回“未找到”,如何解决?在这里尝试了所有 cmets 和答案中的所有内容。 这是 Chrome 的全部垃圾。当他们开始强迫你在你该死的 localhost 上使用 HTTPS 时,他们如何期望我们在本地进行开发?几个月来我已经使用了一切都很好,我一天早上登录并处理这个垃圾。这些“修复”都不适合我。 如果您的 localhost 域是.dev
,那么我相信这不起作用@Alison,因为从最近发布的 v.63 开始...“Chrome 通过预加载的 HSTS 强制 .dev 域使用 HTTPS ”。因此,除非您拥有正确签名的 SSL 证书,否则 .dev 基本上将不再工作。不再允许使用自签名证书。 More details.【参考方案2】:
我在 Chrome 中遇到了同样的问题,我尝试使用 BigJump's solution 失败。
我通过强制硬刷新解决了我的问题,如 blog 所示(最初来自 SuperUser answer)。
确保您的地址栏使用的是 http 方案,然后执行这些步骤,可能会执行几次:
-
打开开发者工具面板 (CTRL+SHIFT+I)
单击并按住重新加载图标/右键单击重新加载图标。
将打开一个菜单。
从此菜单中选择第三个选项(“清空缓存和硬重新加载”)
【讨论】:
您也可以右键单击刷新/重新加载图标以进入硬重新加载菜单 我无法让这个解决方案发挥作用。问题是它在localhost:3000(在我的情况下)上进行了硬重新加载。尝试在重新加载之前更改协议,但这不起作用。 谢谢!!!如果你用这个搞砸了你的startup.cs,这会恢复原始的localhost:port... var options = new RewriteOptions().AddRedirectToHttpsPermanent(); app.UseRewriter(选项); 按“CTRL + SHIFT + R”硬重新加载为我工作。 在铬上,它是 F12 而不是 CTRL+SHIFT+I【参考方案3】:新的发展! (如果您有 Chrome 63+)
如果您的本地主机域是.dev
,那么我认为以前接受的答案不起作用。原因是因为从 Chrome 63 开始,Chrome 会通过预加载的 HSTS 强制 .dev 域使用 HTTPS。
这意味着,.dev
基本上不会再工作了,除非你有正确的签名 SSL 证书——不允许更多的自签名证书! Learn more at this blog post.
因此,现在解决此问题并避免将来再次发生这种情况.test
是一个推荐的域,因为它由 IETF 保留用于测试/开发目的。您还应该能够将.localhost
用于本地开发。
【讨论】:
我将所有 .dev 域更改为 .app,仍然是同样的问题。关于问题可能是什么的任何指示? @Jeff 尝试使用.test
这非常烦人。肯定有办法不强迫我们改变我们的开发领域,对吧?
在 Chrome 63 中将 .dev
替换为 .test
也对我有用
这些违反直觉的默认设置非常糟糕。为什么要浪费时间调试他们的开发环境设置,或者只是猜测出了什么问题,只是为了发现他们这边一切正常,而谷歌浏览器默认将 .dev 重定向到 HTTPS。逻辑在哪里。为什么是 .dev 而不是其他 TLD?绝对不直观。【参考方案4】:
捎带Adiyat Mubarak
无法硬刷新,因为它只是在 https 上刷新。遵循一些相同的步骤。
1. Open chrome developer tools (ctrl + shift + i)
2. Network Tab at the top
3. Click Disable cache checkbox at the top (right under network tab for me).
4. Refresh page (while the developer tools is still open)
【讨论】:
我第二次来这里寻求解决方案。非常感谢。 我使用的是 .local 域,当上面的 HSTS 解决方案没有时,这有效。 在尝试了 BigJump 和 Adiyat Mubarak 的解决方案后,这是唯一对我有用的方法。 禁用缓存对我来说也是必要的。关闭 Fiddler 后,我开始出现这个问题。 节省时间!【参考方案5】:我遇到了同样的问题,但仅在 Chrome Canary 中并搜索了我找到的解决方案 this post。
Chrome 的下一个版本将强制所有以 .dev(和 .foo)结尾的域通过预加载的 HTTP 严格传输安全 (HSTS) 标头重定向到 HTTP。
"name": "dev", "include_subdomains": true, "mode": "force-https" ,
"name": "foo", "include_subdomains": true, "mode": "force-https" ,
所以,换个域名吧。
【讨论】:
this 是我来这里要解决的问题。伙计,现在我必须为我的本地开发网站想出一个不同的假***域名...... 来自wiki,.local
听起来有点脆弱,尽管我认为它比其他***域名更安全。我还撤回了.localhost
的使用,因为 chrome 似乎做了一些本机重定向,这似乎阻止了我的 rproxy 工作。 .test
似乎是最安全的,尽管由于名称空间与 TDD/.test()
方法等中使用的所有字符串发生冲突而显得笨拙。
为此浪费了一天。非常感谢
该死,刚刚更新到 Chrome 63,现在这正在影响我的 .dev。哇。我不在乎它是否是有效的 TLD,如果我不需要、不想要或让我的网站使用 SSL,那么不要强加给我。
哇,这让我很生气。对于某些开发环境,它并不像更改 tld 那样简单。我现在正在考虑工作时间来改变我正在做的事情。我想用什么 tld 来开发并不是他们的事。【参考方案6】:
Chrome 63(自 2017 年 12 月起推出)将强制所有以 .dev(和 .foo)结尾的域通过预加载的 HTTP 严格传输安全 (HSTS) 标头重定向到 HTTPS。 You can find more information about this here.
【讨论】:
^^ 同上。它在上周也影响了我们的.app
域。我们暂时切换到.test
,尽管我认为这不是一个长期的解决方案。【参考方案7】:
来自https://galaxyinternet.us/google-chrome-redirects-localhost-to-https-fix/
没有一个选项修复对我有用,修复https://localhost:3000
,确实如此。
点击并按住Reload
按钮并选择Empty Cache and Hard Reload
,这似乎只是localhost
上的一个选项
【讨论】:
这对我不起作用。还有其他解决办法吗? 最新的 Chrome 已更新,因此此解决方案将不再有效。 如果您打开了开发者工具栏,这应该适用于所有域 谢谢,这对我有用!选择的答案对我不起作用,所以我绝对会记下这个答案,因为这肯定会再次发生:D【参考方案8】:打开Chrome Developer Tools
-> 转到Network
-> 选择Disable Cache
-> 重新加载
【讨论】:
这行得通!我打开网址,它重定向到https
。然后我按照上面的步骤,然后,在地址栏中我将 url 编辑为http
,它就可以工作了。然后,我uncheck
Disable Cache
。然后我看不到重定向。问题解决了。谢谢。
但是这禁用了您在普通 Chrome 窗口中拥有的所有网站的缓存...这不太好...我后来能够清理缓存并再次启用缓存选项,但似乎仍然上班……【参考方案9】:
我也一直在努力解决这个问题。似乎是HSTS is intended for only domain names。所以如果你在本地机器上开发,使用IP地址会容易得多。所以我从 localhost 切换到 127.0.0.1
【讨论】:
这很好,但是否可以确保每次输入 localhost 时,它会将 localhost 替换为 127.0.0.1?【参考方案10】:转到 铬://网络内部/#hsts 在删除域安全策略下输入 localhost,然后按删除按钮。
现在转到 chrome://settings/clearBrowserData,勾选缓存图像和文件框,然后点击按钮清除数据。
【讨论】:
【参考方案11】:为像我这样的懒人提供了一个懒惰且快速的解决方案(在 Chrome 67 中工作)。
只需在隐身模式下启动另一个 Chrome 窗口,并使用“隐身窗口”选项 (CTRL + SHIFT + N)。无需删除缓存,无需深入 Chrome 设置等。
【讨论】:
我对其他建议有疑问 - 可能是因为我需要同时打开几个不同的网页,都在同一个域但在不同的服务器上,其中一些 Web 服务器使用 https,其他纯http。除了“隐身窗口”之外,几乎没有其他工作! 这可行,但由于临时标头,它使我的 AJAX 请求非常慢。【参考方案12】:我是如何用 chrome 79 解决这个问题的:
只需将此网址粘贴到您的搜索输入中 chrome://flags/#allow-insecure-localhost
它通过使用实验性功能帮助了我。
【讨论】:
【参考方案13】:我从来没有弄清楚问题的根源,但是我能够解决这个问题。 我删除了解决问题的 Google Chrome 应用缓存文件夹。
C:\Users[用户]\AppData\Local\Google\Chrome
【讨论】:
您是否丢失了所有浏览器历史记录或密码? 我认为问题在于,当您使用 HTTPS 访问域时,Chrome 会存储,然后如果您再次访问同一域,它会自动切换到 HTTPS。作为开发人员,这很痛苦,因为一旦您使用 HTTPS 访问任何 localhost 站点,突然间所有 localhost 站点都被重定向到 HTTPS。 @DaleBurrell 你错了。这是由 HSTS 引起的:en.wikipedia.org/wiki/HTTP_Strict_Transport_Security 好吧,冒着承认自己愚蠢的风险,堆栈溢出也会导致这种行为!!!因此,例如无限递归(就像我对自己所做的那样)【参考方案14】:这可能是由缓存的 https 重定向引起的,可以通过手动清除缓存来修复,如 Adiyat Mubarak 的回答。
但是,如果您正在访问 localhost,您可能是开发人员,在这种情况下,您会发现缓存清除 chrome 扩展程序,例如“经典缓存杀手”(参见例如 https://chrome.google.com/webstore/search/classic%20cache%20killer?hl=en)在各种情况下都很有用,而且可能已经安装一个。
所以快速解决方法是:安装缓存杀手(如果您还没有),打开它,然后重新加载页面。完毕!
【讨论】:
这解决了问题【参考方案15】:这些都不适合我。它在具有本地 URL 的 chrome 更新(版本 63.0.3239.84,linux)之后开始发生。无论如何都会重定向到https。在这件事上浪费了几个小时和很大的耐心
毕竟起作用的只是更改域。
值得一提的是,域名是 .app。也许它有事可做?只是将其更改为 .test 并且 chrome 停止重定向它
【讨论】:
【参考方案16】:很遗憾,这里列出的解决方案都没有帮助我解决这个问题。我通过使用http://127.0.0.1(IP 地址)而不是http://localhost 解决了这个问题。使用 chrome 浏览器进行角度开发的快速小技巧。
【讨论】:
【参考方案17】:一个简单的解决方案是编辑您的/etc/hosts
文件并为每个项目建立一个别名。
127.0.0.1 project1 project2 project3
除非您发送@bigjump 提到的 HSTS 响应,并且如果您在项目之间来回更改,还可以维护您的登录会话,否则这些无域名将永远不会遇到 HSTS 问题。
【讨论】:
【参考方案18】:尝试了所有提到的内容(浏览器首选项、hsts 等),但对我没有任何帮助。
我通过在主机别名中添加尾随 .localhost
解决了这个问题。
像这样:
127.0.0.1 myproject.localhost
127.0.0.1 dev.project.localhost
【讨论】:
【参考方案19】:就我而言,我将项目路径设置为/Users/me/dev/project_root/
,并从那里运行nodeJS
/express
服务器。
将我的路径重命名为 /Users/me/project_root
(从项目路径中删除 dev
)解决了这个问题。
很可能与这项新规定有关:
Chrome 63(自 2017 年 12 月起推出)将强制所有以 .dev(和 .foo)结尾的域通过预加载的 HTTP 严格传输安全 (HSTS) 标头重定向到 HTTPS。
您可以找到有关此here 的更多信息。
使用:
Google Chrome 版本 70.0.3538.110(官方版本)(64 位) nodeJS v9.2.0【讨论】:
【参考方案20】:转到 Chrome 中的设置,然后转到高级设置,在隐私和安全部分下单击清除浏览数据,然后清除所有数据。我遵循了这些步骤,它对我有用。希望对大家有所帮助。
【讨论】:
【参考方案21】:Chrome 63 通过预加载的 HSTS 强制 .dev 域自动使用 HTTPS。 快速修复:只需将 .dev 域更改为 .localhost。
【讨论】:
【参考方案22】:这不是解决方案,只是一种解决方法。
在解决方案资源管理器中单击您的 Visual Studio 项目(顶层),然后转到属性窗口。
将 SSL 启用更改为 true。您现在将在属性窗口中看到另一个端口号为“SSL URL”。
现在,当您运行应用程序(或在浏览器中查看)时,您必须在地址栏中手动将端口号更改为 SSL 端口号。
现在它可以作为 SSL 链接正常工作
【讨论】:
【参考方案23】:这个问题也可以在 VS 2019 中复制。这是由于“从 Visual Studio IDE 启用 javascript 调试”引起的。 VS 附加到 Chrome 并且可能由于安全性或 Google 和 Microsoft 已知的原因,它有时无法附加并且您遇到此问题。我能够从 ASP net core 3.1 应用程序使用 localhost 运行 http 和 https。因此,在 VS 中调试时,使用箭头运行 -> IIS express,在“Web Browser(Chrome)”下方选择“Script Debugging (Disabled)”。
见文章:https://devblogs.microsoft.com/aspnet/client-side-debugging-of-asp-net-projects-in-google-chrome/
https://docs.microsoft.com/en-us/visualstudio/debugger/debugging-web-applications?view=vs-2019
始终回退到 Microsoft 文档以获得比谷歌搜索更清晰的问题。
【讨论】:
【参考方案24】:对我来说,以下内容在 Chrome 90 中有效。我的应用在 localhost:3000
上打开了一个本地 webpack 服务器,该服务器自动重定向到 HTTPS,我得到了 ERR_SSL_PROTOCOL_ERROR
。
我点击了 URL 旁边的小信息图标,从下拉菜单中打开了站点设置。在列表中,Insecure content
设置为 Block (default)
。
我把它改成Allow
,然后重新加载http版本就可以正常加载了。
希望这对人们有所帮助。
【讨论】:
【参考方案25】:我无法找到任何解决方案;但是我的 web.config 中的重定向允许我继续工作(本地主机),直到我找到导致问题的原因。
这本质上是一个将 HTTPS 转换为 HTTP 的重写规则;它似乎覆盖了之前将 HTTP 重定向到 HTTPS 的规则。
它需要在 web.config 的
<rewrite>
<rules>
<clear />
<rule name="Redirect to https" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="HTTP" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="http://HTTP_HOSTREQUEST_URI" redirectType="Permanent" appendQueryString="false" />
</rule>
</rules>
</rewrite>
【讨论】:
【参考方案26】:在我的例子中,我在 Mac 上使用浏览器同步,浏览器不断将 http://localhost:3000 重定向到 https://localhost:3000。
我正在使用 Valet 为本地站点提供服务,并且我在本地 *.test 域上运行了 valet secure
以为其提供 SSL 证书。因为我在浏览器同步中代理了这个 HTTPS 域,所以浏览器正在使用 HTTPS 加载 localhost:3000。
要修复它,我必须:
-
运行
valet unsecure
删除 SSL 证书
运行valet restart
重启浏览器同步
在浏览器中打开 localhost:3000(Vivaldi 在我的情况下是 Chromium 浏览器)
打开开发者工具
在“网络”选项卡上勾选“禁用缓存”
刷新页面
【讨论】:
【参考方案27】:原来这个错误消息让我掉进了一个兔子洞。
对我来说,问题是我试图在 http
上加载的页面未能返回响应(由于我的代码中的错误导致服务器崩溃)。
Chrome 会自动尝试 https
作为备份,因此,我没有看到实际错误(页面超时),而是看到了 SSL 错误,这是一个红鲱鱼。
修复底层服务器崩溃并导航回http://localhost:5000
解决了我的问题。
【讨论】:
【参考方案28】:对于遇到相同问题的人,我通过按 CTRL + SHIFT + DELETE 删除整个浏览器缓存来解决。现在我可以通过 HTTP 协议访问我的 localhost 网站了。
【讨论】:
【参考方案29】:@Adiyat Mubarak 的回答对我不起作用。当我尝试清除缓存并重新加载时,页面仍然重定向到 https。
我的解决方案:在网址栏的右上角(就在收藏夹星形图标的左侧)有一个带有“x”的图标。右键单击它,它会说一些关于“不安全脚本”的信息,然后有一个选项可以加载它们。这样做。
【讨论】:
你知道这个选项的名称是什么,或者在哪里可以找到它?我在网址栏中没有看到快捷方式。 @CarolynConway 我不确定它叫什么。它可能只针对我的特定问题出现。【参考方案30】:另一种选择是使用https://github.com/rchampourlier/tunnelss 之类的东西
当然,它添加了另一个依赖项/设置,但它也可以在 dev 中测试 https,这可能很好。
我使用 RVM,但是为了让隧道正常工作,我不得不使用 sudo gem install tunnelss
和 sudo tunnelss
【讨论】:
以上是关于谷歌浏览器将 localhost 重定向到 https的主要内容,如果未能解决你的问题,请参考以下文章
Confluence 6 通过 SSL 或 HTTPS 运行 - 重定向所有的 URLS 到 HTT