Ungültige Anfrage - Ungültiger Hostname IIS7


83

Wenn ich versuche, meine Web-App auf Port 8080 zu starten, wird die folgende Fehlermeldung angezeigt

Ungültige Anfrage - Ungültiger Hostname
HTTP-Fehler 400. Der Hostname der Anfrage ist ungültig.

Ich weiß nicht einmal, wo ich anfangen soll, dieses Problem zu diagnostizieren

Antworten:


73

Haben Sie überprüft, ob die Bindung IIS ist? (inetmgr.exe) Es ist möglicherweise nicht registriert, um alle Hostnamen auf 8080 zu akzeptieren.

Wenn Sie es beispielsweise für mysite.com:8080 einrichten und unter localhost: 8080 aufrufen, erhält IIS die Anforderung, verfügt jedoch nicht über eine entsprechende Hostnamenbindung, sodass sie abgelehnt wird.

Darüber hinaus sollten Sie die IIS-Protokolle (C: \ inetpub \ logs \ wmsvc #) auf dem Server überprüfen und prüfen, ob Ihre Anforderung angezeigt wird. Dann wissen Sie, ob es sich um ein Problem auf Ihrem Client oder auf dem Server selbst handelt.


2
In meinem Fall musste ich die folgende Zeile in mein C einfügen: \ Windows \ System32 \ drivers \ etc \ hosts: "127.0.0.1 localhost"
chris

3
Wo konfigurieren Sie die Bindungen in IIS Manager?
Steve Smith

28

FWIW, wenn Sie nur Anfragen an einen beliebigen Hostnamen / eine beliebige IP-Adresse zulassen möchten, können Sie Ihre Bindung folgendermaßen festlegen:

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

Ich verwende diese Bindung, damit ich eine VM mit IE6 laden und dann meine Anwendung debuggen kann.


BEARBEITEN: Während Sie IIS Express zum Debuggen verwenden, ist der Standardspeicherort für die Konfigurationsdatei dieser Option

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

1
Sie können IIS Express auch mithilfe unserer kostenlosen VS-Erweiterung namens Conveyor mit Remote-Anforderungen arbeiten lassen (ohne Konfigurationsänderungen). Verwenden Sie Tools-> Extensions ..., um es zu erhalten, oder unter marketplace.visualstudio.com/…
Jim W sagt, Monica am

24

Auf dieser Seite von Microsoft wird beschrieben, wie Sie den Zugriff auf IIS Server Express von anderen Computern im lokalen Netzwerk aus einrichten.

In einer Nussschale:

1) an einer Eingabeaufforderung mit Administratorrechten:

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

2) Erstellen Sie in der Windows-Firewall mit erweiterter Sicherheit eine neue eingehende Regel für Port 8181, um externe Verbindungen zuzulassen

3) Fügen Sie in applicationhost.config im Knoten für Ihr Projekt Folgendes hinzu:

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

NICHT hinzufügen (wie in einer anderen Antwort vorgeschlagen):

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

Die obige Wildcard-Bindung hat meinen Zugriff von unterbrochen http://192.168.1.6:8181/


4
Außerdem müssen Sie Visual Studio mit Administratorrechten ausführen, da Sie sonst keine Bindung an IIS Express herstellen können. Wenn Sie mit dem Testen als Administrator fertig sind, müssen Sie die vorherigen Schritte umkehren, indem Sie den zusätzlichen Eintrag aus der Datei applicationhost.config entfernen und den Eintrag HTTP.sys entfernen, indem Sie: netsh http delete urlacl url=http://[your ip address]:8181/
SteveC

Wenn Ihr Computer auf eine andere Sprache eingestellt ist, sollte "Benutzer = Jeder" etwas anderes sein. Auf Französisch ist es user = "Tout le monde". Sehen Sie diese Antwort: stackoverflow.com/a/18856394/1317559
yster

23

Daher habe ich dieses Problem gelöst, indem ich im IIS-Manager auf meine Website gegangen bin und den Hostnamen in den Site-Bindungen von localhost in * geändert habe. Sofort mit der Arbeit begonnen.

Site-Bindungen in IIS


perfekt! Arbeitete für eine AWS-Instanz, die zum Ausführen einer Laravel-Site verwendet wurde
Vishnoo Rath

Dies hat mein Problem mit dem asp.net-Kern behoben, bei dem es auf localhost funktioniert hat, aber nicht auf der Remote-IP, danke!
Philip

In meinem Fall hat es funktioniert. Obwohl ich über 100 Websites gehostet hatte. beim ersten Mal falsch und konnte nicht in Firewall-Regeln oder anderen Lösungen finden.
Ketan Kotak

7

Für Visual Studio 2017und Visual Studio 2015werden die IIS ExpressEinstellungen im versteckten .vsVerzeichnis gespeichert und der Pfad ist ungefähr so. Das .vs\config\applicationhost.configHinzufügen einer Bindung wie unten funktioniert

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

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


2
Für jeden, der diese Methode verwendet, ist es nicht wichtig zu beachten, dass die richtige Vorlage für Bindungsinformationen lautet: IP-Adresse: Port: Host-Header. Die richtige Implementierung ist also: <bindings> <binding protocol="http" bindingInformation="localhost:8802:*" /> <binding protocol="http" bindingInformation="127.0.0.1:8802:*"/> </bindings>
Lionnel Afangbedjee

1
Der .vs-Ordner ist der Ordner in Ihrem Projektstammordner. Suchen Sie in dieser applicationhost.config nach dem Tag <site name = "[YourService / ProjectName]> und suchen Sie dort das Tag <bindings>.
NexX

4

Vergessen Sie nicht, sich auch an die IPv6-Adresse zu binden! Ich habe versucht, eine Site auf 127.0.0.1 mit localhost hinzuzufügen, und habe den Fehler "Fehlerhafte Anfrage / ungültiger Hostname" erhalten. Als ich localhost pingte, wurde es in :: 1 aufgelöst, da IPv6 aktiviert war, sodass ich nur die zusätzliche Bindung hinzufügen musste, um das Problem zu beheben.

IIS-Site-Bindungen


4

Dies ist mein Problem:
(Entschuldigung für mein schlechtes Englisch)
1.) Öffnen Sie cmd einen Administrator und führen Sie den Befehl aus (ohne eckige Klammern): netsh http add urlacl url = http: // [ip Adresse]: [Port] / user = jeder

2.) Dokumente / iisexpress / config / applicationhost.config und in Ihrem Stammprojektordner im Ordner (versteckter Ordner) .vs / config / applicationhost.config müssen Sie dem "site" -Tag eine Zeile hinzufügen:

3.) Öffnen Sie "Manager für Internetinformationsdienste (iis)" (falls nicht gefunden: Schreiben Sie in serch in der Tasckbar "Fensterfunktionen ein- oder ausschalten" und öffnen Sie das Resulet. Aktivieren Sie dann das Kontrollkästchen "Internetinformationsdienst" und installieren Sie es ) Klicken Sie im linken Bildschirm auf Computername -> Sites -> Standardwebsite und dann im rechten Bildschirm auf "Bindung". Klicken Sie auf die Schaltfläche Hinzufügen, um zu erfahren, was Sie benötigen, und drücken Sie OK.

4.) Öffnen Sie "Windows-Firewall mit erweiterter Sicherheit", drücken Sie im linken Bildschirm auf "Eingehende Regeln" und dann im rechten Bildschirm auf "Neue Regel ...". Überprüfen Sie den Port und klicken Sie auf Weiter, überprüfen Sie TCP und Ihren Port und drücken Sie auf Weiter. Verbindung zulassen "und drücken Sie Weiter, aktivieren Sie das Kontrollkästchen Alle und klicken Sie auf Weiter, wirte Name und drücken Sie Fertig stellen.

getan.


3

Ich bin nicht sicher, ob dies Ihr Problem war, aber für jeden, der versucht, von seinem Computer aus auf seine Webanwendung zuzugreifen und dieses Problem hat:

Stellen Sie sicher, dass Sie eine Verbindung zu 127.0.0.1(akalocalhost ) und nicht zu Ihrer externen IP-Adresse herstellen.

Ihre URL sollte so etwas wie http://localhost:8181/oder http://127.0.0.1:8181und nicht http://YourExternalIPaddress:8181/ .


Zusätzliche Information:
Der Grund dafür ist, dass Ihre Firewall möglicherweise Ihre eigene Anforderung blockiert. Es kann eine Firewall auf Ihrem Betriebssystem sein und es kann (der übliche) Ihr Router sein.

Wenn Sie eine Verbindung zu Ihrer externen IP-Adresse herstellen, stellen Sie über das Internet eine Verbindung zu Ihnen her, als wären Sie ein Fremder (oder ein Hacker).
Wenn Sie jedoch eine Verbindung zu Ihrem lokalen Host herstellen, stellen Sie eine lokale Verbindung als Sie selbst her, und der Block wird offensichtlich nicht benötigt (und insgesamt vermieden).


Ich habe dieses Problem, wenn bei Verwendung von localhost funktioniert, aber bei Verwendung der lokalen IP-Adresse des Computers (nicht). Warum haben Sie ausdrücklich gesagt, dass Sie Ihre IP-Adresse nicht verwenden sollen - warum funktioniert das nicht -, möchte ich verstehen?
Code einzigartig

1
Es ist absurd trivial für einen "Hacker", den Hostnamen zu ändern, der für die Verbindung zu einer Website verwendet wird.
Arafangion

@Arafangion Ändern Sie es wo und gewinnen Sie was?
MasterMastic

@MasterMastic: Bearbeiten Sie beispielsweise unter Linux die Datei /etc/hosts.conf. Windows hat Äquivalent. Oder noch trivialer: Sagen Sie curl oder wget einfach, welcher Hostname gemeldet werden soll. Hier verlassen Sie sich anscheinend auf den "Hostnamen", um Anfragen aus dem Internet zu blockieren. Was der Hacker also gewinnt, ist offensichtlich alles, was er durch Umgehen Ihres offensichtlichen "Schutz" -Mechanismus gewinnen muss. IIS scheint immer noch an den Port gebunden zu sein. Die richtige Lösung besteht darin, sich überhaupt nicht an den extern zugänglichen Port zu binden.
Arafangion

@Arafangion Ja, aber das ist eine lokale Umleitung. Der Punkt hier ist nicht localhost, es ist das, worauf es sich bezieht ( 127.0.0.1). Ich sage nur, dass Sie sich damit verbinden und nicht mit Ihrer extern sichtbaren IP. Es gibt keine Abhängigkeit vom lokalen Host, er wird nur als Synonym verwendet. Ich werde meine Antwort bearbeiten, um dies klarer zu machen.
MasterMastic

2

Sie können das CMD-Tool Visual Studio 2005/2008/2010 verwenden. Führen Sie es als Administrator aus und schreiben Sie

aspnet_regiis -i

Endlich kann ich meine App erfolgreich ausführen.


2

Wenn Sie auf einem lokalen Server arbeiten oder keinen Domainnamen haben, löschen Sie das Feld "Hostname:". Geben Sie hier die Bildbeschreibung ein


1

Überprüfen Sie Ihre lokale Hosts-Datei (z. B. C: \ Windows \ System32 \ drivers \ etc \ hosts). In meinem Fall hatte ich dies zuvor verwendet, um eine URL auf eine Entwicklungsbox zu verweisen, und sie dann vergessen. Als ich dann dieselbe URL wiederverwendete, erhielt ich immer wieder eine fehlerhafte Anfrage (ungültiger Hostname), da der Datenverkehr auf den falschen Server geleitet wurde.


1

Ich habe diesen Fehler erhalten, als ich versucht habe, einen Webservice mit "localhost" aufzurufen. Ich habe es behoben, indem ich stattdessen die tatsächliche IP verwendet habe (192.168 ...)


Gewinner. Dies war mein Problem auf Windows Server 2003.
DreamTeK

0

Ich habe den gleichen Fehler gesehen, nachdem ich msdeploy verwendet habe, um die Anwendung auf einen neuen Server zu kopieren. Es stellte sich heraus, dass die Bindungen immer noch die IP-Adresse des vorherigen Servers verwendeten. Überprüfen Sie daher die IP-Adresse in den IIS-Bindungen. (Scheint nachträglich offensichtlich, ist mir aber nicht sofort in den Sinn gekommen, es zu überprüfen).


0

Überprüfen Sie die genaue URL, die Sie angeben. Ich habe diesen Fehler gesehen, als ich das in ASP.NET definierte Routenpräfix verpasst habe, sodass es nicht wusste, wohin die Anforderung weitergeleitet werden soll.


0

Stellen Sie sicher, dass IIS Ihren Port überwacht.

In meinem Fall war dies das Problem. Also musste ich meinen Port auf etwas anderes wie 8083 ändern und es löste dieses Problem.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.