URL-адреса могут содержать пробел?
разрешен ли URI (в частности, HTTP URL)содержать один или несколько пробелов? Если URL должны закодироваться, это +
просто общепринятая конвенция или законная альтернатива?
в частности, может ли кто-нибудь указать на 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 поля => действительный
Примечание: в строке запроса (после ?), пробел обычно кодируется как +
GET /url?var=foo+bar HTTP/1.1
, а не
GET /url?var=foo%20bar HTTP/1.1
короткий ответ: Нет, вы должны кодировать пространства; - это правильно кодировать пробел как
+
, но только в строке запроса; в пути вы должны использовать%20
.
URL-адреса определяются в RFC 3986, хотя другие RFC также актуальны, но RFC 1738 устарела.
Они могут не иметь пробелов в них, наряду со многими другими символами. Поскольку эти запрещенные символы часто должны быть каким-то образом представлены, существует схема для кодирования их в URL-адрес путем перевода их в шестнадцатеричный эквивалент ASCII с префиксом"%".
большинств языки программирования / платформы обеспечивают функции для кодирование и декодирование URL-адресов, хотя они могут не соответствовать стандартам RFC. Например, я знаю, что PHP этого не делает.
да, пространство обычно кодируется в "%20", хотя. Любые параметры, которые передаются в URL-адрес, должны быть закодированы, просто из соображений безопасности.
может ли кто-нибудь указать на RFC, указывающий, что URL-адрес с пробелом должен быть закодирован?
URI и, следовательно, URL-адреса определяются в RFC 3986.
Если вы посмотрите на грамматику, определенную там, вы в конечном итоге заметите, что символ пробела никогда не может быть частью синтаксически законного URL, поэтому термин "URL с пробелом" является противоречием сам по себе.
URL может иметь пробел в них, и они будут отображаться как %20 в большинстве браузеров, но правила кодирования браузера меняются довольно часто, и мы не можем зависеть от того, как браузер будет отображать URL.
поэтому вместо этого вы можете заменить пробел в URL-адресе любым символом, который, по вашему мнению, должен сделать URL более читаемым и "красивым";)..... O так что общие символы, которые являются предпочтительными являются "-","_","+" .... но это не компульсии, поэтому вы можете использовать любой из них символ, который уже не должен быть в URL-адресе.
пожалуйста, избегайте %,&,},{,],[,/,>,
Как вы можете видеть, переполнение Stak само использует символ ' - ' в качестве замены пространства(%20).
есть Счастливый вопрос.
чтобы ответить на ваш вопрос. Я бы сказал, что довольно часто приложения заменяют пробелы в значениях, которые будут использоваться в URL-адресах. Причина этого обычно заключается в том, чтобы избежать более трудного для чтения процента (URI) кодирования, которое происходит.
проверьте эту статью в Википедии о процент-кодирование.