Я реализую службу (как отдых), которая получает метод 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 и текст, указывающий, что «необходимо указать значение кодировки».
Есть ли что-то не так с этим подходом?
Что делать, если клиент отправляет «Content-Type: text/plain; charset = ISO-8859-1' с корпусом 'UTF-8'? –
@ Luke Я думаю, что в этом случае вы должны использовать более защитный подход, чем мой. Возможно, изучение тела. Вы можете посмотреть [этот пост] (https://stackoverflow.com/questions/499010/java-how-to-determine-the-correct-charset-encoding-of-a-stream). –