Подтвердить что ты не робот

Пространства в URL-адресах?

w3fools утверждает, что URL-адреса могут содержать пробелы: http://w3fools.com/#html_urlencode

Это правда? Как URL может содержать незашифрованное пространство?

У меня создается впечатление, что строка запроса запроса HTTP использует пробел как разделитель, отформатированный как {the method}{space}{the path}{space}{the protocol}:

GET /index.html http/1.1

Поэтому, как URL может содержать пробел? Если это возможно, то откуда взялась практика замены пространств с помощью +?

4b9b3361

Ответ 1

URL не должен содержать буквальное пространство. Он должен быть закодирован с помощью процентного кодирования или другой кодировки, которая использует символы, защищенные URL (например application/x-www-form-urlencoded, который использует + вместо %20 для пробелов).

Но зависит ли утверждение правильно или неправильно от интерпретации: Синтаксически URI не должен содержать буквальное пространство и должен быть закодирован; семантически, a %20 не является пространством (очевидно), но представляет собой пространство.

Ответ 2

Они действительно дураки. Если вы посмотрите на RFC 3986 Приложение A, вы увидите, что "пространство" просто не упоминается нигде в грамматике для определения URL-адреса. Поскольку он не упоминается нигде в грамматике, единственный способ кодирования пространства - это процентное кодирование (%20).

Фактически RFC даже утверждает, что пробелы являются разделителями и их следует игнорировать:

В некоторых случаях дополнительные пробелы (пробелы, разрывы строк, вкладки и т.д.) могут    должны быть добавлены, чтобы разбить длинный URI на линии. Пробелы    следует игнорировать при извлечении URI.

и

Для обеспечения надежности программное обеспечение, которое принимает пользовательский URI, должно пытаться    распознавать и лишать как разделители, так и встроенные пробелы.

Любопытно, что использование + в качестве кодирования пространства не упоминается в RFC, хотя оно зарезервировано как суб-метриметр. Я подозреваю, что его использование либо просто соглашение, либо распространяется на другой RFC (возможно, HTTP).

Ответ 4

Информация есть, я думаю, частично прав:

Это не так. URL может использовать пробелы. Ничто не определяет, что пространство заменяется знаком +.

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