错误的请求-无效的主机名IIS7


86

当我尝试在端口8080上访问我的Web应用程序时,出现以下错误

错误的请求-无效的主机名
HTTP错误400。请求的主机名无效。

我什至不知道从哪里开始诊断这个问题

Answers:


74

您检查绑定是IIS吗?(inetmgr.exe)可能未注册为接受8080上的所有主机名。

例如,如果将其设置为mysite.com:8080并在localhost:8080处将其击中,则IIS将获得该请求,但没有匹配的主机名绑定,因此它被拒绝。

除此之外,您应该检查服务器上的IIS日志(C:\ inetpub \ logs \ wmsvc#),看看是否正在查看请求。然后,您将知道这是您的客户端还是服务器本身的问题。


2
就我而言,我必须在C:\ Windows \ System32 \ drivers \ etc \ hosts中添加以下行:“ 127.0.0.1 localhost”
chris

4
您在IIS管理器中的哪里配置绑定?
史蒂夫·史密斯,

30

FWIW,如果您只想允许定向到任何主机名/ ip的请求,则可以这样设置绑定:

<binding protocol="http" bindingInformation="*:80:*" />

我使用此绑定,以便可以使用IE6加载VM,然后调试我的应用程序。


编辑:使用IIS Express进行调试时,此选项的配置文件的默认位置是

C:\Users\{User}\Documents\IISExpress\config\applicationhost.config

1
您还可以使用称为“传送带”的免费VS扩展程序使IIS Express与远程录入一起使用(不涉及配置更改)。使用Tools-> Extensions ...来获取它,或在marketplace.visualstudio.com / ...
Jim W说要恢复Monica

25

页由微软介绍了如何设置从其他计算机在本地网络上访问IIS Server Express的。

简而言之:

1)在具有管理员权限的命令提示符下:

netsh http add urlacl url=http://[your ip address]:8181/ user=everyone

2)在具有高级安全性的Windows防火墙中,为端口8181创建一个新的入站规则,以允许外部连接

3)在applicationhost.config的项目节点中,添加:

<binding protocol="http" bindingInformation="*:8181:[your ip address]" />

不要添加(如另一个答案中所建议):

<binding protocol="http" bindingInformation="*:8181:*" />

上面的通配符绑定使我无法访问 http://192.168.1.6:8181/


4
另外,您必须以“管理员特权”运行Visual Studio,否则将无法绑定到IIS Express。当以管理员身份完成测试后,您将需要通过以下步骤撤消上述步骤:从applicationhost.config文件中删除多余的条目,并使用以下方法删除HTTP.sys条目:netsh http delete urlacl url=http://[your ip address]:8181/
SteveC

1
如果您的计算机设置为其他语言,则“ user = everyone”应该是其他名称。法语为user =“ Tout le monde”。看到这个答案:stackoverflow.com/a/18856394/1317559
Yster

24

因此,我通过在IIS管理器中转到我的网站并将站点绑定中的主机名从localhost更改为*来解决此问题。立即开始工作。

IIS中的网站绑定


完善!为用于运行Laravel站点的AWS实例工作
Vishnoo Rath,

这解决了我在asp.net core上无法在本地主机上运行的问题,但是不能在远程ip上运行,谢谢!
菲利普(Philip)

就我而言,它奏效了。虽然我已经托管了100多个网站。第一次错误,并且无法在防火墙规则或任何其他解决方案中找到。
Ketan Kotak

9

对于Visual Studio 2017Visual Studio 2015IIS Express设置存储在隐藏.vs目录中,并且路径是这样的.vs\config\applicationhost.config,如下所示添加绑定将起作用

<bindings>
    <binding protocol="http" bindingInformation="*:8802:localhost" />
    <binding protocol="http" bindingInformation="*:8802:127.0.0.1" />
</bindings>

语法:https : //docs.microsoft.com/zh-cn/dotnet/api/microsoft.web.administration.binding.bindinginformation?view=iis-dotnet


2
对于使用此方法的任何人,我都不必注意正确的绑定信息模板是:ip address:port:host header。因此正确的实现方式是: <bindings> <binding protocol="http" bindingInformation="localhost:8802:*" /> <binding protocol="http" bindingInformation="127.0.0.1:8802:*"/> </bindings>
里昂内尔·阿芳贝吉

1
.vs文件夹是项目根文件夹中的文件夹。
NexX

4

不要忘记也绑定到IPv6地址!我试图使用本地主机在127.0.0.1上添加站点,但收到错误的请求/无效的主机名错误。当我ping localhost时,由于启用了IPv6,它解析为:: 1,因此我只需要添加其他绑定即可解决此问题。

IIS网站绑定


4

这解决了我的问题(对不起我的英语不好):

  1. 以管理员身份打开cmd并运行命令(不带方括号):
    netsh http add urlacl url=http://[ip adress]:[port]/ user=everyone

  2. documents/iisexpress/config/applicationhost.config(隐藏的)文件夹中的根项目文件夹中和之中:.vs/config/applicationhost.config您需要在“站点”标签中添加行:
    <binding protocol="http" bindingInformation="*:8080:192.xxx.xxx.xxx" />

  3. 打开“ Internet信息服务(iis)管理器”
    (要找到它:在任务栏中的搜索中编写“打开或关闭窗口功能”并打开结果,然后选中“ Internet信息服务”复选框并安装它):

    1. 在左侧屏幕中,单击:计算机名称->站点->默认网站,然后
    2. 然后在右侧屏幕上单击“绑定”
    3. 点击添加按钮
    4. 输入所需内容,然后按“确定”。
  4. 打开“具有高级安全性的Windows防火墙”,

    1. 在左侧屏幕中,按“入站规则”,然后
    2. 在右侧屏幕中按“新规则...”
    3. 检查端口并按下一步,
    4. 检查TCP和端口,然后按下一步,
    5. 选中“允许连接”,然后按下一步,
    6. 选中所有复选框,然后按下一步,
    7. 输入名称,然后按完成。
  5. 完成。


3

我不确定这是否是您的问题,但是对于试图从他的计算机访问他的Web应用程序并遇到此问题的任何人:

确保您连接到127.0.0.1(akalocalhost),而不是外部IP地址。

您的URL应该是http://localhost:8181/or http://127.0.0.1:8181不是 http://YourExternalIPaddress:8181/


附加信息:
之所以起作用,是因为您的防火墙可能阻止了您自己的请求。它可以是您操作系统上的防火墙,也可以是(通常)您的路由器。

当您连接到外部IP地址时,就可以从Internet连接到您,就像您是陌生人(或黑客)一样。
但是,当您连接到本地主机时,您可以自己本地连接,显然不需要该块(并且完全避免使用)。


我有这个问题,在使用localhost时可以使用,但是在使用计算机的本地IP地址时可以(不可以)。您为什么特别说不使用yourIP地址-为什么这样不起作用-我想了解?
唯一代码

1
对于“黑客”来说,更改用于连接到网站的主机名简直是微不足道的。
Arafangion '16

@Arafangion在哪里更改并获得什么?
2016年

@MasterMastic:例如,在linux上,编辑/etc/hosts.conf文件。Windows具有等效功能。甚至更简单的是,只需告诉curl或wget报告哪个主机名即可。在这里,您显然是依靠“主机名”来阻止来自Internet的请求,因此,黑客获得的收益显然是他们绕过您明显的“保护”机制所需获得的一切。IIS似乎仍绑定到端口。正确的解决方法是首先不要绑定到外部可访问的端口。
Arafangion '16

@Arafangion是的,但这是本地重定向。这里的重点不是localhost,而是它所指的(127.0.0.1)。我要说的是连接到该地址,而不是连接到您外部可见的IP。不依赖本地主机,它只是用作同义词。我将编辑答案以使其更清楚。
MasterMastic

2

您可以使用Visual Studio 2005/2008/2010 CMD工具。以管理员身份运行并编写

aspnet_regiis -i

最后,我可以成功运行我的应用了。



1

检查您的本地主机文件(例如C:\ Windows \ System32 \ drivers \ etc \ hosts)。在我的情况下,我以前曾使用它来将URL指向开发人员框,然后忘记了它。然后,当我重用相同的URL时,我一直收到错误请求(无效的主机名),因为流量流向了错误的服务器。


1

尝试使用“ localhost”调用Web服务时收到此错误。我通过使用实际IP(192.168 ...)进行了修复。


优胜者。这是我的Windows Server 2003上的问题
DreamTeK

0

使用msdeploy将应用程序复制到新服务器后,我看到了相同的错误。原来,绑定仍在使用先前服务器的IP地址。因此,请仔细检查IIS绑定中的IP地址。(事实之后似乎很明显,但是我没有立即检查它)。


0

仔细检查您提供的确切网址。我错过了ASP.NET中定义的路由前缀时看到了此错误,因此它不知道将请求路由到何处。


0

确保IIS正在侦听您的端口。

就我而言,这就是问题所在。所以我不得不将端口更改为8083之类的东西,它解决了这个问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.