Является ли URL разрешено содержать пробел?
Является ли URI (в частности, URL-адрес HTTP) содержать один или несколько символов пробела? Если URL-адрес должен быть закодирован, это +
просто обычное соглашение или законная альтернатива?
В частности, может ли кто-нибудь указать на RFC, который указывает, что URL с пробелом должен быть закодирован?
Мотивация для вопроса: Во время бета-тестирования веб-сайта я заметил, что некоторые URL-адреса были построены с пробелами в них. Firefox, похоже, поступил правильно, что меня удивило! Но я хотел бы указать разработчикам на RFC, чтобы они почувствовали необходимость исправления этих URL-адресов.
Ответы
Ответ 1
Согласно RFC 1738:
Опасный:
Персонажи могут быть небезопасными по ряду причин. Пространство символ небезопасен, поскольку значительные пробелы могут исчезнуть и незначительные пробелы могут быть введены, когда URL-адреса транскрибируются или набирать или подвергать обработке текстовых программ. Символы "<"
и ">"
являются небезопасными, поскольку они используются как разделители вокруг URL-адресов в свободном тексте; метка кавычки ("""
) используется для разграничить URL-адреса в некоторых системах. Символ "#"
небезопасен и должен всегда кодируется, потому что он используется в World Wide Web и в других системы для разграничения URL-адреса от идентификатора фрагмента/привязки, который может следуйте за ним. Символ "%"
небезопасен, потому что он используется для кодировки других персонажей. Другие символы небезопасны, потому что шлюзы и другие транспортные агенты, как известно, иногда изменяют таких персонажей. Эти символы "{"
, "}"
, "|"
, "\"
, "^"
, "~"
, "["
, "]"
и "`"
.
Все небезопасные символы всегда должны быть закодированы в URL. Для Например, символ "#"
должен быть закодирован в URL-адресах даже в системы, которые обычно не обрабатывают фрагмент или якорь идентификаторы, чтобы URL-адрес был скопирован в другую систему, которая использует их, нет необходимости изменять кодировку URL.
Ответ 2
Почему он должен быть закодирован? Запрос выглядит следующим образом:
GET /url HTTP/1.1
(Ignoring headers)
Есть три поля, разделенные пробелом. Если вы разместите пробел в своем URL-адресе:
GET /url end_url HTTP/1.1
У вас есть 4 поля, HTTP-сервер скажет вам, что это недопустимый запрос.
GET /url%20end_url HTTP/1.1
3 поля = > действительный
Примечание: в строке запроса (после?) пробел обычно кодируется как +
GET /url?var=foo+bar HTTP/1.1
а не
GET /url?var=foo%20bar HTTP/1.1
Ответ 3
Более короткий ответ: нет, вы должны закодировать пробел; правильно закодировать пробел как +
, но только в строке запроса; в пути вы должны использовать %20
.
Ответ 4
URL-адреса определены в RFC 3986, хотя другие RFC также актуальны, но RFC 1738 устарел.
Они могут не иметь пробелов в них, как и многие другие символы. Поскольку эти запрещенные символы часто должны быть представлены каким-то образом, существует схема их кодирования в URL, переводя их в их шестнадцатеричный эквивалент ASCII с префиксом "%".
Большинство языков программирования/платформ предоставляют функции для кодирования и декодирования URL-адресов, хотя они могут не соответствовать стандартам RFC. Например, я знаю, что PHP не делает.
Ответ 5
Да, пространство обычно кодируется до "%20".
Любые параметры, которые передаются URL, должны быть закодированы просто по соображениям безопасности.
Ответ 6
Может ли кто-нибудь указать на RFC, указывающий, что URL-адрес с пробелом должен быть закодирован?
URI и, следовательно, URL-адреса, определены в RFC 3986.
Если вы посмотрите на определенную там грамматику, вы, в конце концов, заметите, что символ пробела никогда не может быть частью синтаксически законного URL-адреса, поэтому термин "URL с пробелом" сам по себе является противоречием.
Ответ 7
Вот отличная страница, которая показывает вам, как все кодируется с использованием нескольких разных технологий.
http://andrewu.co.uk/tools/uriencoder/
Чтобы ответить на ваш вопрос. Я бы сказал, что довольно распространено приложение для замены пробелов в значениях, которые будут использоваться в URL-адресах. Причина этого заключается в том, чтобы избежать более сложной для чтения процента (URI) кодирования, которое происходит.
Ознакомьтесь с этой статьей wikipedia о Percent-encoding.
Ответ 8
URL-адрес может содержать пробел в них, и они будут отображаться как %20 в большинстве браузеров, но правила кодирования браузера меняются довольно часто, и мы не можем зависеть от того, как браузер отобразит URL-адрес.
Итак, вместо этого вы можете заменить символ пробела в URL любым символом, который, по вашему мнению, должен сделать URL более читаемым и "Pretty";)..... O такими главными символами, которые являются предпочтительными, являются "-", _ "," + ".... но это не компульсии, поэтому вы можете использовать любой символ, который не должен быть в URL уже.
Пожалуйста, избегайте%, &,}, {,], [,/, > , < в качестве замены пробела URL-адреса, поскольку они могут вывести ошибку на некоторых браузерах и платформах.
Как вы видите, сам переполнение Stak использует символ '-' как замену пространства ( %20).
У вас есть счастливый вопрос.
Ответ 9
В них не должно быть пробелов. Если вам нужно обратиться к тому, что делает, используйте его закодированное значение %20
Ответ 10
Firefox 3 отобразит %20
в URL-адресах как пробелы в адресной строке.
Ответ 11
Не видел этого. Возможно, вы можете настроить веб-сервер для принятия этого...