【问题标题】:Google Chrome redirecting localhost to https谷歌浏览器将 localhost 重定向到 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 是一个真正的域。谁知道呢。

标签: google-chrome


【解决方案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 方案,然后执行这些步骤,可能会执行几次:

  1. 打开开发者工具面板 (CTRL+SHIFT+I)
  2. 单击并按住重新加载图标/右键单击重新加载图标。
  3. 将打开一个菜单。
  4. 从此菜单中选择第三个选项(“清空缓存和硬重新加载”)

【讨论】:

  • 您也可以右键单击刷新/重新加载图标以进入硬重新加载菜单
  • 我无法让这个解决方案发挥作用。问题是它在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】:

                    这不是解决方案,只是一种解决方法。

                    1. 在解决方案资源管理器中单击您的 Visual Studio 项目(顶层),然后转到属性窗口。

                    2. 将 SSL 启用更改为 true。您现在将在属性窗口中看到另一个端口号为“SSL URL”。

                    3. 现在,当您运行应用程序(或在浏览器中查看)时,您必须在地址栏中手动将端口号更改为 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_HOST}{REQUEST_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。

                            要修复它,我必须:

                            1. 运行 valet unsecure 删除 SSL 证书
                            2. 运行valet restart
                            3. 重启浏览器同步
                            4. 在浏览器中打开 localhost:3000(Vivaldi 在我的情况下是 Chromium 浏览器)
                            5. 打开开发者工具
                            6. 在“网络”选项卡上勾选“禁用缓存”
                            7. 刷新页面

                            【讨论】:

                              【解决方案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

                                  【讨论】:

                                    猜你喜欢
                                    • 2014-06-26
                                    • 2018-05-23
                                    • 1970-01-01
                                    • 2016-01-21
                                    • 1970-01-01
                                    • 2015-08-27
                                    • 2016-07-11
                                    相关资源
                                    最近更新 更多