Почему URL-адреса закодированы другими, чем указано в RFC3986 Spring и Apache

Ранее сегодня я задал этот вопрос о проблеме кодирования URL.

Я пытался закодировать параметры URL-запроса с помощью Spring UriComponentBuilder, затем я также попробовал UriBuilder Apache Commons. Оба кодируют знак плюс (+) в параметре запроса как %2B, но в соответствии со спецификацией RFC3986 (раздел 3.4) в параметрах запроса допускается знак плюс. Не допускаются только:

* (pchar / "/" / "?")

Так что это будет действительный URL

http://www.example.com?foo=bar+baz

Но обе библиотеки конвертируют +:

http://www.example.com?foo=bar%2Bbaz

Я никогда не слышал об этом раньше и предполагал, что + на самом деле является закодированным whitespace персонаж. Кроме того, в этом ответе говорится, что по крайней мере весна следует этой спецификации.

Кто прав? Спецификация или весна и апач? Или я просто что-то неправильно понимаю? Или за какой спецификацией следуют эти библиотеки?

Примечание

Я бы даже посчитал плохой практикой запрещать и не анализировать серверную часть закодированных символов, согласитесь?

0 ответов

Другие вопросы по тегам