“content-type: text/json”和“application/json”有什么确切的区别?

63
这两个HTTP头部字段的确切区别是什么?Content-type: text/json 和 Content-type: application/json 我随意使用它们,却从未在输出中发现任何差异。

可能是 https://dev59.com/Omkw5IYBdhLWcg3wwdUS 的重复问题。 - Obmerk Kronen
2个回答

65

application/json:json的官方MIME类型。

text/x-json:在application/json正式注册之前,json的实验性(非官方)MIME类型。


5
哦,请注意,“MIME类型”和“媒体类型”已经互换使用了20年。类Unix系统仍然几乎都有一个/etc/mime.types文件,并且请放心,这个文件不仅用于mailcap。 - codetaku
[需要引用] - schmijos

16
Content-Type:的定义中可以得知:
七种标准初始预定义的Content-Type中,其中两种为:
  • 文本:文字信息。主要的子类型“plain”表示纯文本(无格式)。除了支持指定字符集外,不需要特殊软件来获取文本的完整含义。子类型用于丰富文本形式,在应用软件中可能通过提升文本的外观来增强,但是获取内容的基本概念不需要依赖该软件。可能的子类型包括任何可读的文字处理器格式。这个文档中定义了一个非常简单和便携的子类型richtext。
  • 应用程序:其他类型的数据,通常是未解释的二进制数据或者将由基于邮件的应用程序处理的信息。主要的子类型“octet-stream”用于未解释的二进制数据,此时最简单的推荐操作是为用户提供将信息写入文件的选项。另外两个子类型“ODA”和“PostScript”被定义用于在正文中传输ODA和PostScript文档。"application"的其他预期使用包括电子表格、邮件调度系统的数据和用于“活动”(计算)电子邮件的编程语言。

(我加粗的部分)

换句话说:

  • text如果是可读的文本(JSON是可读的)
  • application如果是不可读的二进制数据(JSON不是不可读的)

理想情况下应该是text/json,但Douglas Crockford注册了application/json

使用这种媒体类型的应用程序:JSON已被用于在以下编程语言编写的应用程序之间交换数据:ActionScript、C、C#、Clojure、ColdFusion、Common Lisp、E、Erlang、Go、Java、JavaScript、Lua、Objective CAML、Perl、PHP、Python、Rebol、Ruby、Scala和Scheme。

那么为什么他将其注册为application而不是正确的text

最初它是 text/json。在他的2006年1月第一稿中。

5. IANA注意事项

JSON文本的MIME媒体类型是text/json。

而在他的第一次, 第二次, 和 第三次修订中,它仍然是 text/json

但是在他2006年2月的第四次修订中,他将其更改为application/json(有拼写错误):
引用: 6. IANA考虑事项 JSON文本的MIME媒体类型是application/json。 类型名称:text 子类型名称:json
到2006年7月被接受为完整的RFC时,所有关于text的拼写错误都已经消失了:
引用: 6. IANA考虑事项 JSON文本的MIME媒体类型是application/json。 类型名称:application 子类型名称:json
显然,从text/jsonapplication/json的更改原因是因为IANA更有可能分配一个application/*而不是text/*的任务。

3
我同意 text/json 是更合理和少有出其不意的选择。我在研究为什么 text/json 不是已注册的 MIME 类型时发现了这个答案,感谢您提供历史背景。 - Anthony Geoghegan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接