ChatGPT解决这个技术问题 Extra ChatGPT

谷歌浏览器将 localhost 重定向到 https

当我使用 Chrome 调试 Visual Studio 项目时,浏览器会尝试重定向到与我的网址等效的 https。我没有在 Web 项目中启用 SSL,并且起始 URL 是 http URL。当我使用 FireFox 或 IE 进行调试时,我没有这个问题。

我确实重新安装了 Chrome 解决了一天的问题。没有下载任何插件,第二天问题又发生了。

是什么让 Chrome 将 localhost 重定向到 https?

网络检查显示:请求 URL:data:text/html,chromewebdata 请求标头 显示临时标头 User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/ 537.36

这些选项卡中没有预览和响应数据。

网络检查员显示什么?
网络检查根本没有显示太多。我什至看不到请求的 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 是一个真正的域。谁知道。

i
informatik01

我相信这是由 HSTS 引起的 - 请参阅 http://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security

如果您有(开发)任何其他发送 HSTS 标头的本地主机站点...

例如 Strict-Transport-Security: max-age=31536000;包括子域;预载

...然后根据 max-age 的值,将来对 localhost 的请求将需要通过 HTTPS 提供服务。

为了解决这个问题,我做了以下事情。

在 Chrome 地址栏中键入以下内容:chrome://net-internals/#hsts

在页面的最底部有查询域文本框 - 验证浏览器是否知道 localhost。如果它显示“未找到”,那么这不是您正在寻找的答案。

如果是,请使用上面的文本框删除 localhost 域

您的网站现在应该可以使用普通的旧 HTTP

这不是一个永久的解决方案,但至少可以让它在项目之间工作。如果有人知道如何从 HSTS 列表中永久排除 localhost,请告诉我 :)

更新 - 2017 年 11 月

Chrome 最近已将此设置移至该部分下

删除域安全策略

https://i.stack.imgur.com/CJXEh.png

更新 - 2017 年 12 月

如果您使用 .dev 域,请参阅下面的其他答案,因为 Chrome(和其他)通过预加载的 HSTS 强制 HTTPS。


我尝试查询“localhost”,但显示未找到
我知道这是一篇旧帖子,但是如果在根据接受的答案查询本地主机时,它确实返回“未找到”,如何解决?在这里尝试了所有评论和答案中的所有内容。
我有同样的问题。但是这个解决方案不起作用。在“chrome://net-internals/#hsts”上找不到本地主机....
这完全是 Chrome 的垃圾。当他们开始强迫你在你该死的 localhost 上使用 HTTPS 时,他们如何期望我们在本地进行开发?几个月来我已经使用了一切都很好,我一天早上登录并处理这个垃圾。这些“修复”都不适合我。
如果您的 localhost 域是 .dev,那么我认为这不起作用@Alison,因为从最近发布的 v.63 开始......“Chrome 通过预加载的 HSTS 强制 .dev 域使用 HTTPS”。因此,除非您拥有适当的签名 SSL 证书,否则 .dev 基本上将不再工作。不再允许使用自签名证书。 More details
C
Community

我在 Chrome 中遇到了同样的问题,但我尝试使用 BigJump's solution 失败。

我通过强制硬刷新解决了我的问题,如此 blog 所示(最初来自此 SuperUser answer)。

确保您的地址栏使用的是 http 方案,然后执行这些步骤,可能会执行几次:

打开开发人员工具面板 (CTRL+SHIFT+I) 单击并按住重新加载图标/右键单击重新加载图标。将打开一个菜单。从此菜单中选择第三个选项(“Empty Cache and Hard Reload”)


您还可以右键单击刷新/重新加载图标以进入硬重新加载菜单
我无法让这个解决方案发挥作用。问题是它在 localhost:3000 上进行了硬重新加载(在我的情况下)。尝试在重新加载之前更改协议,但这不起作用。
通过按“CTRL + SHIFT + R”硬重新加载为我工作。
在铬上,它是 F12 而不是 CTRL+SHIFT+I
对我来说,这也行得通,稍作调整:我正在 Django 中开发几个应用程序,其中一个正在应用永久重定向。对旧地址进行硬重新加载会清除缓存,但地址仍然是旧的(并且是错误的)。但在第二次尝试时,更正地址栏中的地址就成功了。谢谢!
T
Trevor

新的发展! (如果您有 Chrome 63+)

如果您的 localhost 域是 .dev,那么我认为以前接受的答案不起作用。原因是因为从 Chrome 63 开始,Chrome 将通过预加载的 HSTS 强制 .dev 域使用 HTTPS。

这意味着,.dev 基本上不再起作用,除非您拥有适当的签名 SSL 证书——不允许再使用自签名证书! Learn more at this blog post.

因此,现在解决此问题并避免将来再次发生此问题 .test 是一个推荐的域,因为它由 IETF 保留用于测试/开发目的。您还应该能够将 .localhost 用于本地开发。


我将所有 .dev 域更改为 .app,仍然是同样的问题。关于问题可能是什么的任何指示?
@Jeff 尝试使用 .test
这非常烦人。肯定有某种方法可以不强迫我们改变我们的开发领域,对吧?
在 Chrome 63 中用 .test 替换 .dev 也对我有用
这些违反直觉的默认设置是可怕的。为什么要浪费时间调试他们的开发环境设置,或者只是猜测出了什么问题,只是为了发现他们这边一切正常,而谷歌浏览器默认将 .dev 重定向到 HTTPS。逻辑在哪里。为什么是 .dev 而不是其他 TLD?绝对不直观。
C
Community

捎带 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 解决方案没有时,这有效。
当我第一次这样做时,它没有用,但我注意到在同一个水龙头上的输入是左侧的“网络”,其中包含“域:127.0.0.1 方案:https”,我只是将其修改为“域:127.0.0.1 scheme:HTTP" 通过从 http 中删除 "s" 字符并且已经工作
r
rafawhs

我遇到了同样的问题,但仅限于 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" },

所以,改变你的域名。


.test 是一个特殊的保留顶级域名,应该保持安全。
t
tayfun Kılıç

chrome://net-internals/#hsts 

在删除域安全策略下输入 localhost,然后按删除按钮。

现在去

chrome://settings/clearBrowserData 

勾选缓存图像和文件框,然后单击清除数据按钮。


B
Ben Bieler

打开 Chrome Developer Tools ->转到 Network ->选择 Disable Cache ->重新加载


但是,这禁用了您在普通 Chrome 窗口中拥有的所有网站的缓存……这不太好……我后来能够清理缓存并再次启用缓存选项,但似乎仍然有效……
s
sparkplug

Chrome 63(自 2017 年 12 月推出)将强制所有以 .dev(和 .foo)结尾的域通过预加载的 HTTP 严格传输安全 (HSTS) 标头重定向到 HTTPS。 You can find more information about this here.


^^ 同上。它在上周也影响了我们的 .app 域。我们暂时切换到 .test,但我认为这不是一个长期的解决方案。
C
Community

我也一直在努力解决这个问题。似乎是HSTS is intended for only domain names。所以如果你在本地机器上开发,使用IP地址会容易得多。所以我从 localhost 切换到 127.0.0.1


u
user2167582

来自https://galaxyinternet.us/google-chrome-redirects-localhost-to-https-fix/

没有一个选项修复对我有用,修复 https://localhost:3000,确实如此。

点击并按住 Reload 按钮并选择 Empty Cache and Hard Reload,这似乎只是 localhost 上的一个选项


最新的 Chrome 已更新,因此此解决方案将不再有效。
如果您打开了开发人员工具栏,这应该适用于所有域
s
spekdrum

对于像我这样的懒人(在 Chrome 67 中工作)来说,这是一个懒惰且快速的解决方案。

只需使用“隐身窗口”选项(CTRL + SHIFT + N)在隐身模式下启动另一个 Chrome 窗口。无需删除缓存,无需深入 Chrome 设置等。


这可行,但由于临时标头,它使我的 AJAX 请求非常慢。
I
Ivan Efremov

我是如何用 chrome 79 解决这个问题的:

只需将此网址粘贴到您的搜索输入 chrome://flags/#allow-insecure-localhost

它通过使用实验性功能帮助了我。


B
Brett Mathe

我从来没有弄清楚问题的根源,但是我能够解决这个问题。我删除了解决问题的 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
C
CalderBot

这可能是由缓存的 https 重定向引起的,并且可以通过手动清除缓存来修复,如 Adiyat Mubarak 的回答。

但是,如果您正在访问 localhost,您可能是一名开发人员,在这种情况下,您会发现一个缓存清除 chrome 扩展程序,例如“经典缓存杀手”(参见例如 https://chrome.google.com/webstore/search/classic%20cache%20killer?hl=en)在各种情况下都很有用,并且可能已经安装了一个.

所以快速解决方法是:安装一个缓存杀手(如果你还没有),打开它,然后重新加载页面。完毕!


d
diogo.abdalla

这些都不适合我。它在具有本地 URL 的 chrome 更新(版本 63.0.3239.84,linux)之后开始发生。无论如何都会重定向到https。对此失去了几个小时和很大的耐心

毕竟起作用的只是改变了域。

值得一提的是,域名是 .app。也许它有事可做?只是将其更改为 .test 并且 chrome 停止重定向它


V
Venkatesh Muniyandi

不幸的是,这里列出的解决方案都没有帮助我解决这个问题。我通过使用 http://127.0.0.1(IP 地址)而不是 http://localhost 解决了这个问题。使用 chrome 浏览器进行角度开发的快速小技巧。


b
boatcoder

一个简单的解决方案是编辑您的 /etc/hosts 文件并为每个项目建立一个别名。

127.0.0.1   project1 project2 project3

除非您发送@bigjump 提到的 HSTS 响应,并且如果您在项目之间来回更改,还可以维护登录会话,否则这些无域名名称永远不会出现 HSTS 问题。


z
ztom

尝试了提到的所有内容(浏览器首选项、hsts 等),但对我没有任何帮助。

我通过在主机别名中添加尾随 .localhost 来解决它。

像这样:

127.0.0.1    myproject.localhost
127.0.0.1    dev.project.localhost

K
Ko Ga

就我而言,我将项目路径设置为 /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 位)

节点JS v9.2.0


S
Sahi Repswal

chrome://net-internals/#hsts 

在删除域安全策略下输入域,然后按删除按钮。


u
user9143776

转到 Chrome 中的设置,然后转到高级设置,在隐私和安全部分下单击清除浏览数据,然后清除所有数据。我遵循了这些步骤,它对我有用。希望它对某人有所帮助。


W
Wouter Schoofs

Chrome 63 通过预加载的 HSTS 强制 .dev 域自动使用 HTTPS。快速修复:只需将 .dev 域更改为 .localhost。


A
Arunabh Mukherjee

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

在解决方案资源管理器中单击您的 Visual Studio 项目(顶层),然后转到属性窗口。将启用 SSL 更改为 true。您现在将在属性窗口中看到另一个端口号为“SSL URL”。现在,当您运行应用程序(或在浏览器中查看)时,您必须手动将端口号更改为地址栏中的 SSL 端口号。

现在它可以作为 SSL 链接正常工作


l
littleinstein

该问题也可以在 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 文档以获得比谷歌搜索更清晰的问题。


d
dingo_d

对我来说,以下内容在 Chrome 90 中有效。我的应用在 localhost:3000 上打开了一个本地 webpack 服务器,该服务器自动重定向到 HTTPS,我得到了 ERR_SSL_PROTOCOL_ERROR

我单击了 URL 旁边的小信息图标,从下拉菜单中打开了站点设置。在列表中,Insecure content 设置为 Block (default)

我将其更改为 Allow,然后重新加载了 http 版本并且加载正常。

希望这会帮助人们。


J
Josh Harris

我无法找到任何解决方案;但是我的 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>

P
Paul

在我的情况下,我在 Mac 上使用浏览器同步,并且浏览器不断将 http://localhost:3000 重定向到 https://localhost:3000。

我正在使用 Valet 为本地站点提供服务,并且我在本地 *.test 域上运行了 valet secure 以为其提供 SSL 证书。因为我在浏览器同步中代理了这个 HTTPS 域,所以浏览器正在使用 HTTPS 加载 localhost:3000。

要修复它,我必须:

运行 valet unsecure 以删除 SSL 证书运行 valet restart restart browser-sync 在浏览器中打开 localhost:3000(在我的情况下是 Vivaldi,它是 Chromium 浏览器)打开开发者工具在网络选项卡上勾选“禁用缓存”刷新页面


B
Brad Dwyer

原来这个错误信息把我送进了一个兔子洞。

对我来说,问题是我试图在 http 上加载的页面未能返回响应(由于我的代码中的错误导致服务器崩溃)。

Chrome 会自动尝试 https 作为备份,因此,我没有看到实际错误(页面超时),而是看到了 SSL 错误,这是一个红鲱鱼。

修复底层服务器崩溃 &导航回 http://localhost:5000 解决了我的问题。


m
mkto

对于像我这样在 localhost 上运行 Node.js express 服务器的任何人,我有这段代码将 http 重定向到 https:

const server = express() 
  .use((req, res, next) => {
    if (req.headers['x-forwarded-proto'] != 'https') {
      res.redirect('https://' + req.headers.host + req.url)
    } else {
      next()
    }
  })

您必须确保它不会重定向本地主机:

const server = express() 
  .use((req, res, next) => {
    if (req.headers['x-forwarded-proto'] != 'https' && req.headers['host'].indexOf("localhost") == -1) {
      res.redirect('https://' + req.headers.host + req.url)
    } else {
      next()
    }
  })

R
Renan Coelho

对于遇到相同问题的人,我通过按 CTRL + SHIFT + DELETE 仅删除整个浏览器缓存来解决。现在我可以通过 HTTP 协议访问我的本地主机网站。


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅