Złe żądanie - nieprawidłowa nazwa hosta IIS7


86

Kiedy próbuję uruchomić moją aplikację internetową na porcie 8080, pojawia się następujący błąd

Złe żądanie - nieprawidłowa
nazwa hosta Błąd HTTP 400. Żądana nazwa hosta jest nieprawidłowa.

Nie wiem nawet, od czego zacząć diagnozowanie tego problemu

Odpowiedzi:


74

Czy sprawdziłeś, że powiązanie to IIS? (inetmgr.exe) Może nie być zarejestrowany do akceptowania wszystkich nazw hostów na 8080.

Na przykład, jeśli ustawisz go dla mysite.com:8080 i trafisz na localhost: 8080, IIS otrzyma żądanie, ale nie będzie miało powiązania nazwy hosta, więc odrzuca.

Poza tym powinieneś sprawdzić dzienniki IIS (C: \ inetpub \ logs \ wmsvc #) na serwerze i zobaczyć, czy widzisz swoje żądanie. Wtedy będziesz wiedział, czy jest to problem na twoim kliencie, czy na samym serwerze.


2
W moim przypadku musiałem dodać następujący wiersz w moim C: \ Windows \ System32 \ drivers \ etc \ hosts: „127.0.0.1 localhost”
chris

4
Gdzie konfigurujesz powiązania w Menedżerze usług IIS?
Steve Smith

30

FWIW, jeśli chcesz po prostu zezwolić na żądania kierowane do dowolnej nazwy hosta / adresu IP, możesz ustawić swoje powiązanie w następujący sposób:

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

Używam tego powiązania, aby móc załadować maszynę wirtualną za pomocą IE6, a następnie debugować moją aplikację.


EDYCJA: Podczas korzystania z usług IIS Express do debugowania domyślną lokalizacją pliku konfiguracyjnego tej opcji jest

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

1
Możesz również sprawić, by IIS Express działało ze zdalnymi żądaniami za pomocą naszego bezpłatnego rozszerzenia VS o nazwie Conveyor (nie wymaga żadnych zmian konfiguracyjnych). Użyj Narzędzia-> Rozszerzenia ... aby to zdobyć, lub na marketplace.visualstudio.com/ ...
Jim W mówi, że przywróć Monikę

25

Na tej stronie firmy Microsoft opisano, jak skonfigurować dostęp do IIS Server Express z innych komputerów w sieci lokalnej.

W skrócie:

1) z wiersza poleceń z uprawnieniami administratora:

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

2) W Zaporze systemu Windows z zabezpieczeniami zaawansowanymi utwórz nową regułę ruchu przychodzącego dla portu 8181, aby zezwolić na połączenia zewnętrzne

3) W pliku applicationhost.config w węźle projektu dodaj:

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

NIE dodawaj (jak zasugerowano w innej odpowiedzi):

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

Powyższe powiązanie z symbolem wieloznacznym zepsuło mi dostęp http://192.168.1.6:8181/


4
Ponadto musisz uruchomić program Visual Studio z uprawnieniami administratora, w przeciwnym razie nie będzie można powiązać z usługami IIS Express. Po zakończeniu testowania jako administrator będziesz musiał cofnąć poprzednie kroki, usuwając dodatkowy wpis z pliku applicationhost.config i usuwając wpis HTTP.sys za pomocą: netsh http delete urlacl url=http://[your ip address]:8181/
SteveC

1
Jeśli twój komputer jest ustawiony na inny język, wtedy „user = każdy” powinno być czymś innym. W języku francuskim to user = "Tout le monde". Zobacz tę odpowiedź: stackoverflow.com/a/18856394/1317559
Yster

24

Tak więc rozwiązałem ten problem, przechodząc do mojej witryny sieci Web w Menedżerze usług IIS i zmieniając nazwę hosta w powiązaniach witryn z localhost na *. Rozpoczął pracę natychmiast.

Powiązania witryny w usługach IIS


idealny! Pracował dla instancji AWS używanej do uruchamiania witryny Laravel
Vishnoo Rath

To rozwiązało mój problem z rdzeniem asp.net, gdzie działał na hoście lokalnym, ale nie na zdalnym adresie IP, dzięki!
Philip

W moim przypadku zadziałało. Chociaż hostowałem ponad 100 witryn. pomylił się za pierwszym razem i nie był w stanie znaleźć w regułach zapory ani żadnych innych rozwiązaniach.
Ketan Kotak

9

Dla Visual Studio 2017i Visual Studio 2015, IIS Expressustawienia są przechowywane w ukrytym .vskatalogu i ścieżka jest coś takiego .vs\config\applicationhost.config, jak poniżej dodać wiążące będą prace

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

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


2
Dla każdego używającego tej metody nie jest ważne, aby pamiętać, że prawidłowy szablon informacji o powiązaniu to: adres IP: port: nagłówek hosta. Tak więc prawidłowa implementacja to: <bindings> <binding protocol="http" bindingInformation="localhost:8802:*" /> <binding protocol="http" bindingInformation="127.0.0.1:8802:*"/> </bindings>
Lionnel Afangbedjee

1
Folder .vs to folder w folderze głównym projektu. W tym applicationhost.config poszukaj tagu <site name = "[YourService / ProjectName]> i znajdź tam tag <bindings>.
NexX

4

Nie zapomnij również o powiązaniu z adresem IPv6! Próbowałem dodać witrynę na 127.0.0.1 przy użyciu hosta lokalnego i otrzymałem błędne żądanie / nieprawidłową nazwę hosta. Kiedy pingowałem localhost, problem rozwiązał się na :: 1, ponieważ IPv6 był włączony, więc musiałem tylko dodać dodatkowe powiązanie, aby naprawić problem.

Powiązania witryny usług IIS


4

To rozwiązało mój problem (przepraszam za mój zły angielski):

  1. otwórz cmd jako administrator i uruchom polecenie (bez nawiasów kwadratowych):
    netsh http add urlacl url=http://[ip adress]:[port]/ user=everyone

  2. w documents/iisexpress/config/applicationhost.configi w głównym folderze projektu w (ukrytym) folderze: .vs/config/applicationhost.configmusisz dodać wiersz do tagu „witryna”:
    <binding protocol="http" bindingInformation="*:8080:192.xxx.xxx.xxx" />

  3. otwórz „menedżera internetowych usług informacyjnych (iis)”
    (aby go znaleźć: w wyszukiwarce na pasku zadań wpisz „Włącz lub wyłącz funkcje okna” i otwórz wynik, a następnie zaznacz pole wyboru „usługa informacji internetowej” i zainstaluj ją):

    1. w lewym ekranie kliknij: nazwa-komputera -> Witryny -> Domyślna witryna internetowa i
    2. następnie kliknij na prawym ekranie „Wiązanie”
    3. kliknij przycisk Dodaj
    4. napisz, czego potrzebujesz i naciśnij „OK”.
  4. otwórz "Zapora systemu Windows z zabezpieczeniami zaawansowanymi",

    1. na lewym ekranie naciśnij „Reguły przychodzące”, a następnie
    2. naciśnij na prawym ekranie „Nowa reguła ...”
    3. sprawdź port i naciśnij Dalej,
    4. sprawdź TCP i swój port i naciśnij Dalej,
    5. zaznacz „Zezwól na połączenie” i naciśnij Dalej,
    6. zaznacz wszystkie pola wyboru i naciśnij Dalej,
    7. wpisz nazwę i naciśnij Zakończ.
  5. Gotowe.


3

Nie jestem pewien, czy to był twój problem, ale dla każdego, kto próbuje uzyskać dostęp do swojej aplikacji internetowej ze swojego komputera i ma ten problem:

Upewnij się, że łączysz się z 127.0.0.1(inaczej localhost), a nie z zewnętrznym adresem IP.

Twój adres URL powinien być coś podobnego http://localhost:8181/albo http://127.0.0.1:8181i nie http://YourExternalIPaddress:8181/ .


Dodatkowe informacje:
Powodem tego jest to, że Twoja zapora sieciowa może blokować Twoje własne żądanie. Może to być zapora sieciowa w twoim systemie operacyjnym i może to być (zwykle) twój router.

Kiedy łączysz się ze swoim zewnętrznym adresem IP, łączysz się z Tobą przez Internet, tak jakbyś był nieznajomym (lub hakerem).
Jednak kiedy łączysz się ze swoim lokalnym hostem, łączysz się lokalnie jako Ty i blok oczywiście nie jest potrzebny (i całkowicie go unikasz).


Mam ten problem, w którym podczas korzystania z localhost działa, ale podczas korzystania z lokalnego adresu IP maszyny (nie). Dlaczego specjalnie powiedziałeś, aby nie używać swojego adresu IP - dlaczego to nie działa - chciałbym to zrozumieć?
Kod wyjątkowy

1
Zmiana nazwy hosta używanej do łączenia się z witryną jest absurdalnie trywialna dla „hakera”.
Arafangion,

@Arafangion Zmień to gdzie i zyskaj co?
MasterMastic,

@MasterMastic: Np. W systemie Linux edytuj plik /etc/hosts.conf. Windows ma odpowiednik. Lub jeszcze prościej, po prostu powiedz curl lub wget, którą nazwę hosta zgłosić. W tym przypadku najwyraźniej polegasz na „nazwie hosta”, aby blokować żądania z Internetu, więc haker oczywiście zyskuje wszystko, czego potrzebuje, omijając Twój pozorny mechanizm „ochrony”. Wydaje się, że IIS nadal łączy się z portem. Prawidłową poprawką jest przede wszystkim nie wiązanie się z portem dostępnym z zewnątrz.
Arafangion

@Arafangion Tak, ale to jest lokalne przekierowanie. Nie chodzi o to localhost, że to się odnosi do ( 127.0.0.1). Mówię tylko, żeby połączyć się z tym, a nie z zewnętrznym widocznym adresem IP. Nie ma polegania na hoście lokalnym, jest on używany tylko jako synonim. Zmienię odpowiedź, aby była jaśniejsza.
MasterMastic

2

Można użyć narzędzia CMD programu Visual Studio 2005/2008/2010. Uruchom go jako administrator i napisz

aspnet_regiis -i

Nareszcie mogę pomyślnie uruchomić moją aplikację.



1

Sprawdź lokalny plik hostów (na przykład C: \ Windows \ System32 \ drivers \ etc \ hosts). W moim przypadku wcześniej użyłem tego do wskazania adresu URL do skrzynki deweloperskiej, a następnie zapomniałem o tym. Kiedy ponownie użyłem tego samego adresu URL, otrzymywałem złe żądanie (nieprawidłowa nazwa hosta), ponieważ ruch kierował się na niewłaściwy serwer.


1

Wystąpił ten błąd, gdy próbowałem wywołać usługę sieciową przy użyciu „localhost”. Naprawiłem to, używając zamiast tego rzeczywistego adresu IP (192.168 ...)


Zwycięzca. To był mój problem na serwerze Windows 2003.
DreamTeK

0

Widziałem ten sam błąd po użyciu msdeploy do skopiowania aplikacji na nowy serwer. Okazało się, że powiązania nadal korzystały z adresu IP z poprzedniego serwera. Dlatego sprawdź dokładnie adres IP w powiązaniach usług IIS. (Po fakcie wydaje się oczywiste, ale nie przyszło mi od razu do głowy, żeby to sprawdzić).


0

Dokładnie sprawdź dokładny adres URL, który podajesz. Widziałem ten błąd, gdy przegapiłem prefiks trasy zdefiniowany w ASP.NET, więc nie wiedziałem, gdzie skierować żądanie.


0

Upewnij się, że usługi IIS nasłuchują Twojego portu.

W moim przypadku to był problem. Musiałem więc zmienić port na inny, taki jak 8083 i rozwiązało to problem.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.