content-type - 正确的JSon内容类型是什么?

我有一段时间一直都喜欢使用 JSon ,只要让它输出为文本,并未伤害任何人( 就我所知) 正常,但是我想做很多其他的事情。

我见过太多所谓的" 标准" JSON内容类型(ContentType) :

application/json
application/x-javascript
text/javascript
text/x-javascript
text/x-json

但是, 这是正确的,或者是最好的? 我猜想他们之间存在不同的安全和浏览器支持问题。

我知道有一个类似的问题, MIme JSON是否被REST API返回的类型? ,不过我希望有一个更有针对性的回答。

时间:

JSON文字:

JSON文本的MIME媒体类型是 application/json。 默认编码是UTF 8 。 ( source: RFC 4627 ) 。

对于 JSONP 回调的:

application/javascript

下面是一些相关的博客文章中所介绍的注释。

JSON:

Content-Type: application/json

JSON P

Content-Type: application/javascript

当然,正确的 JSON MIME媒体类型是application/json,但是要实现在应用程序中需要的数据类型。

例如,我使用 Ext GWT 和服务器响应必须像 text/html但是包含JSON数据。

客户端,ext GWT窗体侦听器

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");
    }
});

为了防止使用 application/json 响应类型,浏览器会提示我保存文件。

服务器端源代码片段使用 Spring MVC

return new AbstractUrlBasedView() 
{
    @SuppressWarnings("unchecked")
    @Override
    protected void renderMergedOutputModel(Map model, HttpServletRequest request,
                                           HttpServletResponse response) throws Exception 
    {
        response.setContentType("text/html");
        response.getWriter().write(json);
    }
};

JSON :

在URL响应是动态生成的,根据传入的查询参数。

Example :

{ "Name": "Foo", "Id": 1234, "Rank": 7 }

Content Type:application/json


JSON P:

json with padding 。 响应是JSON数据,通过一个函数调用环绕它。

Example :

functionCall({"Name": "Foo", "Id": 1234, "Rank": 7});

Content Type:application/javascript

如果你通过Apache Ubuntu或者Debian和服务器使用json文件时,你可能希望文件使用正确的内容类型。 我之所以这么做主要是因为我想使用在Firefox扩展 JSONView

Apache模块mod_mime有助于轻松做到这一点。 但是,你需要编辑该xml文件和Ubuntu /etc/mime.types 并添加以下行

application/json json

然后重启Apache :

sudo service apache2 restart

如果你在客户端调用ASP .NETWeb服务application/json使其正常工作。 我相信 jQueryExt 框架也一样。

毫无疑问, application/json是最好的 MIME JSON响应的类型。

但我有一些经验,我只能用 application/x-javascript因为一定程度的压缩问题。 我的宿主环境用的是共享主机GoDaddy 。 他们不允许我更改服务器配置。 我必须将下面的代码添加到我的 web.config响应为压缩文件。

<httpCompression>
    <scheme name="gzip" dll="%Windir%system32inetsrvgzip.dll"/>
    <dynamicTypes>
        <add mimeType="text/*" enabled="true"/>
        <add mimeType="message/*" enabled="true"/>
        <add mimeType="application/javascript" enabled="true"/>
        <add mimeType="*/*" enabled="false"/>
    </dynamicTypes>
    <staticTypes>
        <add mimeType="text/*" enabled="true"/>
        <add mimeType="message/*" enabled="true"/>
        <add mimeType="application/javascript" enabled="true"/>
        <add mimeType="*/*" enabled="false"/>
    </staticTypes>
</httpCompression>
<urlCompression doStaticCompression="true" doDynamicCompression="true"/>

通过使用这里,.aspx页进行g-zip压缩,但是JSON的答复不是。 我添加了

<add mimeType="application/json" enabled="true"/>

在静态和动态类型部分中。 这个理由根本不压缩JSON回复。

在这之后我删除这个新添加的类型并添加

<add mimeType="application/x-javascript" enabled="true"/>

不管是静态还是动态类型部分中,更改了响应类型

ashx ( 异步处理程序),

application/x-javascript

但是, 现在我发现我的JSON响应已经使用g-zip压缩 。 所以我个人推荐使用

application/x-javascript

仅当你想要压缩用户JSON回复于共享主机环境 。 因为在共享主机,他们不允许你更改 Iis 配置。

...