字符编码 - 要求客户端在 http 内容类型标头字段中指定字符集是否有任何问题



我正在实现一个接收POST方法的服务(作为休息)。

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

我使用的是 jboss 5,其中接收请求的 servlet 遵循 rfc2068 的 HTTP 1.1 规范,该规范指出:

当发送方未提供显式字符集参数时,"文本"类型的媒体子类型在通过 HTTP 接收时定义为具有默认字符集值"ISO-8859-1"。

因此,当调用我的服务的客户端使用例如 UTF-8 并且没有指定字符集,并且 POST 的正文包含 US-ASCII 之外的字符时,Jboss servlet 假定为"ISO-8859-1"并执行"错误"的解码,在我的系统中我收到"损坏"字符。例如,我收到的不是字符串"día",而是"dÂa"。

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

这种方法有什么问题吗?

> RFC 2068 已经过时了两次,确实无关紧要。您需要查看 RFC 7231,它不再定义默认值。这意味着默认值由媒体类型的定义控制。

对于文本/纯文本,这意味着US-ASCII(据我所知),因此想要发送非ASCII字符的客户端确实需要指定字符集。

相关内容

  • 没有找到相关文章

最新更新