当我使用 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
这些选项卡中没有预览和响应数据。
.dev
作为本地域,这是一个全新的问题,所以我认为这些答案中的任何一个都不再适用。从 Chrome 63 开始...“Chrome 通过预加载的 HSTS 强制 .dev 域使用 HTTPS”。所以不再有自签名 SSL 证书。显然 .dev 是一个真正的域。谁知道。
我相信这是由 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。
我在 Chrome 中遇到了同样的问题,但我尝试使用 BigJump's solution 失败。
我通过强制硬刷新解决了我的问题,如此 blog 所示(最初来自此 SuperUser answer)。
确保您的地址栏使用的是 http 方案,然后执行这些步骤,可能会执行几次:
打开开发人员工具面板 (CTRL+SHIFT+I) 单击并按住重新加载图标/右键单击重新加载图标。将打开一个菜单。从此菜单中选择第三个选项(“Empty Cache and Hard Reload”)
新的发展! (如果您有 Chrome 63+)
如果您的 localhost 域是 .dev
,那么我认为以前接受的答案不起作用。原因是因为从 Chrome 63 开始,Chrome 将通过预加载的 HSTS 强制 .dev 域使用 HTTPS。
这意味着,.dev
基本上不再起作用,除非您拥有适当的签名 SSL 证书——不允许再使用自签名证书! Learn more at this blog post.
因此,现在解决此问题并避免将来再次发生此问题 .test
是一个推荐的域,因为它由 IETF 保留用于测试/开发目的。您还应该能够将 .localhost
用于本地开发。
.test
.test
替换 .dev
也对我有用
无法硬刷新,因为它只是在 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)
我遇到了同样的问题,但仅限于 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" },
所以,改变你的域名。
去
chrome://net-internals/#hsts
在删除域安全策略下输入 localhost,然后按删除按钮。
现在去
chrome://settings/clearBrowserData
勾选缓存图像和文件框,然后单击清除数据按钮。
打开 Chrome Developer Tools
->转到 Network
->选择 Disable Cache
->重新加载
Chrome 63(自 2017 年 12 月推出)将强制所有以 .dev(和 .foo)结尾的域通过预加载的 HTTP 严格传输安全 (HSTS) 标头重定向到 HTTPS。 You can find more information about this here.
.app
域。我们暂时切换到 .test
,但我认为这不是一个长期的解决方案。
我也一直在努力解决这个问题。似乎是HSTS is intended for only domain names。所以如果你在本地机器上开发,使用IP地址会容易得多。所以我从 localhost 切换到 127.0.0.1
来自https://galaxyinternet.us/google-chrome-redirects-localhost-to-https-fix/
没有一个选项修复对我有用,修复 https://localhost:3000
,确实如此。
点击并按住 Reload
按钮并选择 Empty Cache and Hard Reload
,这似乎只是 localhost
上的一个选项
对于像我这样的懒人(在 Chrome 67 中工作)来说,这是一个懒惰且快速的解决方案。
只需使用“隐身窗口”选项(CTRL + SHIFT + N)在隐身模式下启动另一个 Chrome 窗口。无需删除缓存,无需深入 Chrome 设置等。
我是如何用 chrome 79 解决这个问题的:
只需将此网址粘贴到您的搜索输入 chrome://flags/#allow-insecure-localhost
它通过使用实验性功能帮助了我。
我从来没有弄清楚问题的根源,但是我能够解决这个问题。我删除了解决问题的 Google Chrome 应用缓存文件夹。
C:\Users[用户]\AppData\Local\Google\Chrome
这可能是由缓存的 https 重定向引起的,并且可以通过手动清除缓存来修复,如 Adiyat Mubarak 的回答。
但是,如果您正在访问 localhost,您可能是一名开发人员,在这种情况下,您会发现一个缓存清除 chrome 扩展程序,例如“经典缓存杀手”(参见例如 https://chrome.google.com/webstore/search/classic%20cache%20killer?hl=en)在各种情况下都很有用,并且可能已经安装了一个.
所以快速解决方法是:安装一个缓存杀手(如果你还没有),打开它,然后重新加载页面。完毕!
这些都不适合我。它在具有本地 URL 的 chrome 更新(版本 63.0.3239.84,linux)之后开始发生。无论如何都会重定向到https。对此失去了几个小时和很大的耐心
毕竟起作用的只是改变了域。
值得一提的是,域名是 .app。也许它有事可做?只是将其更改为 .test 并且 chrome 停止重定向它
不幸的是,这里列出的解决方案都没有帮助我解决这个问题。我通过使用 http://127.0.0.1(IP 地址)而不是 http://localhost 解决了这个问题。使用 chrome 浏览器进行角度开发的快速小技巧。
一个简单的解决方案是编辑您的 /etc/hosts
文件并为每个项目建立一个别名。
127.0.0.1 project1 project2 project3
除非您发送@bigjump 提到的 HSTS 响应,并且如果您在项目之间来回更改,还可以维护登录会话,否则这些无域名名称永远不会出现 HSTS 问题。
尝试了提到的所有内容(浏览器首选项、hsts 等),但对我没有任何帮助。
我通过在主机别名中添加尾随 .localhost
来解决它。
像这样:
127.0.0.1 myproject.localhost
127.0.0.1 dev.project.localhost
就我而言,我将项目路径设置为 /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
去
chrome://net-internals/#hsts
在删除域安全策略下输入域,然后按删除按钮。
转到 Chrome 中的设置,然后转到高级设置,在隐私和安全部分下单击清除浏览数据,然后清除所有数据。我遵循了这些步骤,它对我有用。希望它对某人有所帮助。
Chrome 63 通过预加载的 HSTS 强制 .dev 域自动使用 HTTPS。快速修复:只需将 .dev 域更改为 .localhost。
这不是解决方案,它只是一种解决方法。
在解决方案资源管理器中单击您的 Visual Studio 项目(顶层),然后转到属性窗口。将启用 SSL 更改为 true。您现在将在属性窗口中看到另一个端口号为“SSL URL”。现在,当您运行应用程序(或在浏览器中查看)时,您必须手动将端口号更改为地址栏中的 SSL 端口号。
现在它可以作为 SSL 链接正常工作
该问题也可以在 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 文档以获得比谷歌搜索更清晰的问题。
对我来说,以下内容在 Chrome 90 中有效。我的应用在 localhost:3000
上打开了一个本地 webpack 服务器,该服务器自动重定向到 HTTPS,我得到了 ERR_SSL_PROTOCOL_ERROR
。
我单击了 URL 旁边的小信息图标,从下拉菜单中打开了站点设置。在列表中,Insecure content
设置为 Block (default)
。
我将其更改为 Allow
,然后重新加载了 http 版本并且加载正常。
希望这会帮助人们。
我无法找到任何解决方案;但是我的 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>
在我的情况下,我在 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 浏览器)打开开发者工具在网络选项卡上勾选“禁用缓存”刷新页面
原来这个错误信息把我送进了一个兔子洞。
对我来说,问题是我试图在 http
上加载的页面未能返回响应(由于我的代码中的错误导致服务器崩溃)。
Chrome 会自动尝试 https
作为备份,因此,我没有看到实际错误(页面超时),而是看到了 SSL 错误,这是一个红鲱鱼。
修复底层服务器崩溃 &导航回 http://localhost:5000
解决了我的问题。
对于像我这样在 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()
}
})
对于遇到相同问题的人,我通过按 CTRL + SHIFT + DELETE 仅删除整个浏览器缓存来解决。现在我可以通过 HTTP 协议访问我的本地主机网站。
不定期副业成功案例分享
.dev
,那么我认为这不起作用@Alison,因为从最近发布的 v.63 开始......“Chrome 通过预加载的 HSTS 强制 .dev 域使用 HTTPS”。因此,除非您拥有适当的签名 SSL 证书,否则 .dev 基本上将不再工作。不再允许使用自签名证书。 More details。