URL-адреса могут содержать пробел?
разрешено ли URI (в частности, URL HTTP) содержать один или несколько символов пробела? Если URL-адрес должны закодироваться, is +
просто обычно соблюдаемая конвенция или законная альтернатива?
в частности, может ли кто-то указать на RFC, который указывает, что URL-адрес с пробелом должны быть закодирован?
мотивация на вопрос: во время бета-тестирования веб-сайта я отметил, что некоторые URL-адреса были построены с пробелами в их. Firefox, казалось, сделал правильную вещь, что меня удивило! Но я хотел иметь возможность указать разработчикам на RFC, чтобы они почувствовали необходимость исправить эти URL-адреса.
11 ответов
по состоянию на RFC 1738:
небезопасными:
символы могут быть небезопасными по ряду причин. пространство символ небезопасен, так как значительные пробелы могут исчезнуть и незначительные пробелы могут вводиться при транскрибировании URL-адресов или наберите или подвергните обработке программы обработки текстов. Персонажи
"<"
и">"
небезопасны, потому что они используются в качестве разделители вокруг URL-адресов в свободном тексте; кавычка ("""
) используется для разделите URL-адреса в некоторых системах. Персонаж"#"
- это небезопасно и должно всегда быть закодировано, потому что он используется во Всемирной паутине и в других системы для разделения URL из фрагмент или якоря следовать ему. Персонаж"%"
небезопасно, потому что он используется для кодировки других символов. Другие символы небезопасны, потому что известны шлюзы и другие транспортные агенты иногда изменять таких символа. Эти символы"{"
,"}"
,"|"
,"\"
,"^"
,"~"
,"["
,"]"
и"`"
.все небезопасные символы всегда должны быть закодированы в URL. Для например, символ
"#"
должен быть закодирован в URL-адресах даже в системы, которые обычно не имеют дело с фрагментом или якорем идентификаторы, так что если URL копируется в другую систему, которая использует ли их, изменять кодировку URL не потребуется.
почему он должен быть закодирован? Запрос выглядит так:
GET /url HTTP/1.1
(Ignoring headers)
есть 3 поля, разделенные пробелом. Если вы поместите пробел в свой url:
GET /url end_url HTTP/1.1
вы знаете, есть 4 поля, HTTP-сервер скажет вам, что это недопустимый запрос.
GET /url%20end_url HTTP/1.1
3 поля = > valid
Примечание: в строке запроса (после ?), пробел обычно кодируется как +
GET /url?var=foo+bar HTTP/1.1
, а не
GET /url?var=foo%20bar HTTP/1.1
короткий ответ: Нет, вы должны кодировать пространства; is правильно кодировать пробел как +
, но только в строке запроса; в пути вы должны использовать %20
.
URL-адреса определяются в RFC 3986, хотя другие RFCs также актуальны, но RFC 1738 устарела.
Они могут не иметь пробелов в них, наряду со многими другими символами. Поскольку эти запрещенные символы часто должны быть каким-то образом представлены, существует схема кодирования их в URL-адрес путем перевода их в шестнадцатеричный эквивалент ASCII с префиксом"%".
большинств языки программирования / платформы обеспечивают функции для кодирование и декодирование URL-адресов, хотя они могут неправильно соответствовать стандартам RFC. Например, Я знаю, что PHP этого не делает.
да, пространство обычно кодируется как "%20". Любые параметры, которые передают в URL должны быть закодированы, просто по соображениям безопасности.
может ли кто-нибудь указать на RFC, указывающий, что URL с пробелом должен быть закодирован?
URIs и, следовательно, URL-адреса определены в RFC 3986.
Если вы посмотрите на грамматику, определенную там, вы в конечном итоге заметите, что символ пробела никогда не может быть частью синтаксически законного URL-адреса, поэтому термин "URL с пробелом" является противоречием сам по себе.
URL может иметь символ пробела в них, и они будут отображаться как %20 в большинстве браузеров, но правила кодирования браузера меняются довольно часто, и мы не можем зависеть от того, как браузер будет отображать URL.
поэтому вместо этого вы можете заменить пробел в URL-адресе любым символом, который, по вашему мнению, сделает URL более читаемым и "красивым";)..... O поэтому предпочтительными являются общие символы "-","_","+" .... но это не компульсии, поэтому вы можете использовать любой из персонаж, который не должен быть в URL-адрес.
пожалуйста, избегайте %,&,},{,],[,/,>,
Как вы можете видеть, переполнение Stak само использует символ " - " в качестве замены пространства(%20).
есть Счастливый вопрос.
чтобы ответить на ваш вопрос. Я бы сказал, что приложения довольно часто заменяют пробелы в значениях, которые будут использоваться в URL-адресах. Причина этого обычно заключается в том, чтобы избежать более сложной для чтения процентной (URI) кодировки.
проверьте эту статью Википедии о процент-кодирование.
Urls должны не есть пробелы в них. Если вам нужно обратиться к тому, кто это делает, используйте его закодированное значение %20