0

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

Кодировка в моей системе - UTF-8.

Я использую JBoss 5, в котором сервлет, который принимает запросы следует HTTP 1.1 спецификацию rfc2068 который гласит, что:

При отсутствии явного параметра кодировки не предусмотрен отправителем, средств массовой информации подтипы типа «текст» определены как значения по умолчанию для кодировки «ISO-8859-1» при их получении по протоколу HTTP.

так, когда клиент, который вызывает мою услугу, используя, например, UTF-8 и не определяет кодировку, а тело POST содержит символы за пределами US-ASCII, сервлет Jboss предполагает "ISO -8859-1 "и делает" неправильное "декодирование, и в моей системе я получаю" сломанные "символы. Например, вместо строки «día» я получаю «dAa».

подход я нашел для «защиты» моя система должна требовать от клиента, чтобы указать кодирокой в типа содержимого параметра. Если кодировка не указана, я отвечаю на http 403 и текст, указывающий, что «необходимо указать значение кодировки».

Есть ли что-то не так с этим подходом?

+0

Что делать, если клиент отправляет «Content-Type: text/plain; charset = ISO-8859-1' с корпусом 'UTF-8'? –

+0

@ Luke Я думаю, что в этом случае вы должны использовать более защитный подход, чем мой. Возможно, изучение тела. Вы можете посмотреть [этот пост] (https://stackoverflow.com/questions/499010/java-how-to-determine-the-correct-charset-encoding-of-a-stream). –

ответ

2

RFC 2068 был устаревшим дважды и на самом деле не имеет значения. Вам нужно посмотреть RFC 7231, который больше не определяет значение по умолчанию. Это означает, что значение по умолчанию определяется определением типа носителя.

Для текста/равнины это подразумевает US-ASCII (насколько я помню), поэтому клиентам, которые хотят отправлять символы, отличные от ASCII, действительно нужно указать кодировку.

+0

Да, вы правы, я взглянул на RFC 7231, о котором вы упомянули, и в разделе [rfc2046 раздел-4.1.2] (https://tools.ietf.org/html/rfc2046#section-4.1.2) указывает, что для text/plain "... Набор символов по умолчанию, который должен быть принят при отсутствии параметра charset, - US-ASCII." –

 Смежные вопросы

  • Нет связанных вопросов^_^