Solicitação inválida - Nome de host inválido IIS7

86

Quando tento acessar meu aplicativo da web na porta 8080, recebo o seguinte erro

Solicitação inválida - Nome de host inválido
Erro HTTP 400. O nome de host da solicitação é inválido.

Eu nem sei por onde começar a diagnosticar esse problema

burnt1ce
fonte

Respostas:

74

Você verificou se a ligação é IIS? (inetmgr.exe) Pode não estar registrado para aceitar todos os nomes de host no 8080.

Por exemplo, se você configurá-lo para mysite.com:8080 e acessá-lo em localhost: 8080, o IIS obterá a solicitação, mas não terá uma ligação de nome de host para corresponder, portanto, a rejeita.

Fora disso, você deve verificar os logs do IIS (C: \ inetpub \ logs \ wmsvc #) no servidor e ver se está vendo sua solicitação. Então você saberá se é um problema no seu cliente ou no próprio servidor.

Taylor Bird
fonte
2
No meu caso, tive que adicionar a seguinte linha em meu C: \ Windows \ System32 \ drivers \ etc \ hosts: "127.0.0.1 localhost"
chris
4
Onde você configura as ligações no Gerenciador do IIS?
Steve Smith
30

FWIW, se você gostaria de permitir apenas solicitações direcionadas a qualquer nome de host / ip, você pode definir sua ligação da seguinte forma:

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

Eu uso essa ligação para poder carregar uma VM com o IE6 e, em seguida, depurar meu aplicativo.


EDITAR: Ao usar o IIS Express para depurar, o local padrão para o arquivo de configuração desta opção é

C:\Users\{User}\Documents\IISExpress\config\applicationhost.config
Jeff LaFay
fonte
1
Você também pode fazer com que o IIS Express funcione com solicitações remotas usando nossa extensão VS gratuita chamada Conveyor (não envolve alterações de configuração). Use Ferramentas-> Extensões ... para obtê-lo ou em marketplace.visualstudio.com/…
Jim W diz reintegrar Monica em
25

Esta página da Microsoft descreve como configurar o acesso ao IIS Server Express de outros computadores na rede local.

Resumindo:

1) em um prompt de comando com privilégios de administrador:

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

2) No Firewall do Windows com Segurança Avançada, crie uma nova regra de entrada para a porta 8181 para permitir conexões externas

3) Em applicationhost.config, no nó do seu projeto, adicione:

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

NÃO adicione (como foi sugerido em outra resposta):

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

A ligação curinga acima interrompeu meu acesso de http://192.168.1.6:8181/

Erwin
fonte
4
Além disso, você deve executar o Visual Studio com privilégio de administrador, caso contrário, não será possível vincular-se ao IIS Express. Quando terminar de testar como Administrador, você precisará reverter as etapas anteriores removendo a entrada extra do arquivo applicationhost.config e removendo a entrada HTTP.sys usando: netsh http delete urlacl url=http://[your ip address]:8181/
SteveC
1
Se o seu computador estiver configurado para um idioma diferente, então "usuário = todos" deve ser outra coisa. Em francês, é user = "Tout le monde". Veja esta resposta: stackoverflow.com/a/18856394/1317559
Dia
24

Portanto, resolvi isso acessando meu site no Gerenciador do IIS e alterando o nome do host nas associações de site de localhost para *. Comecei a trabalhar imediatamente.

Site Bindings no IIS

SINGULARIDADE
fonte
perfeito! Funcionou para uma instância AWS usada para executar um site Laravel
Vishnoo Rath
Isso corrigiu meu problema com o núcleo do asp.net, onde funcionava no localhost, mas não no ip remoto, obrigado!
Philip
Funcionou no meu caso. Embora eu tenha hospedado mais de 100 sites. engano da primeira vez e não foi capaz de encontrar nas regras de firewall ou quaisquer outras soluções.
Ketan Kotak
9

Para Visual Studio 2017e Visual Studio 2015, as IIS Expressconfigurações são armazenadas no .vsdiretório oculto e o caminho é algo parecido com este .vs\config\applicationhost.config, adicionar vinculação como a seguir funcionará

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

Sintaxe: https://docs.microsoft.com/en-us/dotnet/api/microsoft.web.administration.binding.bindinginformation?view=iis-dotnet

imgen
fonte
2
Para qualquer pessoa que use esse método, não é importante observar que o modelo de informações de ligação correto é: endereço ip: porta: cabeçalho do host. Portanto, a implementação correta é: <bindings> <binding protocol="http" bindingInformation="localhost:8802:*" /> <binding protocol="http" bindingInformation="127.0.0.1:8802:*"/> </bindings>
Lionnel Afangbedjee
1
A pasta .vs é a pasta na pasta raiz do projeto. Nesse applicationhost.config, procure a tag <site name = "[YourService / ProjectName]> e encontre a tag <bindings> lá.
NexX
4

Não se esqueça de se conectar ao endereço IPv6 também! Eu estava tentando adicionar um site em 127.0.0.1 usando localhost e recebi a solicitação inválida / erro de nome de host inválido. Quando pinguei o localhost, ele resolveu: 1, pois o IPv6 foi habilitado, então eu só tive que adicionar a ligação adicional para corrigir o problema.

Ligações de site IIS

Jeff Camera
fonte
4

Isso resolveu meu problema (desculpe meu inglês ruim):

  1. abra o cmd como administrador e execute o comando (sem os colchetes):
    netsh http add urlacl url=http://[ip adress]:[port]/ user=everyone

  2. em documents/iisexpress/config/applicationhost.confige na pasta raiz do projeto na pasta (oculta): .vs/config/applicationhost.configvocê precisa adicionar uma linha à tag "site":
    <binding protocol="http" bindingInformation="*:8080:192.xxx.xxx.xxx" />

  3. abra o "gerenciador de serviços de informações da Internet (iis)"
    (para encontrá-lo: em pesquisa na barra de tarefas, escreva "Ativar ou desativar recursos do Windows" e abra o resultado e marque a caixa de seleção "serviço de informações da Internet" e instale-o):

    1. na tela esquerda, clique em: nome do computador -> Sites -> Site padrão e
    2. em seguida, clique na tela à direita "Binding"
    3. clique no botão Adicionar
    4. escreva o que você precisa e pressione "OK".
  4. abra "Firewall do Windows com segurança avançada",

    1. na tela esquerda, pressione "Regras de entrada" e depois
    2. pressione na tela à direita "Nova Regra ..."
    3. verifique a porta e pressione Avançar,
    4. verifique o TCP e sua porta e pressione Avançar,
    5. marque "Permitir a conexão" e pressione Próximo,
    6. marque todas as caixas de seleção e pressione Avançar,
    7. escreva o nome e pressione Concluir.
  5. feito.

izik f
fonte
3

Não tenho certeza se esse foi o seu problema, mas para qualquer pessoa que está tentando acessar seu aplicativo da web de sua máquina e tendo este problema:

Certifique-se de que você está se conectando ao 127.0.0.1(aka localhost) e não ao seu endereço IP externo.

Seu URL deve ser algo como http://localhost:8181/ou http://127.0.0.1:8181e não http://YourExternalIPaddress:8181/ .


Informações adicionais:
Isso funciona porque seu firewall pode bloquear sua própria solicitação. Pode ser um firewall em seu sistema operacional e pode ser (o normal) seu roteador.

Quando você se conecta ao seu endereço IP externo, você se conecta a você pela Internet, como se fosse um estranho (ou um hacker).
No entanto, quando você se conecta ao seu host local, você se conecta localmente como você mesmo e o bloqueio obviamente não é necessário (e evitado completamente).

MasterMastic
fonte
Eu tenho esse problema onde ao usar o localhost funciona, mas ao usar o endereço IP local das máquinas (não). Por que você disse especificamente para não usar seu endereço IP - por que isso não funciona - eu gostaria de entender?
Código exclusivo de
1
É absurdamente trivial para um "hacker" alterar o nome do host usado para se conectar a um site.
Arafangion
@Arafangion Mudar onde e ganhar o quê?
MasterMastic
@MasterMastic: Por exemplo, no linux, edite o arquivo /etc/hosts.conf. O Windows tem equivalente. Ou ainda mais trivial, apenas diga ao curl ou ao wget qual nome de host relatar. Aqui, você aparentemente está contando com o "nome do host" para bloquear solicitações da Internet, então o que o hacker ganha é obviamente o que ele precisa para contornar seu aparente mecanismo de "proteção". O IIS ainda parece se ligar à porta. A correção correta é não se vincular à porta acessível externamente em primeiro lugar.
Arafangion de
@Arafangion Sim, mas isso é um redirecionamento local. O ponto aqui não é localhost, é ao que está se referindo ( 127.0.0.1). Tudo o que estou dizendo é conectar-se a isso e não ao seu IP visível externamente. Não há dependência do host local, ele é usado apenas como um sinônimo. Vou editar minha resposta para tornar isso mais claro.
MasterMastic de
2

Você pode usar a ferramenta CMD do Visual Studio 2005/2008/2010. Execute-o como administrador e escreva

aspnet_regiis -i

Finalmente posso executar meu aplicativo com sucesso.

FrankFan
fonte
2

Se estiver trabalhando no servidor local ou não tiver um nome de domínio, exclua o campo "Nome do host:". insira a descrição da imagem aqui

Tahir FEYZIOGLU
fonte
1

Verifique o arquivo de hosts locais (C: \ Windows \ System32 \ drivers \ etc \ hosts por exemplo). No meu caso, eu já havia usado isso para apontar uma URL para uma caixa de desenvolvimento e depois esqueci. Quando reutilizei o mesmo URL, continuei recebendo Bad Request (Invalid Hostname) porque o tráfego estava indo para o servidor errado.

assaltante
fonte
1

Recebi este erro quando tentei chamar um serviço da web usando "localhost". Consertei usando o IP real (192.168 ...)

Cosmin
fonte
Vencedora. Este era o meu problema no servidor Windows 2003.
DreamTeK
0

Eu vi o mesmo erro depois de usar msdeploy para copiar o aplicativo para um novo servidor. Descobriu-se que as ligações ainda estavam usando o endereço IP do servidor anterior. Portanto, verifique o endereço IP nas ligações do IIS. (Parece óbvio depois do fato, mas não me ocorreu imediatamente verificar).

dan9298
fonte
0

Verifique o URL exato que você está fornecendo. Eu vi esse erro quando perdi o prefixo de rota definido no ASP.NET, então ele não sabia para onde rotear a solicitação.

Taran
fonte
0

Certifique-se de que o IIS esteja escutando sua porta.

No meu caso, esse era o problema. Então, eu tive que mudar minha porta para algo como 8083 e isso resolveu o problema.

Dudi
fonte