Имеет ли значение регистр имени хоста HTTP (верхний/нижний)?
Другими словами, имеет ли значение, использую ли я http://www.example.com / или http://wwW.exAmPLe.COm/ ?
В последнее время у меня возникли странные проблемы с именами хостов: у меня есть веб-сервер Apache2.2+PHP5.1.4, доступный для всех видов браузеров. В частности, у пользователей IE6 (особенно когда их строка UA загружена многочисленными БХО, пока нет шаблона), похоже, возникают проблемы с доступом к сайту (файлы cookie исчезают, JS отказывается загружаться) при входе через http://www.Example.com /, но не http://www.example.com/
Я проверил HTTP и DNS RFC, мои политики P3P, настройки файлов cookie и SOP; но нигде я не видел даже упоминания о том, что доменные имена чувствительны к регистру.
(Я знаю, что путь и строка запроса чувствительны к регистру (?x=foo
отличается от ?x=Foo
) и обрабатывают их соответствующим образом; я не выполняю синтаксический анализ/обработку доменного имени в своем коде)
Делаю ли я что-то не так или это просто какая-то ерунда с браузером и панелью инструментов, с которой я должен работать?
5 answers
Доменные имена не чувствительны к регистру; 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 для URL-адресов.
2.1. Основные части URL-адресов
Имена схем состоят из последовательности символов. Строчные буквы "a" --"z", цифры и символы плюс ("+"), точка (".") и дефис ("-") допускаются. Для устойчивости программы, интерпретирующие URL-адреса, должны рассматривать буквы верхнего регистра как эквивалент нижнего регистра в схеме имена (например, разрешить "HTTP", а также "http").