URL-адреса могут содержать пробел?


разрешен ли URI (в частности, HTTP URL)содержать один или несколько пробелов? Если URL должны закодироваться, это + просто общепринятая конвенция или законная альтернатива?

в частности, может ли кто-нибудь указать на RFC, который указывает, что URL-адрес с пробелом должны быть закодирован?

мотивация на вопрос: во время бета-тестирования веб-сайта я отметил, что некоторые URL-адреса были построены с пробелами в их. Firefox показалось сделать правильную вещь, которая меня удивила! Но я хотел бы иметь возможность указать разработчикам на RFC, чтобы они почувствовали необходимость исправить эти URL-адреса.

11 111

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) кодирования, которое происходит.

проверьте эту статью в Википедии о процент-кодирование.

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

Firefox 3 отобразит %20s в URL-адресах в виде пробелов в адресной строке.

не видел. Возможно, вы можете настроить веб-сервер, чтобы принять это...