Как разрешить конечную точку в заголовках узлов в IIS - PullRequest
8 голосов
/ 23 июля 2010

Я использую сайт IIS 7.5, который обслуживает контент для http://www.foo.com/

Меня попросили правильно проложить маршрут http://www.foo.com./ (обратите внимание на конечную точку). Если вы перейдете на эту страницу сейчас, вы получите ошибку IIS:

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

Ошибка HTTP 400. Неверное имя хоста запроса.

Это происходит даже для http://www.microsoft.com. Я видел, как некоторые сайты успешно маршрутизируют конечные периоды (например, http://www.amazon.com./),, но похоже, что большинство из них использовали Apache, а не IIS.

Я добавил заголовок узла в IIS для www.foo.com. , что разрешено. Тем не менее, это не позволит вам запустить сайт. Он не запустится, и появится окно с сообщением:

Значение не попадает в ожидаемый диапазон.

Кто-нибудь знает, как обслуживать домены с конечными точками в IIS?

Ответы [ 5 ]

5 голосов
/ 10 августа 2010

Конечная точка является абсолютно допустимой частью имени хоста - просто она обычно невидима, потому что неявна в DNS.Если присутствует конечная точка, она называется «Полностью определенным» доменным именем (FQDN).

Обратите внимание, что в проводном DNS всегда имеет дело с FQDN.

§3.2.2 из RFC 3976 (определение синтаксиса URI) говорит следующее (мой акцент):

Хост, идентифицируемый зарегистрированным именем, представляет собой последовательность символов, обычно предназначенную для поискав локально определенном реестре хоста или имени службы, хотя специфичная для схемы семантика URI может потребовать, чтобы вместо нее использовался конкретный реестр (или таблица фиксированных имен).Наиболее распространенным механизмом регистрации имен является система доменных имен (DNS).Зарегистрированное имя, предназначенное для поиска в DNS, использует синтаксис, определенный в Разделе 3.5 [RFC1034] и Разделе 2.1 [RFC1123].Такое имя состоит из последовательности меток домена, разделенных символом «.», Каждая метка домена начинается и заканчивается буквенно-цифровым символом и, возможно, также содержит символы «-». За самой правой доменной меткой полного доменного имени в DNS может следовать одно «.»и должно быть, если необходимо различать полное доменное имя и какой-либо локальный домен.

Подать отчет об ошибке в MS.

2 голосов
/ 03 февраля 2012

Это фактически ошибка в IIS7 +, по-видимому, без обходных путей.Это влияет и на меня.Пожалуйста, проголосуйте за просьбу MS исправить это:

https://connect.microsoft.com/WindowsServerFeedback/feedback/details/648242/trailing-dot-in-fqdn-causing-bad-request-invalid-hostname

0 голосов
/ 24 июля 2013

Эта проблема обсуждается на форумах Microsoft здесь и рассматривается как изменение поведения между IIS 6 и 7.

Этот сайт здесь предоставляет обходной путь для переписывания URL на стороне IIS.

Изменение конфигурации, требуемое для различных веб-серверов, воспроизводится ниже на случай, если указанный выше сайт исчезнет.

Apache (.htaccess)
RewriteCond %{HTTP_HOST} !^domain\.zone$
RewriteRule ^(.*)$ http://domain.zone/$1 [L,R=301]

Nginx (nginx.conf)
if ($http_host != 'domain.zone') {
    return 301 http://domain.zone$request_uri;
}

IIS (web.config)
<httpRuntime relaxedUrlToFileSystemMapping="true"/>
<rule name="point" stopProcessing="true"> <match url="^(.*)\.$" />
    <action type="Redirect" url="{R:1}" redirectType="Temporary" /> 
</rule>
0 голосов
/ 15 ноября 2012

Браузер неисправен.Он не должен принимать конечную точку в части URL-адреса hostip (hostname).

В частности, для FF и других браузеров на основе mozilla:

Ошибка 124565 - DNS: URL: Использование полного доменного имени в "hostip"

С точки зрения дизайна, сетевая библиотека (necko) должна отвергать это, но docshell (удобная для пользователя часть), вероятно, должна перехватывать вводимую пользователем строкуи сделайте исправление (удалите «.» и очистите заголовок Host:).

Кстати, у Necko также есть проблема, когда он fqdn-lazy, он не придерживается "."в конце fqdn, когда он отправляет запрос распознавателю, что делает каждый fqdn обработанным логикой pqdn локального преобразователя.

0 голосов
/ 14 августа 2010

Я уверен, что где-то есть ошибка, но вопрос в том, что это за ошибка.

Я думаю, что ошибка в том, что IIS позволяет вам устанавливать заголовок узла с завершающим ".".Заголовок узла - это не то же самое, что полное доменное имя.Заголовок хоста должен соответствовать директиве Host в HTTP-запросе:

GET / HTTP/1.0
HOST: www.doilooklikeicare.com

Он, безусловно, действителен в URL-адресе, введенном в браузер, например: http://www.doilooklikeicare.com./default.aspx, так как это разрешено найтиГДЕ отправить запрос.

Попробуйте удалить конечную точку в заголовке хоста, и она должна работать нормально.Вы все еще сможете использовать его в URL.

Надеюсь, это поможет

Джонатан

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...