要求客户端在http内容类型头字段中指定字符集有什么问题吗?

时间:2016-07-06 01:46:24

标签: http character-encoding request http-headers content-type

我正在实现一个接收POST方法的服务(作为其余部分)。

我的系统中的编码是UTF-8。

我正在使用jboss 5,其中接收请求的servlet遵循rfc2068 HTTP 1.1 规范,其中声明:

  

如果发件人未提供明确的字符集参数,则“text”类型的媒体子类型定义为默认字符集值 ISO-8859-1 “通过HTTP接收时。

所以当调用我的服务的客户端使用例如UTF-8并且没有指定字符集,并且POST的主体包含US-ASCII之外的字符时,Jboss servlet假定“ ISO- 8859-1 “并进行”错误“解码,在我的系统中,我收到”破损“的字符。例如,我会收到“dÂa”而不是字符串“día”。

我发现“保护”我的系统的方法是要求客户在 内容类型 charset > 参数。如果未指定字符集,则我使用http 403和指示“必须指定字符集值”的文本进行响应。

这种方法有什么问题吗?

1 个答案:

答案 0 :(得分:2)

RFC 2068已被淘汰两次,实际上是无关紧要的。您需要查看RFC 7231,它不再定义默认值。这意味着默认值由媒体类型的定义决定。

对于text / plain,这意味着US-ASCII(据我记得),因此想要发送非ASCII字符的客户端确实需要指定字符集。