Может ли (доменное имя) поддомены иметь подчеркивание "" в нем?
могут ли поддомены (доменные имена) иметь подчеркивание _
в них?
7 ответов:
большинство ответов здесь ложные. Это совершенно законно иметь подчеркивание в доменном имени. Позвольте мне процитировать стандарт, RFC 2181, раздел 11, "синтаксис имени":
сам DNS накладывает только одно ограничение на определенные метки это может быть использовано для идентификации записей ресурсов. Тот самый ограничение относится к длине этикетки и полной имя. [...] Реализация протоколов DNS не должна размещать никаких ограничения на метки, которые могут быть использованы. В частности, DNS серверы не должны отказывать в обслуживании зоны, поскольку она содержит метки это может быть неприемлемо для некоторых DNS-клиентских программ.
см. также исходную спецификацию DNS,RFC 1034, раздел 3.5 "Предпочтительный синтаксис имени", но внимательно прочитайте его.
Домены с подчеркиванием очень распространены в дикой природе. Проверьте
_jabber._tcp.gmail.com
или_sip._udp.apnic.net
.другие упомянутые здесь RFC имеют дело с разные вещи. Оригинал вопрос был за доменные имена. Если вопрос для хоста имена (или для URL-адресов, которые включают имя хоста), то это другой, соответствующий стандарт RFC 1123 раздел 2.1 "хозяина Имена и цифры", который ограничивает хостов to буквы-цифры-дефис.
примечание по терминологии, в дополнение к ответу Бортцмейера
нужно четко понимать определения. Как используется здесь:
- доменное имя - это идентификатор ресурса в базе данных DNS
- label и часть доменного имени между точками
- хоста это специальный тип доменного имени, который идентифицирует интернет хозяева
The хоста подпадает под ограничения RFC 952 и небольшое расслабление RFC 1123
RFC 2181 дает понять, что есть разница между доменным именем и именем хоста:
...[тот факт, что] любая двоичная метка может иметь запись MX, не означает, что любое двоичное имя может использоваться в качестве основной части электронной почты адрес...
так подчеркивает в хоста нет-нет, подчеркивания в доменные имена - это-ок.
на практике вполне можно увидеть хоста С подчеркивания. Как то Принцип Робастности говорит:"Будьте консервативны в том, что вы посылаете, либеральны в том, что вы принимаете".
примечание по кодировке
в 21 веке, получается, что хоста а также доменные имена может быть интернациональными! Это означает обращение к кодировкам в случае метки, которые содержат символы, которые находятся за пределами допустимого набора.
в частности, он позволяет кодировать
_
на хоста (обновление 2017-07: это сомнительно, см. комментарии. Элемент_
по-прежнему не может использоваться в именах хостов. В самом деле, он даже не может быть использован в интернационализированных этикетках.)первый RFC для интернационализации был RFC 3490 от марта 2003 года, " интернационализация доменных имен в приложениях (IDNA)". Сегодня у нас есть:
- RFC 5890 "IDNA: определения и рамки документов"
- RFC 5891 "IDNA: протокол"
- RFC 5892 "кодовые точки Юникода и IDNA"
- RFC 5893 "Скрипты справа налево для IDNA"
- RFC 5894 "идна: Предыстория, объяснение и обоснование"
- RFC 5895 "отображение символов для IDNA 2008"
вы также можете проверить Запись В Википедии
RFC 5890 вводит термин LDH (Letter-Digit-Hypen) label на метки в хоста и говорит:
Это классическая форма меток, хотя и с некоторыми дополнительными ограничения, в именах хостов (RFC 952). Его синтаксис идентичен тому, что описано как" синтаксис предпочтительного имени " в разделе 3.5 RFC 1034 как изменено RFC 1123. Короче говоря, это строка, состоящая из букв ASCII, цифр и дефиса с дальнейшим ограничением, что дефис не может появиться в начале или конце строки. Как и все DNS-метки, его общая длина не должна превышать 63 октета.
возвращаясь к более простым временам,этот интернет-проект это раннее предложение для хоста интернационализации. Имена хостов с международными символами могут быть закодированы с использованием, например,'RACE' encoding.
автор предложения "RACE encoding" отмечает:
согласно RFC 1035, основные части должны быть нечувствительны к регистру, начинаться и заканчиваться буквой или цифрой и содержать только буквы, цифры и символ дефиса ("-"). Это, конечно, исключает любые интернационализированные персонажи, а также многие другие персонажи в репертуаре символов ASCII. Кроме того, части доменного имени должны быть 63 октета или короче длина.... Все после конвертированы названия деталей, которые содержат многоязычных символов начинается со строки "--БК". (...) Строку "БК" был выбран потому, что это крайне маловероятно существовать в частях хозяина прежде чем эта спецификация была произведена.
есть еще одна вещь, которую вам может понадобиться знать: если хост или часть поддомена url содержат подчеркивание, IE9 (не тестировали другие версии) не может писать куки.
Так что будьте осторожны. : -)
уточнение bortzmeyer и Дэвид Тонхофер, доменное имя и имя поддомена метки могут содержать ведущие подчеркивания, но нигде больше.
Как Дэвид Тонхофер написал, метки являются частями между периодами и должны следовать правилу LDH за исключением при указании меток служб и портов, чтобы отличить их от обычных меток. Затем они должны произойти в начале метки, которая должна быть " короткой Имена" от имя службы и номер порта в реестре, номер порта без ведущих 0s, или протокол (т. е. tcp, udp). Эти метки обслуживания дополнительно ограничены 15 символами.
- RFC2782 задает префикс поддомены записей службы с подчеркиванием.
- RFC6698 задает префикс номера портов с подчеркиванием в записях сертификата TLSA.
вопреки Давид Тонхофер's ответ, IDN не позволяет кодировать подчеркивание ('_'U+005F LOW LINE) или любой другой недопустимый символ ASCII.
С RFC5890
[..] два новых подмножества меток LDH создаются введение ИДНЫ. Это так называемые зарезервированные метки ЛДГ (Р-ЛДГ этикетки) и незарезервированных ЛДГ этикетки (НР-ЛДГ этикетки). Защищены ЛДГ метки, известные как" помеченные доменные имена " в некоторых других контекстах, имеют свойство, что они содержать "--" в третьем и четвертом персонажи но которые в противном случае соответствуют правилам метки LDH.
Punycode кодирует все кодовые точки ASCII как ASCII напрямую, включая подчеркивание. Полученный R-LDH не будет соответствовать правилам метки LDH. Например,
Σ_.com
будет закодировано какxn--_-zmb.com
что нарушает правила. Причин может быть гомологического кода, который выглядит как подчеркивание, могут быть закодированы юридически (возможно_' у+низкая линия FF3F полноширинный ), но эти виды кодовых точек будут классифицированы как запрещенные RFC5892 под 2.3 IgnorableProperties как Noncharacter_Code_Point.RACE (другая предложенная схема кодирования IDN) не была принята IETF в качестве стандарта и не должна использоваться.
я перешел по ссылке на RFC1034 и прочитал большую его часть и был удивлен, увидев это:
метки должны соответствовать правилам для имен узлов ARPANET. Они должны начинаться с буквы, заканчиваться буквой или цифрой и в качестве межкомнатных символов только буквы, цифры и дефис. Есть также некоторые ограничения по длине. Метки должны содержать не более 63 символов.
для уточнения, доменные имена состоят из меток, разделенных точками ".". Эта спецификация должна быть устаревшей, потому что в ней не упоминается использование подчеркиваний. Я могу понять путаницу, если кто-то спотыкается об эту спецификацию, не зная, что она устарела. Он устарел, не так ли?
я перешел по ссылке на RFC2181 и прочитал некоторые из них. Особенно там, где это относится к вопросу о том, что является авторитетным или каноническим именем и вопросом о том, что делает действительную метку DNS.
Как было опубликовано ранее, в нем говорится, что есть только ограничение длины подводя итог, он гласит:
(об именах и допустимых метках)
Они уже достаточно определены, однако спецификации, похоже, иногда игнорируются. Мы стремимся укрепить существующие спецификации.
вид оставляет мне интересно, если "длина только ограничение"является " адекватным". Мы собираемся начать видеть доменные имена типа @#$%!! скоро? Разве интернет недостаточно испорчен?
вот мои 2 цента из Java world:
из консоли Spark Scala, с Java 8:
scala> new java.net.URI("spark://spark_master").getHost res10: String = null scala> new java.net.URI("spark://spark-master").getHost res11: String = spark-master scala> new java.net.URI("spark://spark_master.google.fr").getHost res12: String = null scala> new java.net.URI("spark://spark.master.google.fr").getHost res13: String = spark.master.google.fr scala> new java.net.URI("spark://spark-master.google.fr:3434").getHost res14: String = spark-master.google.fr scala> new java.net.URI("spark://spark-master.goo_gle.fr:3434").getHost res15: String = null
Это определенно плохая идея ^^
нет, если вы хотите его решить в Интернете.
вы не можете иметь:http://my_subdomain.somedomainname.com недопустимо.
вы можете иметь:http://my-subdomain.somedomainname.com с дефисом.