Допустимо ли имя хоста начинаться с цифры?


45

Допустимо ли имя хоста начинаться с цифры? например8server

Из чтения RFC 1123 может показаться, что это действительное имя хоста. Однако мне не ясно, может ли имя хоста начинаться с цифры только при наличии суффикса, например8server.com

Происхождение этого вопроса заключается в том, что InternetDomainName.isValid("8server");в библиотеке Google Guava ( Javadoc ) отклоняется ввод. Я также опубликовал конкретный вопрос в группе обсуждения гуавы .


2
В качестве своего рода доказательства на примере они существуют: 7dayshop.com
Holloway

3
Как насчет однозначного имени хоста? 88888888.cn
小 太郎

7
4chan.comявляется допустимым (и общеизвестным) именем хоста, начинающимся с цифры.
IQAndreas

3
Как вы можете забыть 9gag.com ? : D
ADTC

8
@IQAndreas, 4chan.org - достаточно веская причина, чтобы сделать его недействительным . (Просто шучу анонимно, не делай мне больно.)
Пол Руан

Ответы:


33

RFC 1123 ослабляет ограничение RFC 952, которое определяет устаревший протокол сервера имени хоста (описанный в RFC 953 ), замененный DNS. Таким образом, полное числовое имя хоста будет действительным для этих RFC.

Сам RFC 1123 обсуждает последствия, когда речь заходит об IP по сравнению с анализом имени хоста:

Если десятичное число с точками можно вводить без таких идентифицирующих разделителей, то необходимо выполнить полную синтаксическую проверку, поскольку сегмент имени домена хоста теперь может начинаться с цифры и может юридически быть полностью числовым (см. Раздел 6.1. 2.4). Однако действительное имя хоста никогда не может иметь десятичную форму с точками #. #. #. #, Так как по крайней мере метка компонента самого высокого уровня будет буквенной.

Однако в рекомендациях RFC 1178 было указано, как выбрать правильное имя хоста из-за проблем с реализацией. Многие из этих реализаций плохо распознают числовые имена хостов и пытаются проанализировать их, как если бы они были IP-адресами, пока они не содержат хотя бы один нечисловой символ независимо от местоположения.

Кроме того, вы обнаружите, что реализации не всегда соблюдают другие исходные ограничения RFC 952, позволяя, например, имени хоста заканчиваться знаком минус или точкой.

DNS сохранил эти оригинальные спецификации для имен хостов и добавил поддержку подчеркивания ( RFC 2782 ).

Обновление В соответствии с просьбой в комментариях пояснение к предложению: Однако действительное имя хоста никогда не может иметь точечно-десятичную форму #. #. #. #, Так как по крайней мере метка компонента самого высокого уровня будет буквенной . Это означает, что доменное имя верхнего уровня должно быть буквенным , поэтому полное имя хоста никогда не следует путать с IPv4-адресом. Эта идея была разъяснена RFC 3696 для DNS и заменена на нечисловую . Обратите внимание на небольшую разницу.


7
Имейте в виду, что реализации, которые не могли обрабатывать цифры в именах, относящихся к 1980-м годам; RFC 1178 был опубликован в 1990 году все , что не может справиться с этим в настоящее время является просто глючит.
Майкл Хэмптон

@MichaelHampton Вы будете удивлены тем, как много реализаций до сих пор не соблюдают эти RFC. Начиная с вашего хоста Linux, обработка файлов.
Ксавье Лукас

11
Ха-ха, нет, я бы не стал. Едва ли проходит день, когда у меня нет причин бить какого-то разработчика по голове RFC.
Майкл Хэмптон

2
@ Майкл Хэмптон: Ты не поверишь дерьму, которое я иногда вижу от разработчиков. Пару недель назад у меня был один, который сделал веб-страницу конфигурации сети в ip-камере, чтобы пользователь мог ввести имя хоста для камеры. Он не делал НИКАКИХ проверок при вводе данных в произвольном формате. Пользователь бета-теста вошел в «Комнату 1.10», и камера с радостью отправила его как идентификатор клиента DHCP. Я могу заверить вас, что DHCP-серверам Microsoft и DNS это не нравится. Хорошо, что я заметил, прежде чем это попало в производство. Я могу только вздрогнуть при мысли, что иногда доходит до клиента ...
Тонни

13

Первоначально имя хоста не могло начинаться с цифры или подчеркивания ( RFC 952 ), но новая спецификация RFC 1123, как вы упомянули, позволяет это.

Что касается вызова isValid (), в этом случае полное доменное имя должно быть передано в параметре: InternetDomainName.isValid("8server.com");


Должно ли полное доменное имя действительно передаваться методу isValid? После всего InternetDomainName.isValid("server");возвращается истина.
Mark

@ Марк хорошо, я обновил ответ соответственно
Селин Оссурд

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.