来自Visual Studio调试的localhost出现ERR_SSL_PROTOCOL_ERROR错误

46

我正在运行一个简单的ASP.net网页应用程序。在运行后,Chrome显示以下错误。

localhost sent an invalid response.
Try running Windows Network Diagnostics.
ERR_SSL_PROTOCOL_ERROR

但我的应用程序是在http上,而不是https。

在此输入图片描述

但URL正在使用https://localhost:54056/加载。

配置也只指向http。

 <site name="tan-square" id="2">
            <application path="/" applicationPool="Clr4IntegratedAppPool">
                <virtualDirectory path="/" physicalPath="C:\Users\Myfolder\OneDrive\Downloads\tan-square" />
            </application>
            <bindings>
                <binding protocol="http" bindingInformation="*:54056:localhost" />
            </bindings>
        </site>

我不明白问题出在哪里。为什么使用https加载?


如果您切换到另一个网络浏览器会怎样呢?Chrome一直在推行其自身的限制(例如证书等),因此不是一个很好的调试浏览器。 - Lex Li
请查看此处:https://dev59.com/11cQ5IYBdhLWcg3wFf49 - Arsen Khachaturyan
7个回答

101

首先,请按照以下方式检查您的网站绑定详细信息:

  1. 打开Visual Studio,选择您的项目。

  2. 右键单击项目,选择属性。

  3. 在Web选项卡下检查您的项目URL。

输入图像描述

确保您的web.config文件中没有以下设置:

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Strict-Transport-Security" 

        value="max-age=16070400; includeSubDomains" />
      </customHeaders>
    </httpProtocol>
</system.webServer>

当浏览器看到这个标记时,它会记住给定秒数内当前域名只能通过HTTPS访问。将来,如果用户键入http://或省略方案,HTTPS将成为默认选项。

清除浏览器缓存。

你还可以尝试寻找原因的另一种方法是打开Chrome并在地址栏中输入chrome://net-internals/#hsts ,然后搜索localhost

enter image description here

查询显示“localhost”在HSTS集合的域列表中。

解决方案是从缓存中删除该域。 在“Delete domain”文本字段中输入“localhost”,然后点击删除。 做完这些后再次查询“localhost”,您将收到“未找到”信息。

enter image description here


19
我做了Chrome的那个事情,对我有用。谢谢! - Matheus Xavier
1
对我来说,清除 Chrome 缓存解决了这个问题。 - Eyal
2
完美!其他方法都对我没用。 - OldBuildingAndLoan
1
我正在使用VS2022运行一个.NET 6 Web项目,但在项目设置中找不到“Web”部分。 - Simon
兄弟,你是我的英雄,从Chrome列表中清除本地主机解决了我的问题。我在本地主机上测试了HSTS,但一个月后却遇到了这个问题(我很久以前就测试过)。非常感谢你的帮助。 - firatt_
显示剩余2条评论

5

创建新的虚拟目录:

1-右键单击项目,选择属性。

2-在Web选项卡下,将项目url从localhost更改为http://localhost:48333/。

3-点击创建虚拟目录。

4-确保在web.config中没有此内容。

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Strict-Transport-Security" value="max-age=16070400; includeSubDomains"/>
      </customHeaders>
    </httpProtocol>
</system.webServer>

这绝对是最简单的解决方案。只需记得确保你的Web.confg转换与Jalapa_Panchal上面的示例一样即可。 - PhillipPDX

1

前往启动设置 将启动URL更改为https而不是http, 它将要求您添加自动生成的SSL证书, 点击确认,然后运行该项目。 希望这可以帮到您。


1
如果您正在运行.net core,只需以管理员身份运行Visual Studio,或转到bin\Debug\netcoreapp3.1目录,并发出命令。奇怪的是,.net core居然没有给出任何错误提示。
%USERPROFILE%\\.dotnet\\tools\\dotnet-lambda-test-tool-3.1.exe --port 5059

将端口号更改为任何值。

有趣的是,以管理员身份运行VS解决了我的问题,然后在没有提升权限的情况下运行VS,浏览器不再报告错误。 - Tom John

0
在我的情况下,“清除SSL状态”解决了我的问题。
  • 打开开始菜单。
  • 搜索并打开Internet选项。
  • 在弹出的对话框中,选择内容选项卡。
  • 点击清除SSL状态。

0

如果您在launchsettings.json的iisbindings部分添加了ssl端口,VS将自动执行此操作。没有UI可以完成它,但您可以直接编辑文件。

{
    "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iis": {
        "applicationUrl": "https://localhost/WebApplication",
        "sslPort": 443
    },
    "iisExpress": {
        "applicationUrl": "https://localhost:62686",
        "sslPort": 44391
    }
},

-4

将默认浏览器更改为Chrome,问题就解决了。


2
你的回答可以通过提供额外的支持信息来改进。请[编辑]以添加更多细节,例如引用或文档,以便其他人可以确认您的答案是否正确。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接