11598
16514
我一直在弄乱JSON一段时间,只是将其作为文本推出,并没有伤害任何人(据我所知),但是我想正确地开始做事。
我已经看到许多所谓的JSON内容类型的“标准”:
应用程序/ json
应用程序/ x-javascript
文字/ javascript
文字/ x-javascript
文字/ x-json
但是,哪一个是正确的,还是最好的?我发现在它们之间存在安全性和浏览器支持问题。
我知道还有一个类似的问题,如果REST API返回JSON,则为哪种MIME类型?但是我想要一个更有针对性的答案。 
1个
2
下一个
对于JSON文本:
应用程序/ json
JSON文本的MIME媒体类型为application / json。默认编码为UTF-8。 (来源:RFC 4627)。
对于带回调的JSONP(可运行的JavaScript):
应用程序/ javascript
以下是相关评论中提到的一些博客文章:
为什么不应该将text / html用于JSON
Internet Explorer有时与application / json有关
相当完整的Mimetype列表及其用途
来自@gnrfan的IANA上的官方MIME类型列表
|
IANA已将JSON的官方MIME类型注册为application / json。
当被问及为什么不是text / json时,Crockford似乎说JSON并不是JavaScript也不是文本,而且IANA比text / *更可能分发application / *。
更多资源:
媒体类型
请求评论4627
bluesmoon:JSON具有一种类型
|
对于JSON:
内容类型:application / json
对于JSON-P:
内容类型:应用程序/ JavaScript
|
当然,JSON的正确MIME媒体类型是application / json,但是有必要了解应用程序中期望的数据类型。
例如,我使用Ext GWT,并且服务器响应必须为text / html,但包含JSON数据。
客户端,Ext GWT表单侦听器
uploadForm.getForm()。addListener(new FormListenerAdapter()
{
@Override
公共无效onActionFailed(表单,int httpStatus,字符串responseText)
{
MessageBox.alert(“ Error”);
}
@Override
公共无效onActionComplete(表单,int httpStatus,字符串responseText)
{
MessageBox.alert(“成功”);
}
});
如果使用application / json响应类型,浏览器建议我保存文件。
使用Spring MVC的服务器端源代码片段
返回新的AbstractUrlBasedView()
{
@SuppressWarnings(“未选中”)
@Override
受保护的void renderMergedOutputModel(地图模型,HttpServletRequest请求,
HttpServletResponse响应)引发异常
{
response.setContentType(“ text / html”);
response.getWriter()。write(json);
}
};
|
JSON:
响应是根据URL中传递的查询参数动态生成的数据。
例:
{“ Name”:“ Foo”,“ Id”:1234,“ Rank”:7}
内容类型:application / json
JSON-P:
带有填充的JSON。
响应是JSON数据,并带有包装的函数调用。
例:
functionCall({“ Name”:“ Foo”,“ Id”:1234,“ Rank”:7}));
内容类型:应用程序/ JavaScript
|
如果您使用的是Ubuntu或Debian,并且通过Apache提供.json文件,则可能需要提供具有正确内容类型的文件。我这样做主要是因为我想使用Firefox扩展JSONView
Apache模块mod_mime将帮助您轻松完成此任务。但是,对于Ubuntu,您需要编辑/etc/mime.types文件并添加以下行
application / json json
然后重新启动Apache:
sudo服务apache2重新启动
|
如果要从客户端调用ASP.NET Web服务,则必须使用application / json使其正常工作。我相信这对于jQuery和Ext框架是相同的。
|
JSON的正确内容类型是application / json,除非您使用的是JSONP,也称为JSON with Padding,它实际上是JavaScript,因此正确的内容类型将是application / javascript。
|
毫无疑问,application / json是JSON响应的最佳MIME类型。
但是由于一些压缩问题,我有一些必须使用application / x-javascript的经验。我的托管环境是与GoDaddy共享的托管。它们不允许我更改服务器配置。我已将以下代码添加到我的web.config文件中以压缩响应。

<方案名称=“ gzip” dll =“%Windir%\ system32 \ inetsrv \ gzip.dll” />














通过使用此选项,.aspx页使用g-zip压缩,但JSON响应未压缩。我加了

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

在静态和动态类型部分中,并更改了响应类型
.ashx(异步处理程序)
应用程序/ x-javascript
现在,我发现我的JSON响应已使用g-zip压缩。所以我个人建议使用
应用程序/ x-javascript
仅当您要在共享托管环境上压缩JSON响应时。因为在共享主机中,它们不允许您更改IIS配置。
|
仅当使用application / json作为MIME类型时,我才具有以下内容(截至2011年11月,使用最新版本的Chrome,带有Firebug的Firefox):
从服务器加载JSON后,Chrome将不再发出警告。
Firebug将在响应中添加一个标签,向您显示JSON数据
格式化。如果MIME类型不同,它将显示为
“响应内容”。
|
并非所有内容都适用于内容类型application / json。
如果您使用Ext JS表单提交来上传文件,请注意浏览器会解析服务器响应以创建