Какие допустимые символы могут отображаться на хосте URL? - PullRequest
12 голосов
/ 15 июля 2009

Я пишу некоторый код, который обрабатывает URL-адреса, и я хочу убедиться, что я не пропускаю какой-то странный случай ...

Существуют ли допустимые символы для хоста, кроме: A-Z, 0-9, "-" и "."?

(Сюда относится все, что может быть в поддоменах и т. Д. По сути, все, что находится между: // и первым /)

Спасибо!

Ответы [ 6 ]

25 голосов
/ 15 июля 2009

См. Ограничения на допустимые имена хостов :

Имена хостов состоят из серии метки, соединенные точками, а также все доменные имена 1 . Например, "en.wikipedia.org" является именем хоста. каждый метка должна быть от 1 до 63 персонажи длинные, а весь имя хоста имеет максимум 255 символы.

RFC требуют, чтобы метки имени хоста может содержать только буквы ASCII «а» через 'z' (без учета регистра), цифры от 0 до 9, а дефис. Метки хоста не могут начинаться или заканчивается дефисом. Нет другого символы, знаки пунктуации или разрешены пробелы.

3 голосов
/ 16 июля 2009

Зависит от того, на каком уровне вы проводите проверку (до или после экранирования URL). Если вы попытаетесь проверить пользовательский ввод, он может выйти за пределы ASCII (с большими кусками Unicode).

См. http://en.wikipedia.org/wiki/Internationalized_domain_name

Если вы попытаетесь проверить после того, как все экранирование выполнено, и "punycode" будет завершен, в проверке нет смысла, поскольку он уже гарантированно содержит только действительные символы старого RFC.

3 голосов
/ 15 июля 2009

нет, это все, что разрешено

вот ссылка, если вы любите читать: http://www.ietf.org/rfc/rfc1034.txt

1 голос
/ 12 ноября 2012

Имейте в виду, что помимо правил имен хостов в Интернете, системы DNS могут создавать любые имена, которые им нравятся. DNS-серверы могут принимать и отвечать на 8-битные двоичные запросы: проводной протокол DNS не запрещает это.

Это означает, что для внутренних URL-адресов локальной сети у вас могут быть другие правила, такие как подчеркивание в имени хоста.

0 голосов
/ 29 мая 2019

Действительный URL-адрес хоста включает буквы, цифры, точку (.) И дефис (-) с максимальной длиной 255 с метками, разделенными точкой, с максимальной длиной 63. Дефис может разделять буквенно-цифровые последовательности, например one-two.net, но не может появляться в начале или в конце метки, разделенной точкой, например -one.two.com, one.two.com- или one-.two.com являются недействительными хостами.

См. https://tools.ietf.org/html/rfc1123#page-79 и предположения, часть 1 из https://tools.ietf.org/html/rfc952

Также это ссылка на онлайн-инструмент для регулярных выражений для проверки хоста URL, который работал с 28.05.2009 https://www.regextester.com/23

Также при проверке хоста, ссылающегося на https://tools.ietf.org/html/rfc1123#page-13, необходимо синтаксически проверить хост на наличие десятичного числа с точками, прежде чем искать его в DNS.

0 голосов
/ 29 июля 2015

Если вы хотите написать код парсинга URL, который полностью соответствует официальной спецификации W3C, см. Документ по адресу www.w3.org/TR/url-1/. См. Раздел 3 (Хосты) для получения конкретной информации о хостах в URL.

...