当我用JSON主体提出帖子请求到我的休息服务时,我包括Content-type: application/json; charset=utf-8在消息标题中。没有此标头,我会从服务中获得错误。我也可以成功使用Content-type: application/json没有;charset=utf-8部分。

到底有什么作用charset=utf-8做 ?我知道它指定了字符编码,但是没有它的服务正常。这个编码是否限制了消息主体中可能存在的字符?

答案

标题仅表示内容的编码。不一定有可能从内容本身中推导内容的类型,即,您不一定只看内容并知道该如何处理。这就是HTTP标题的目的,他们告诉收件人他们(据称)处理了什么样的内容。

Content-type: application/json; charset=utf-8指定内容为JSON格式,编码在UTF-8字符编码中。指定编码的JSON有些多余,因为默认(仅?)编码JSON是UTF-8。因此,在这种情况下,接收服务器显然很高兴知道它正在与JSON打交道,并假设编码为UTF-8,这就是为什么它可以使用或不使用标头的原因。

这个编码是否限制了消息主体中可能存在的字符?

否。您可以将想要的任何东西发送到标题和身体中。但是,如果两者不匹配,则可能会遇到错误的结果。如果您在标题中指定内容为UTF-8编码,但实际上是在发送Latin1编码的内容,则接收器可能会产生垃圾数据,试图将Latin1编码的数据解释为UTF-8。当然,如果您指定您正在发送Latin1编码的数据,而实际上是这样做的,那么,是的,您仅限于可以在Latin1中编码的256个字符。

来自: stackoverflow.com