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

问题描述:

JSON 内容类型有许多“标准”:

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

哪个最好?我认为安全和浏览器支持问题是一个因素。

相关:What MIME type if JSON is being returned by a REST API?

解决方案1:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

对于 JSON 文本:

application/json

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

对于带有回调的 JSONP(可运行 JavaScript):

application/javascript

以下是相关评论中提到的一些博客文章:

为什么不应该对 JSON 使用 text/html

Internet Explorer 有时会出现 application/json 问题

一个相当完整的 Mimetype 列表以及它们的用途

IANA 的官方 mime 类型列表来自 @gnrfan 下面的回答

huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式

Complete list of MIME types

它有什么 mime 类型真的很重要吗?它是被解析为对象的文本。如果您希望它可以在浏览器中打开而无需强制下载,将它作为 text/plain 传递,如果您希望自动下载它,将它传递为 application/octet-stream 会不会更自然(如果您在生成它时很有用打算保存在本地的网页)。真的有那么多人需要知道 mime 类型以便下载者可以使用特殊的 json 查看器查看它吗?我错过了什么保证它是一种特殊的哑剧类型?

Internet Explorer 有时会出现应用程序/json 问题 - 博客已离线

想象一下,我有一份由某人编写的包含纯文本的文档。现在,纯文本恰好也是有效的 JSON。那么我使用 text/plain 作为它的 mime 类型会是错误的吗? JSON 是文本的 SUB-TYPE。所以我认为两者都应该被允许。问题是哪个在实践中效果更好。根据 codetoshare 的评论,IE 的 application/json 有问题。但是任何浏览器都不应该有文本/纯文本问题。如果 text/plain 不安全,那么如何从我的网站提供文本文件?

@EugenMihailescu 该页面的标题是“不完整的 MIME 类型列表”

解决方案2:

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

IANA 已将 JSON 的官方 MIME 类型注册为 application/json。

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

更多资源:

媒体类型

征求意见 4627

bluesmoon:JSON 有一个类型

很多东西在早期被放入 text/* 部分,而现在可能会被放入 application/* 部分。

@Rohmer - 您“可以”在文本编辑器中打开任何内容,但是像 JPEG 或 Windows .exe 或 .zip 这样的二进制格式将包含不可打印的字符,这些字符实际上会破坏许多文本编辑器或导致不良行为。例如,尝试运行 cat file.jpg。而任何 xml 或 json 文件都是 100% 可打印的。所以我认为 Stijn de Witt 的观点是有效的,尽管事实上是的,现在改变为时已晚。

@XP84 您可以使用十六进制形式的文本编辑器打开任何二进制文件。并且所有不同的字符(其中 16 个)都是 100% 可打印的。那么,按照这种逻辑......所有二进制文件都是文本吗? Json 不是文本。 Json 是(警告:前面的非正式松散定义)对象(或对象数组)的文本表示

短语“十六进制形式的文本编辑器”没有任何意义。十六进制编辑器将每个字节显示为其十六进制值,例如,字节 1111000 显示为“78”。虽然可能有一些文本编辑器也恰好具有十六进制编辑模式,但这对于大多数技术用户来说既不常见也没有用处,但最技术性的用户却在做最技术性的任务。相比之下,文本表示 ASCII 或 Unicode,而在文本中,字节 1111000 表示小写 x 字符。不是 78. JSON 是文本,其方式与 HTML (text/html) 完全相同。它仅包含可读的文本字符,其中包含结构化的含义。

我倾向于同意 Stijn de Witt 的观点。 JSON 旨在使用文本编辑器进行查看和编辑。

解决方案3:

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

对于 JSON:

Content-Type: application/json

对于 JSON-P:

Content-Type: application/javascript

JSONP 并不是真正的 JSON,它是一种传递 JavaScript 对象字面量的技术

解决方案4:

HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com

当然,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);
    }
};

服务器响应必须为 text/html。 ExtJS 变体也是如此。

解决方案5:

huntsbot.com – 高效赚钱,自由工作

JSON:

响应是根据 URL 中传递的查询参数动态生成的数据。

例子:

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

内容类型: application/json

JSON-P:

带填充的 JSON。响应是 JSON 数据,其中包含一个函数调用。

例子:

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

内容类型: application/javascript

JSON的定义是错误的。它不需要动态生成或尊重查询参数。您可以提供静态 JSON 文件。此外,最受好评的答案有一个指向 RFC 的链接。

JSONP 也可以是分配给 var 的 json 数据。

解决方案6:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

如果您使用的是 Ubuntu 或 Debian,并且通过 Apache 提供 .json 文件,您可能希望提供具有正确内容类型的文件。我这样做主要是因为我想使用 Firefox 扩展 JSONView

Apache 模块 mod_mime 将有助于轻松完成此操作。但是,对于 Ubuntu,您需要编辑文件 /etc/mime.types 并添加该行

application/json json

然后重启 Apache:

sudo service apache2 restart

通常重新加载就足够了(比重新启动更快)。另外,请注意您现在可以执行“sudo service apache2 reload”。

Ubuntu 12.04 默认有这个

解决方案7:

打造属于自己的副业,开启自由职业之旅,从huntsbot.com开始!

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

jQuery 似乎至少可以与 'application/json' 和 'text/plain' 一起使用......不过我还没有尝试过所有其他的。

jQuery 能够使用 content-Type: text/plain、content-Type: application/json、content-Type: application/json; charset=UTF-8、contentType: "application/x-www-form-urlencoded; charset=UTF-8"

解决方案8:

huntsbot.com – 高效赚钱,自由工作

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

解决方案9:

HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com

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

但是由于一些压缩问题,我有一些必须使用 application/x-javascript 的经验。我的托管环境是与 GoDaddy 共享托管。他们不允许我更改服务器配置。我已将以下代码添加到我的 web.config 文件中以压缩响应。


    
    
        
        
        
        
    
    
        
        
        
        
    



通过使用它,.aspx 页面使用 g-zip 压缩,但 JSON 响应没有。我添加了



在静态和动态类型部分。但这根本不会压缩 JSON 响应。

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



在静态和动态类型部分中,并更改了响应类型

.ashx(异步处理程序)到

application/x-javascript

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

application/x-javascript

仅当您想在共享托管环境上压缩 JSON 响应时。因为在共享主机中,它们不允许您更改 IIS 配置。

“所以我个人建议使用 application/x-javascript”是这个答案变得误导的地方。 GoDaddy确实允许压缩 application/json,我在共享主机上利用它,我不建议使用不同的内容类型来启用压缩,这是完全错误的。它可以做到,但它仍然是错误的。 浏览器支持使用不同的内容类型是一回事,服务器端压缩使用不同的内容类型是另一回事。

解决方案10:

huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求

仅当使用 application/json 作为 MIME 类型时,我才有以下内容(截至 2011 年 11 月,最新版本的 Chrome、Firefox 和 Firebug):

从服务器加载 JSON 时,Chrome 不再发出警告。

Firebug 将在响应中添加一个选项卡,向您显示格式化的 JSON 数据。如果 MIME 类型不同,它只会显示为“响应内容”。

解决方案11:

与HuntsBot一起,探索全球自由职业机会–huntsbot.com

并非所有内容都适用于内容类型 application/json。

如果您使用 Ext JS 表单提交来上传文件,请注意浏览器会解析服务器响应以创建 的文档。

如果服务器使用 JSON 发送返回对象,则必须将 Content-Type 标头设置为 text/html,以告知浏览器将未更改的文本插入到文档正文中。

请参阅the Ext JS 3.4.0 API documentation。

应尽可能避免使用不符合标准的工具;根据规范使用 application/json。

@one.beat.consumer 虽然这是真的,但它并不特定于 ExtJs 本身。这是浏览器的限制(或者更确切地说,也许是一种“安全措施”)。

当然使用 text/plain 会更好,因此它不会将任何 HTML 语义应用于非 HTML 内容?或者如果没有 DOM,浏览器是否让您提取框架的内容?

进一步混淆:我只是在使用默认浏览器的三星 Galaxy Beam (Android 2.3) 上调试一个类似的案例,iframe 似乎触发了 application/javascript、application/x-javascript、text/javascript 的 load 事件, text/plain,但 NOT 为 application/json 或 text/html 触发它。截至今天,Android <=2.3 约占 Android 市场份额的 50%。

原文链接:https://www.huntsbot.com/qa/w7oe/what-is-the-correct-json-content-type?lang=zh_CN

一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值