Имеет ли значение регистр имени хоста HTTP (верхний/нижний)?
другими словами, не важно, я использую http://www.example.com/ или http://wwW.exAmPLe.COm/ ?
в последнее время у меня возникли странные проблемы с именами хостов: у меня есть Apache2.2 + PHP5.1.4 веб-сервер, доступ ко всем видам браузеров. Пользователи IE6, в частности (esp. когда их строка UA обременена многочисленными BHOs, еще нет шаблона), похоже, есть проблемы с доступом к сайту (куки исчезают, JS отказывается загружать) при входе через http://www.Example.com/, но не http://www.example.com/
Я проверил адресу http и DNS RFCs, my спецификация P3P политики параметры cookie и СОП; но нигде я не видел даже упоминания о доменных именах, чувствительных к регистру.
(Я знаю, что путь и строка запроса чувствительны к регистру (?x=foo
отличается от ?x=Foo
) и относиться к ним соответствующим образом; я не делаю разбора / обработки на доменное имя в моем коде)
Я делаю что-то неправильно или это просто какой-то браузер+панель инструментов дерьмо, с которым я должен работать?
5 ответов
доменные имена не регистр; Example.com
разрешится на тот же IP, что и eXaMpLe.CoM
. Если веб-сервер или браузер обрабатывает Host
заголовок с учетом регистра, это ошибка.
нет, это не имеет никакого значения.
Проверьте спецификацию URL RFC (http://www.ietf.org/rfc/rfc1738.txt). Из раздела 2.1:
для упругости, программы интерпретируя URL-адреса должны обрабатывать прописные буквы как эквивалент нижнего регистра в схеме имена
поскольку вы сформулировали свой вопрос как практический вопрос, а затем описали реальную проблему, ответ на самом деле: да.
другие ответы верны о том, что спецификация RFC говорит об именах хостов. Технически они должны быть нечувствительны к регистру. (Фактически, старое соглашение заключалось в том, что домен верхнего уровня (TLD) должен был быть во всех шапках... как "apple.COM").
однако, в реальном мире, зрелое программное обеспечение, такое как резольверы ОС и основные браузеры все правильно. Любой вторичный код может обрабатывать это неправильно и испортить вас.
согласно http://tools.ietf.org/html/rfc1035:
для всех частей DNS, которые являются частью официального протокола, все сравнения между строк символов (например, этикеток, доменных имен и т. д.) производится без учета регистра. В настоящее время это правило сила по всей системе домена без исключения.
затем он продолжает говорить, что это может измениться в будущем. Я думаю, можно с уверенностью предположить, что Домен COM не учитывает регистр, но другие домены, позволяющие использовать символы, отличные от ASCII, могут отличаться.
нет, нет чувствительности к регистру в отношении протокола описатель.
вы можете увидеть это в RFC для URLs.
2.1. Основные части URLs
названия схем состоят из последовательности письмена. Строчные буквы "a" -- "z", цифры и символы плюс ("+"), точка (".") и дефис ("- ") допускаются. Для упругости, программы, интерпретирующие URL-адреса, должны рассматривать заглавные буквы как эквивалентные нижний регистр в названиях схем (например,, разрешить "HTTP", а также"http").