Помилковий запит - недійсне ім’я хосту IIS7


86

Коли я намагаюся запустити свою веб-програму через порт 8080, я отримую таку помилку


Помилковий запит - помилкова помилка HTTP-імені хосту 400. Недійсна назва хосту запиту.

Навіть не знаю, з чого почати діагностувати цю проблему

Відповіді:


74

Ви перевірили прив'язку IIS? (inetmgr.exe) Не може бути зареєстровано прийняття всіх імен хостів на 8080.

Наприклад, якщо ви встановили його для mysite.com:8080 і натиснули його на localhost: 8080, IIS отримає запит, але не матиме прив'язки імені хосту до відповідності, тому він відхиляє.

Крім цього, слід перевірити журнали IIS (C: \ inetpub \ logs \ wmsvc #) на сервері та перевірити, чи бачите ви ваш запит. Тоді ви дізнаєтесь, чи це проблема у вашого клієнта або на самому сервері.


2
У моєму випадку мені довелося додати такий рядок у моєму C: \ Windows \ System32 \ drivers \ etc \ hosts: "127.0.0.1 localhost"
chris

4
Де ви налаштовуєте прив’язки в диспетчері IIS?
Стів Сміт

30

FWIW, якщо ви хочете просто дозволити запити, спрямовані на будь-яке ім'я хоста / ip, ви можете встановити прив'язку так:

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

Я використовую це прив'язку, щоб я міг завантажити віртуальну машину з IE6, а потім налагодити свою програму.


EDIT: Під час використання IIS Express для налагодження місцем за замовчуванням для конфігураційного файлу цієї опції є

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

1
Ви також можете отримати IIS Express для роботи з віддаленими запитами, використовуючи наше безкоштовне розширення VS, яке називається Conveyor (не передбачає змін конфігурації). Використовуйте Інструменти-> Розширення ..., щоб отримати його, або на marketplace.visualstudio.com/…
Джим В каже, відновити Моніку

25

Ця сторінка від Microsoft описує, як налаштувати доступ до IIS Server Express з інших комп’ютерів у локальній мережі.

Коротко:

1) з командного рядка з правами адміністратора:

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

2) У брандмауері Windows із розширеною безпекою створіть нове правило вхідного сигналу для порту 8181, щоб дозволити зовнішні підключення

3) У applicationhost.config у вузол для вашого проекту додайте:

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

НЕ додайте (як було запропоновано в іншій відповіді):

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

Вищезазначений підстановочний знак призупинив мій доступ до http://192.168.1.6:8181/


4
Крім того, ви повинні запустити Visual Studio з правами адміністратора, інакше ви не зможете прив’язатись до IIS Express. Закінчивши тестування як адміністратор, вам потрібно буде змінити попередні кроки, видаливши зайвий запис із файлу applicationhost.config та видаливши запис HTTP.sys, використовуючи: netsh http delete urlacl url=http://[your ip address]:8181/
SteveC

1
Якщо на вашому комп’ютері встановлено іншу мову, тоді "користувач = всі" має бути чимось іншим. По-французьки це user = "Tout le monde". Дивіться цей відповідь: stackoverflow.com/a/18856394/1317559
Yster

24

Отже, я вирішив це, перейшовши на свій веб-сайт у диспетчері IIS і змінивши ім’я хосту в прив’язках сайтів з localhost на *. Почав працювати негайно.

Прив’язки сайтів у IIS


ідеально! Працював для екземпляра AWS, який використовувався для запуску сайту Laravel
Vishnoo Rath

Це виправило мою проблему з ядром asp.net, де він працював на localhost, але не на віддаленому ip, дякую!
Філіп

У моєму випадку це спрацювало. Хоча у мене було більше 100 сайтів. вперше помилився і не зміг знайти правила брандмауера або будь-які інші рішення.
Кетан Котак

9

Для Visual Studio 2017і Visual Studio 2015, IIS Expressнастройки зберігаються в прихованій .vsдиректорії і шлях що - щось на зразок цього .vs\config\applicationhost.config, додати зв'язування як нижче буде працювати

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

Синтаксис: https://docs.microsoft.com/en-us/dotnet/api/microsoft.web.administration.binding.bindinginformation?view=iis-dotnet


2
Для всіх, хто використовує цей метод, не важливо зауважувати, що правильним шаблоном інформації про прив’язку є: ip-адреса: порт: заголовок хосту. Тож правильна реалізація: <bindings> <binding protocol="http" bindingInformation="localhost:8802:*" /> <binding protocol="http" bindingInformation="127.0.0.1:8802:*"/> </bindings>
Lionnel Afangbedjee

1
Папка .vs - це папка в кореневій папці вашого проекту. У цьому applicationhost.config знайдіть тег <site name = "[YourService / ProjectName]> і знайдіть там тег <bindings>.
NexX

4

Не забудьте також прив'язати до адреси IPv6! Я намагався додати сайт на 127.0.0.1 за допомогою localhost і отримав помилку з помилковим запитом / недійсним іменем хосту. Коли я пінгував localhost, він вирішив :: :: 1, оскільки IPv6 був увімкнений, тому мені просто довелося додати додаткове прив'язування, щоб виправити проблему.

Прив’язки сайтів IIS


4

Це вирішило мою проблему (вибачте за мою погану англійську):

  1. відкрити cmd як адміністратор і запустити команду (без квадратних дужок):
    netsh http add urlacl url=http://[ip adress]:[port]/ user=everyone

  2. у documents/iisexpress/config/applicationhost.configі в кореневій папці проекту у (прихованій) папці: .vs/config/applicationhost.configвам потрібно додати рядок до тегу "сайт":
    <binding protocol="http" bindingInformation="*:8080:192.xxx.xxx.xxx" />

  3. відкрийте "Менеджер інформаційних служб Інтернету (iis)"
    (щоб знайти його: у пошуку на панелі завдань напишіть "Увімкнути або вимкнути функції вікна" і відкрийте результат, а потім поставте прапорець "Інформаційна служба Інтернету" та встановіть це):

    1. на лівому екрані клацніть: ім'я комп'ютера -> Сайти -> Веб-сайт за замовчуванням та
    2. потім клацніть на правому екрані "Прив'язка"
    3. натисніть кнопку Додати
    4. напишіть те, що вам потрібно, і натисніть "ОК".
  4. відкрити "Брандмауер Windows із розширеною безпекою",

    1. на лівому екрані натисніть "Вхідні правила", а потім
    2. натисніть на правому екрані "Нове правило ..."
    3. перевірте порт і натисніть Далі,
    4. перевірте TCP і ваш порт і натисніть Далі,
    5. встановіть прапорець "Дозволити підключення" та натисніть Далі,
    6. поставте прапорець біля всіх і натисніть Далі,
    7. напишіть ім'я та натисніть Готово.
  5. зроблено.


3

Я не впевнений, що це була ваша проблема, але для тих, хто намагається отримати доступ до його веб-програми зі своєї машини і має цю проблему:

Переконайтеся, що ви підключаєтесь до 127.0.0.1(ака localhost), а не до зовнішньої IP-адреси.

Ваш URL повинен бути чимось - то на кшталт http://localhost:8181/або http://127.0.0.1:8181і НЕ http://YourExternalIPaddress:8181/ .


Додаткова інформація:
Причина, по якій це працює, полягає в тому, що ваш брандмауер може заблокувати ваш власний запит. Це може бути брандмауер у вашій ОС, а це може бути (звичайний) ваш маршрутизатор.

Коли ви підключаєтесь до своєї зовнішньої IP-адреси, ви підключаєтесь до вас з Інтернету, ніби ви чужий (або хакер).
Однак, коли ви підключаєтеся до свого локального хосту, ви підключаєтесь локально як самі, і блок, очевидно, не потрібен (і взагалі уникати).


У мене така проблема, коли при використанні localhost працює, але при використанні машин локальна IP-адреса (ні). Чому ви спеціально сказали не використовувати свою IP-адресу - чому це не працює - я хотів би зрозуміти?
Код однозначно

1
Абсурдно тривіально для "хакера" змінювати ім'я хосту, що використовується для підключення до веб-сайту.
Arafangion

@Arafangion Змінити його де і що отримати?
MasterMastic

@MasterMastic: Наприклад, у Linux відредагуйте файл /etc/hosts.conf. Windows має еквівалент. Або навіть більш тривіально, просто скажіть curl або wget, яке ім'я хосту повідомити. Тут ви, мабуть, покладаєтесь на "ім'я хосту", щоб блокувати запити з Інтернету, тож хакер, очевидно, отримує все, що їм потрібно отримати, минаючи ваш очевидний механізм "захисту". Здається, IIS все ще прив'язується до порту. Правильним виправленням є не прив'язка до порту, доступного зовні.
Арафангіон

@Arafangion Так, але це локальне переспрямування. Справа тут не в цьому localhost, це те, на що він посилається ( 127.0.0.1). Все, що я кажу, - це підключення до цього, а не до вашого видимого ззовні IP. Немає залежності від localhost, він просто використовується як синонім. Я відредагую свою відповідь, щоб зробити це зрозумілішим.
MasterMastic

2

Ви можете використовувати інструмент CMD Visual Studio 2005/2008/2010. Запустіть його як адміністратор і напишіть

aspnet_regiis -i

Нарешті я можу успішно запустити свій додаток.


2

Якщо ви працюєте на локальному сервері або у вас немає доменного імені, видаліть поле "Ім'я хоста:". введіть тут опис зображення


1

Перевірте файл локальних хостів (наприклад, C: \ Windows \ System32 \ drivers \ etc \ hosts). У моєму випадку я раніше використовував це, щоб вказати URL-адресу на поле розробника, а потім забув про це. Потім я повторно використовував ту саму URL-адресу, я постійно отримував неправильний запит (недійсне ім'я хосту), оскільки трафік надходив на неправильний сервер.


1

Я отримав цю помилку, коли намагався зателефонувати до веб-служби за допомогою "localhost". Я виправив це, використовуючи фактичний IP замість цього (192.168 ...)


Переможець. Це була моя проблема на сервері Windows 2003.
DreamTeK

0

Я побачив ту саму помилку після використання msdeploy для копіювання програми на новий сервер. Виявилося, що прив'язки все ще використовують IP-адресу попереднього сервера. Отже, перевірте IP-адресу в прив'язках IIS. (Здається фактом очевидним, але мені не відразу спало на думку перевірити це).


0

Ще раз перевірте точну URL-адресу, яку ви надаєте. Я побачив цю помилку, коли пропустив префікс маршруту, визначений у ASP.NET, тому він не знав, куди направити запит.


0

Переконайтеся, що IIS прослуховує ваш порт.

У моєму випадку це було питання. Тому мені довелося змінити свій порт на щось інше, як 8083, і це вирішило цю проблему.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.