正确的JSON内容类型是什么?

json http-headers content-type 阿菲 | 2020-02-02 19:35:06


我已经在JSON上混了一段时间了,只是把它作为文本推出,它并没有伤害任何人(据我所知),但我想开始做正确的事情。
我看到了这么多关于JSON内容类型的所谓“标准”:
application/json
application/x-javascript
text/javascript
text/x-javascript
text/x-json

但是哪一个是正确的,还是最好的?我发现它们之间存在不同的安全和浏览器支持问题。
我知道有一个类似的问题,如果REST API返回JSON,那么MIME类型是什么?,但我想要一个稍微有针对性的答案。


本站提供【Linux疑难问题解决】50元起 ,【爬虫开发】200元起。欢迎咨询QQ:376667689 点击这里给我发消息



30 回答


10108


对于JSON文本:
application/json

JSON文本的MIME媒体类型为
application/json
。默认编码是UTF-8。(来源:RFC 4627)。
对于带有回调的JSONP(可运行的javascript):
application/javascript

以下是评论中提到的一些相关博客文章。
为什么不应该对JSON使用
text/html
的原因
Internet Explorer有时会遇到
application/json

一个相当完整的列表mime type以及如何使用它们
IANA的官方mime类型列表中@gnrfan的答案如下

2020-02-02 19:35:18
蓝兰鹿

1595


IANA已将JSON的正式MIME类型注册为
application/json

当被问及为什么不
text/json
时,Crockford似乎已经说过JSON不是真正的JavaScript或文本,而且IANA更可能分发
application/*
而不是
text/*

更多资源:
媒体类型
评论请求4627
bluesmoon:JSON有一个类型

2020-02-02 19:35:18
王教练♂

866

对于JSON:

Content-Type: application/json

对于JSON-P:
Content-Type: application/javascript

2020-02-02 19:35:18
奈野沧藤

627


当然,JSON的正确MIME媒体类型是
application/json
,但必须了解应用程序中预期的数据类型。
例如,我使用Ext GWT,服务器响应必须是text/html,但包含JSON数据。
客户端,Ext GWT form listener如果使用application/json响应类型,浏览器建议我保存文件。
使用Spring MVC的服务器端源代码片段
uploadForm.getForm().addListener(new FormListenerAdapter()
{
@Override
public void onActionFailed(Form form, int httpStatus, String responseText)
{
MessageBox.alert("Error");
}
@Override
public void onActionComplete(Form form, int httpStatus, String responseText)
{
MessageBox.alert("Success");
}
});

2020-02-02 19:35:18
zxzx461000

460


JSON:
响应是根据URL中传递的查询参数动态生成的数据。
示例:
{ "Name": "Foo", "Id": 1234, "Rank": 7 }

内容类型:
application/json

JSON-P:
带填充的JSON。
响应是JSON数据,将函数调用包装起来。
示例:
functionCall({"Name": "Foo", "Id": 1234, "Rank": 7});

内容类型:
application/javascript

2020-02-02 19:35:18
redalertofyuri

398


如果您使用的是Ubuntu或Debian,并且通过Apache提供.json文件,那么您可能希望提供具有正确内容类型的文件。我这样做主要是因为我想使用Firefox扩展JSONView
Apache模块mod_mime将有助于轻松完成这项工作。但是,使用Ubuntu,您需要编辑文件/etc/mime.types并添加行
application/json json

然后重新启动Apache:
sudo service apache2 restart

2020-02-02 19:35:18
飞了个狗

383


如果从客户端调用ASP.NET Web服务,则必须使用
application/json
才能使其正常工作。我相信jQuery和Ext框架也是如此。

2020-02-02 19:35:18
老友e面

305


JSON的正确内容类型是
application/json
,除非您使用的是JSONP,也称为带填充的JSON,实际上是JavaScript,因此正确的内容类型是
application/javascript

2020-02-02 19:35:18
花祭龙涙

294


毫无疑问,对于JSON响应来说,
application/json
是最好的MIME类型。
但是我有一些经验,因为一些压缩问题,我不得不使用
application/x-javascript
。我的托管环境是与GoDaddy共享托管。他们不允许我更改服务器配置。我在
web.config
文件中添加了以下代码,用于压缩响应。

















通过使用此命令,.aspx页用g-zip压缩,但JSON响应没有。我在静态和动态类型部分添加了


。但这根本不会压缩JSON响应。
之后,我删除了这个新添加的类型,并在静态和动态类型部分中添加了


,并将
.ashx(异步处理程序)中的响应类型更改为
application/x-javascript

,现在我发现我的JSON响应被压缩为g-zip。因此,我个人建议,只有在希望在共享宿主环境中压缩JSON响应时,才使用
application/x-javascript

。因为在共享主机中,它们不允许您更改IIS配置。

2020-02-02 19:35:18
熊猫神

267


仅当使用
application/json
作为MIME类型时,我有以下内容(截至2011年11月,最新版本的Chrome、Firefox和Firebug):
从服务器加载JSON时,Chrome不再发出警告。
Firebug将在响应中添加一个选项卡,向您显示JSON数据格式。如果MIME类型不同,它将显示为
“响应内容”。

2020-02-02 19:35:18
cha02

242


如果您使用Ext JS form submit上传文件,请注意,如果服务器使用JSON发送返回对象,则浏览器将解析服务器响应以创建文档,然后必须将
Content-Type
标题设置为
text/html
,以便告诉浏览器将未更改的文本插入到文档正文中。
请参阅Ext JS 3.4.0 API文档。

2020-02-02 19:35:18
蹭得累

224


JSON是一种特定于领域的语言(DSL)和独立于JavaScript的数据格式,因此有自己的MIME类型,
application/json
。当然,对MIME类型的尊重是由客户机驱动的,因此对于字节的传输来说,
text/plain
可能会起作用,但是您将不必要地向供应商应用程序域推送解释-
application/json
。您是否可以通过
text/plain
传输XML?
但老实说,您对MIME类型的选择是向客户建议如何解释数据-
text/plain
text/HTML
(当它不是HTML时)就像类型擦除一样-它就像用类型化语言生成所有Object类型的对象一样没有格式。
我所知道的任何浏览器运行时都不会接受JSON文档并且自动将其作为JavaScript可访问对象提供给运行时而无需干预,但如果您使用的是一个受损的客户端,那就完全不同了。但这并不是全部——RESTful JSON服务通常没有JavaScript运行时,但这并不能阻止它们将JSON用作一种可行的数据交换格式。如果客户是残废的。。。然后,我可能会考虑通过Ajax模板服务注入HTML。
Application/JSON!

2020-02-02 19:35:18
wlwlka

208


如果您处于客户端环境中,则必须对受良好支持的web应用程序进行跨浏览器支持方面的调查。
正确的HTTP内容类型将是
application/json
,其他类型也已突出显示,但有些客户端处理得不太好,这就是为什么jQuery推荐默认值
text/html

2020-02-02 19:35:18
青菜荷包蛋

168


正确答案是:
Content-Type: application/json

2020-02-02 19:35:18
左佐右佑

164


正如许多其他人所提到的那样,
application/json
是正确的答案。
但尚未解释的是您所建议的其他选项的含义。
application/x-javascript
:在标准化
application/javascript
之前,JavaScript的实验MIME类型。
text/javascript
:现在已经过时。在使用javascript时,您应该使用
application/javascript

text/x-javascript
:针对上述情况的实验MIME类型。
text/x-json
:在正式注册之前,针对JSON的实验MIME类型。
application/json
总之,如果您对内容类型有任何疑问,您应该检查此链接

2020-02-02 19:35:18
Jiujiiu

147


在JSP中,您可以在page指令中使用它:
    pageEncoding="UTF-8"%>

JSON的正确MIME媒体类型是
application/json
。JSP将使用它向客户端发送响应。

2020-02-02 19:35:18
神社里的西瓜

113


application/json
是正确的JSON内容类型。
def ajaxFindSystems = {
def result = Systems.list()
render(contentType:'application/json') {
results {
result.each{sys->
system(id:sys.id, name:sys.name)
}
}
resultset (rows:result.size())
}
}

2020-02-02 19:35:18
山口山

108


application/json
的IANA注册表明,使用这种媒体类型的应用程序:JSON已经被用来在用所有这些编程语言编写的应用程序之间交换数据:ActionScript、C、C、Clojure、ColdFusion、Common Lisp、E、Erlang、Go、Java、JavaScript、Lua、Objective CAML,
Perl、PHP、Python、Rebol、Ruby、Scala和Scheme。
您会注意到,IANA.org没有列出任何其他媒体类型,事实上,即使
application/javascript
现在已经过时。所以
application/json
确实是唯一可能的正确答案。
浏览器支持是另一回事。
最广泛支持的非标准媒体类型是
text/json
text/javascript
。但有些大公司甚至使用
text/plain

更奇怪的是Flickr发送的内容类型头,它将JSON返回为
text/xml
。Google对一些ajax api使用
text/javascript

示例:
curl -I "https://ajax.googleapis.com/ajax/services/search/video?v=1.0&q=jsonexample"

输出:
Content-Type: text/javascript

curl -I "https://www.flickr.com/services/rest/?method=flickr.test.echo&format=json&api_key=f82254c1491d894f1204d8408f645a93"

输出:
Content-Type: text/xml

2020-02-02 19:35:18
小绿是坏孩子

88


正确的MIME类型是
application/json

但是
我经历了许多浏览器类型或框架用户需要的情况:
text/html
application/javascript

2020-02-02 19:35:18
FADO

74


我使用下面的
contentType: 'application/json',
data: JSON.stringify(SendData),

2020-02-02 19:35:18

65


发布时,内容类型标题应设置为“application/json”。监听请求的服务器应该包括“Accept=application/json”。
在Spring MVC中,您可以这样做:
@RequestMapping(value="location", method = RequestMethod.POST, headers = "Accept=application/json")

向响应添加头:
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json");

2020-02-02 19:35:18
PLATINUM

58


在Spring中,您有一个定义的类型:
MediaType.APPLICATION_JSON_VALUE
相当于application/json。

2020-02-02 19:35:18
无聊路过

57


application/json
在PHP中非常适用于存储数组或对象
数据。
我使用此代码将数据放在Google云存储(GCS)上的JSON中,该存储(GCS)设置为可公开查看:
$context = stream_context_create([
'gs' => [
'acl'=>'public-read',
'Content-Type' => 'application/json',
]
]);
file_put_contents(
"gs://BUCKETNAME/FILENAME.json",
json_encode((object) $array),
false,
$context
);

若要获取数据,请直接执行以下操作:
$data = json_decode(file_get_contents("gs://BUCKETNAME/FILENAME.json"));

2020-02-02 19:35:18
DDW君

49


如果JSON带有填充,那么它将是
application/jsonp
。如果JSON没有填充,那么要同时处理这两个问题,最好使用“application/javascript”,而不必考虑是否有填充。

2020-02-02 19:35:18
图书大人

49


对于JSON,我使用:
 Content-Type: application/json

这在IETF的JSON数据交换格式7158提案第1.2节:JSON规范中有描述。

2020-02-02 19:35:18
fatfat

42


扩展已接受的响应,当您在REST上下文中使用JSON时…
有一个很强的论据是当您表示REST资源和集合时使用
application/x-resource+json
application/x-collection+json

如果您决定遵循jsonapi规范,则应该使用
application/vnd.api+json
,正如所记录的。
尽管没有一个通用的标准,但是很明显,添加到正在传输的资源中的语义证明了一个更明确的内容类型,而不仅仅是
application/json

根据这个推理,其他上下文可以证明一个更具体的内容类型。

2020-02-02 19:35:18
thesilver

41


PHP开发人员使用这个:
    header("Content-type: application/json");
// Do something here...
?>

2020-02-02 19:35:18
5ESRS

38


如果您从JSON格式的REST API获取数据,则必须使用内容类型
For JSON data: Content-Type:application/json
For HTML data: Content-Type:text/html,
For XHTML data: Content-Type:application/xhtml+xml,
For XML data: Content-Type:text/xml, application/xml

2020-02-02 19:35:18
噢麦珈

25


Content-Type: application/json
-json
Content-Type: application/javascript
-json-P
Content-Type: application/x-javascript
-javascript
Content-Type: text/javascript
-javascript但已过时,以前的IE版本用作html属性。
Content-Type: text/x-javascript
-JavaScript媒体类型,但在正式注册应用程序/json之前已经过时了
Content-Type: text/x-json
-json。

2020-02-02 19:35:18
ztMi

25


JSON(JavaScript对象表示法)和JSONP(JSON with padding)格式看起来非常相似,因此可能会非常混淆它们应该使用哪种MIME类型。尽管格式相似,但它们之间还是有一些细微的差别。
因此,每当有任何疑问时,我都有一个非常简单的方法(在大多数情况下都非常有效),即去检查相应的RFC文档。
JSON
RFC 4627(JavaScript对象表示法(JSON)的application/JSON媒体类型)是一个规范JSON格式的。在第6节中,JSON文本的MIME媒体类型是
application/json.

JSONP
JSONP(“带填充的JSON”)在浏览器中的处理方式与JSON不同。JSONP被视为常规JavaScript脚本,因此它应该使用JavaScript的当前官方MIME类型。然而,在许多情况下,MIME类型也可以工作。
注意,RFC 4329(脚本媒体类型)文档已将
text/javascript
标记为过时,建议改用
application/javascript
类型。但是,由于传统的原因,
text/javascript
仍然被广泛使用,并且它具有跨浏览器支持(这并不总是
application/javascript
MIME类型的情况,特别是对于较旧的浏览器)。

2020-02-02 19:35:18
摩羯座



Copyright © 2019-2020 zimt8.com
备案号:湘ICP备19012068号