Richiesta non valida: nome host IIS7 non valido


87

Quando provo a colpire la mia app web sulla porta 8080 ottengo il seguente errore

Richiesta non valida - Errore
HTTP del nome host non valido 400. Il nome host della richiesta non è valido.

Non so nemmeno da dove cominciare per diagnosticare questo problema

Risposte:


75

Hai controllato che l'associazione sia IIS? (inetmgr.exe) Potrebbe non essere registrato per accettare tutti i nomi host su 8080.

Ad esempio, se lo configuri per mysite.com:8080 e lo premi su localhost: 8080, IIS riceverà la richiesta ma non avrà un binding del nome host da abbinare, quindi rifiuta.

Al di fuori di ciò, dovresti controllare i log IIS (C: \ inetpub \ logs \ wmsvc #) sul server e vedere se vedi la tua richiesta. Allora saprai se è un problema sul tuo client o sul server stesso.


2
Nel mio caso, ho dovuto aggiungere la seguente riga nel mio C: \ Windows \ System32 \ drivers \ etc \ hosts: "127.0.0.1 localhost"
chris

4
Dove si configurano le associazioni in IIS Manager?
Steve Smith

30

FWIW, se desideri consentire solo le richieste dirette a qualsiasi nome host / ip, puoi impostare il tuo binding in questo modo:

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

Uso questa associazione in modo da poter caricare una VM con IE6 e quindi eseguire il debug della mia applicazione.


EDIT: durante l'utilizzo di IIS Express per il debug, il percorso predefinito per il file di configurazione di questa opzione è

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

2
Puoi anche far funzionare IIS Express con richieste remote utilizzando la nostra estensione VS gratuita chiamata Conveyor (non comporta modifiche alla configurazione). Usa Strumenti-> Estensioni ... per scaricarlo, o su marketplace.visualstudio.com/…
Jim W dice reinstate Monica

26

Questa pagina di Microsoft descrive come configurare l'accesso a IIS Server Express da altri computer sulla rete locale.

In poche parole:

1) da un prompt dei comandi con privilegi di amministratore:

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

2) In Windows Firewall con protezione avanzata, creare una nuova regola in entrata per la porta 8181 per consentire le connessioni esterne

3) In applicationhost.config, nel nodo per il tuo progetto, aggiungi:

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

NON aggiungere (come suggerito in un'altra risposta):

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

L'associazione con caratteri jolly sopra ha interrotto il mio accesso da http://192.168.1.6:8181/


4
Inoltre, è necessario eseguire Visual Studio con privilegio di amministratore altrimenti non sarà possibile eseguire il binding a IIS Express. Al termine del test come amministratore, sarà necessario invertire i passaggi precedenti rimuovendo la voce aggiuntiva dal file applicationhost.config e rimuovendo la voce HTTP.sys utilizzando: netsh http delete urlacl url=http://[your ip address]:8181/
SteveC

1
Se il tuo computer è impostato su una lingua diversa, "utente = tutti" dovrebbe essere qualcos'altro. In francese è user = "Tout le monde". Vedere questa risposta: stackoverflow.com/a/18856394/1317559
Yster

24

Quindi, ho risolto il problema andando al mio sito Web in Gestione IIS e cambiando il nome host nei collegamenti del sito da localhost a *. Ha iniziato a lavorare immediatamente.

Binding del sito in IIS


Perfetto! Ha funzionato per un'istanza AWS utilizzata per eseguire un sito
Laravel

Questo ha risolto il mio problema con asp.net core dove funzionava su localhost ma non sull'ip remoto, grazie!
Philip

Ha funzionato nel mio caso. Sebbene avessi ospitato più di 100 siti. sbagliato la prima volta e non è stato possibile trovare nelle regole del firewall o in altre soluzioni.
Ketan Kotak

9

Per Visual Studio 2017e Visual Studio 2015, le IIS Expressimpostazioni sono memorizzate nella .vsdirectory nascosta e il percorso è qualcosa del genere .vs\config\applicationhost.config, l'aggiunta di binding come di seguito funzionerà

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

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


2
Per chiunque utilizzi questo metodo, non è importante notare che il modello di informazioni di associazione corretto è: indirizzo ip: porta: intestazione host. Quindi l'implementazione corretta è: <bindings> <binding protocol="http" bindingInformation="localhost:8802:*" /> <binding protocol="http" bindingInformation="127.0.0.1:8802:*"/> </bindings>
Lionnel Afangbedjee

1
La cartella .vs è la cartella nella cartella principale del progetto. In tale applicationhost.config, cerca il tag <site name = "[YourService / ProjectName]> e trova il tag <bindings> lì.
NexX

4

Non dimenticare di collegarti anche all'indirizzo IPv6! Stavo cercando di aggiungere un sito su 127.0.0.1 utilizzando localhost e ho ricevuto l'errore di richiesta errata / nome host non valido. Quando ho eseguito il ping di localhost, si è risolto in :: 1 poiché IPv6 era abilitato, quindi ho dovuto aggiungere l'associazione aggiuntiva per risolvere il problema.

Binding del sito IIS


4

Questo ha risolto il mio problema (scusa per il mio cattivo inglese):

  1. apri cmd come amministratore ed esegui il comando (senza le parentesi quadre):
    netsh http add urlacl url=http://[ip adress]:[port]/ user=everyone

  2. dentro documents/iisexpress/config/applicationhost.confige nella cartella principale del tuo progetto nella cartella (nascosta): .vs/config/applicationhost.configdevi aggiungere una riga al tag "site":
    <binding protocol="http" bindingInformation="*:8080:192.xxx.xxx.xxx" />

  3. apri "Internet Information Services (iis) manager"
    (per trovarlo: nella ricerca nella barra delle applicazioni scrivi "Attiva o disattiva le funzionalità della finestra" e apri il risultato, quindi seleziona la casella "Internet Information Service" e installalo):

    1. nella schermata di sinistra fare clic su: nome-computer -> Siti -> Sito Web predefinito e
    2. quindi fare clic su "Binding" nella schermata di destra
    3. fare clic sul pulsante Aggiungi
    4. scrivi quello che ti serve e premi "OK".
  4. apri "Windows Firewall con sicurezza avanzata",

    1. nella schermata di sinistra premere "Regole in entrata" e poi
    2. premere nella schermata di destra "Nuova regola ..."
    3. controlla la porta e premi Avanti,
    4. controlla TCP e la tua porta e premi Avanti,
    5. seleziona "Consenti la connessione" e premi Avanti,
    6. seleziona tutte le caselle di controllo e premi Avanti,
    7. scrivere il nome e premere Fine.
  5. fatto.


3

Non sono sicuro se questo fosse il tuo problema, ma per chiunque stia cercando di accedere alla sua applicazione web dalla sua macchina e abbia questo problema:

Assicurati di connetterti a 127.0.0.1(aka localhost) e non al tuo indirizzo IP esterno.

Il tuo URL dovrebbe essere qualcosa come http://localhost:8181/o http://127.0.0.1:8181e non http://YourExternalIPaddress:8181/ .


Informazioni aggiuntive:
il motivo per cui funziona è perché il firewall potrebbe bloccare la tua richiesta. Può essere un firewall sul tuo sistema operativo e può essere (il solito) il tuo router.

Quando ti connetti al tuo indirizzo IP esterno, ti connetti da Internet, come se fossi un estraneo (o un hacker).
Tuttavia, quando ti connetti al tuo localhost, ti connetti localmente come te stesso e il blocco non è ovviamente necessario (ed evitato del tutto).


Ho questo problema in cui quando si utilizza localhost funziona ma quando si utilizza l'indirizzo IP locale della macchina (non lo fa). Perché hai specificamente detto di non usare il tuo indirizzo IP - perché non funziona - mi piacerebbe capire?
Codifica in modo univoco il

1
È assurdamente banale per un "hacker" cambiare il nome host utilizzato per connettersi a un sito web.
Arafangion

@ Arafangion Cambiarlo dove e guadagnare cosa?
MasterMastic

@MasterMastic: Ad esempio, su Linux, modifica il file /etc/hosts.conf. Windows ha l'equivalente. O ancora più banalmente, basta dire a curl o wget quale hostname segnalare. Qui, apparentemente stai facendo affidamento sul "nome host" per bloccare le richieste da Internet, quindi ciò che l'hacker guadagna è ovviamente tutto ciò di cui ha bisogno aggirando il tuo apparente meccanismo di "protezione". IIS sembra ancora collegarsi alla porta. La soluzione corretta è non legarsi alla porta accessibile esternamente in primo luogo.
Arafangion

@Arafangion Sì, ma questo è un reindirizzamento locale. Il punto qui non è localhost, è ciò a cui si riferisce ( 127.0.0.1). Tutto quello che sto dicendo è connettersi a quello e non al tuo IP visibile esternamente. Non si fa affidamento sul localhost, è solo usato come sinonimo. Modificherò la mia risposta per renderlo più chiaro.
MasterMastic

2

È possibile utilizzare lo strumento CMD di Visual Studio 2005/2008/2010. Eseguilo come amministratore e scrivi

aspnet_regiis -i

Finalmente posso eseguire la mia app con successo.


2

Se lavori su un server locale o non hai il nome di dominio, elimina il campo "Nome host:". inserisci qui la descrizione dell'immagine


1

Controlla il tuo file host locale (C: \ Windows \ System32 \ drivers \ etc \ hosts per esempio). Nel mio caso l'avevo precedentemente utilizzato per puntare un URL a una casella di sviluppo e poi me ne sono dimenticato. Quando poi ho riutilizzato lo stesso URL ho continuato a ricevere Bad Request (nome host non valido) perché il traffico andava al server sbagliato.


1

Ho ricevuto questo errore quando ho provato a chiamare un servizio web utilizzando "localhost". L'ho risolto utilizzando invece l'IP effettivo (192.168 ...)


Vincitore. Questo era il mio problema su Windows Server 2003.
DreamTeK

0

Ho visto lo stesso errore dopo aver utilizzato msdeploy per copiare l'applicazione su un nuovo server. Si è scoperto che i collegamenti stavano ancora utilizzando l'indirizzo IP del server precedente. Quindi, ricontrolla l'indirizzo IP nei collegamenti IIS. (Sembra ovvio dopo il fatto, ma non mi è venuto in mente di controllarlo immediatamente).


0

Controlla l'URL esatto che stai fornendo. Ho visto questo errore quando ho perso il prefisso del percorso definito in ASP.NET, quindi non sapeva dove indirizzare la richiesta.


0

Assicurati che IIS stia ascoltando la tua porta.

Nel mio caso questo era il problema. Quindi ho dovuto cambiare la mia porta con qualcos'altro come 8083 e ha risolto questo problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.