谷歌浏览器将 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,它就可以工作了。然后,我uncheckDisable 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 tunnelsssudo tunnelss

【讨论】:

以上是关于谷歌浏览器将 localhost 重定向到 https的主要内容,如果未能解决你的问题,请参考以下文章

Confluence 6 通过 SSL 或 HTTPS 运行 - 重定向所有的 URLS 到 HTT

tomcat访问的重定向问题

重定向 302 与localhost 学习笔记

XAMPP localhost 重定向到 localhost/dashboard

如何使用js 重定向到原来的页面

localhost wordpress 重定向到 XAMPP 站点