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.