Пространства в 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 может содержать пробел? Если это возможно, то откуда взялась практика замены пространств с помощью +
?
Ответы
Ответ 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).
Ответ 3
Пространства просто заменяются на "%20" следующим образом:
http://www.example.com/my%20beautiful%20page
Ответ 4
Информация есть, я думаю, частично прав:
Это не так. URL может использовать пробелы. Ничто не определяет, что пространство заменяется знаком +.
Как вы отметили, URL-адрес НЕ может использовать пробелы. Запрос HTTP будет завинчен. Я не уверен, где определен +
, хотя %20
является стандартным.