Неверный запрос - недопустимое имя хоста IIS7

86

Когда я пытаюсь запустить свое веб-приложение на порт 8080, я получаю следующую ошибку

Неверный запрос - недопустимое имя хоста.
Ошибка HTTP 400. Недействительное имя хоста запроса.

Я даже не знаю, с чего начать диагностику этой проблемы

Burnt1ce
источник

Ответы:

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»
Крис
4
Где вы настраиваете привязки в диспетчере IIS?
Стив Смит
30

FWIW, если вы хотите просто разрешить запросы, направленные на любое имя хоста / IP, вы можете установить привязку следующим образом:

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

Я использую эту привязку, чтобы загрузить виртуальную машину с IE6, а затем отладить свое приложение.


РЕДАКТИРОВАТЬ: при использовании 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 = every" должно быть что-то другое. По-французски это user = "Tout le monde". См. Этот ответ: stackoverflow.com/a/18856394/1317559
Истер,
24

Итак, я решил эту проблему, перейдя на свой сайт в диспетчере IIS и изменив имя хоста в привязках сайта с localhost на *. Приступил к работе сразу.

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

СИНГУЛЯРНОСТЬ
источник
идеальный! Работал для экземпляра AWS, используемого для запуска сайта Laravel
Вишну Рат
Это устранило мою проблему с ядром 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

imgen
источник
2
Для тех, кто использует этот метод, не важно, что правильный шаблон информации привязки: ip-адрес: порт: заголовок хоста. Итак, правильная реализация: <bindings> <binding protocol="http" bindingInformation="localhost:8802:*" /> <binding protocol="http" bindingInformation="127.0.0.1:8802:*"/> </bindings>
Lionnel Afangbedjee 01
1
Папка .vs - это папка в корневой папке вашего проекта. В этом applicationhost.config найдите тег <site name = "[YourService / ProjectName]> и найдите там тег <bindings>.
NexX,
4

Не забудьте также привязать к IPv6-адресу! Я пытался добавить сайт на 127.0.0.1, используя localhost, и получил ошибку неверного запроса / недопустимого имени хоста. Когда я pinged 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вам нужно добавить строку в тег «site»:
    <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 Поменять где и что получить?
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, я продолжал получать Bad Request (Invalid Hostname), потому что трафик шел на неправильный сервер.

грабитель
источник
1

Я получил эту ошибку, когда попытался вызвать веб-сервис с помощью localhost. Я исправил это, используя вместо этого фактический IP (192.168 ...)

Cosmin
источник
Победитель. Это была моя проблема на сервере Windows 2003.
DreamTeK
0

Я увидел ту же ошибку после использования msdeploy для копирования приложения на новый сервер. Оказалось, что привязки по-прежнему использовали IP-адрес с предыдущего сервера. Итак, дважды проверьте IP-адрес в привязках IIS. (Кажется очевидным постфактум, но мне не сразу пришло в голову проверить это).

dan9298
источник
0

Дважды проверьте точный URL, который вы предоставляете. Я увидел эту ошибку, когда пропустил префикс маршрута, определенный в ASP.NET, поэтому он не знал, куда направить запрос.

Таран
источник
0

Убедитесь, что IIS прослушивает ваш порт.

В моем случае это была проблема. Поэтому мне пришлось изменить свой порт на что-то еще, например, 8083, и это решило эту проблему.

Дуди
источник