问题描述:
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提供了这个机会