我应该使用哪种 JSON 内容类型?

Which JSON content type do I use?

提问人:Oli 提问时间:1/25/2009 最后编辑:SuperStormerOli 更新时间:7/29/2023 访问量:3822529

问:

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

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

我应该使用哪一个,在哪里使用?我认为安全和浏览器支持问题是一个因素。

相关新闻: 如果 REST API 返回 JSON,则 MIME 类型是什么?

JSON MIME 内容类型

评论


答:

11501赞 Gumbo 1/25/2009 #1

对于 JSON 文本:

application/json

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

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

application/javascript

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

评论

92赞 Eugen Mihailescu 4/4/2017
MIME 类型的完整列表
0赞 Dmytro 8/23/2017
它有什么哑剧类型真的重要吗?它是被解析为对象的文本。如果您希望它无需强制下载即可在浏览器中打开,那么将其作为 text/plain 传递不是更自然吗,如果您希望它自动下载,则将其传递为 application/octet-stream(如果您在打算保存在本地的网页上生成它很有用)。真的有那么多人需要知道mime类型,以便下载者可以使用特殊的json查看器查看它吗?我错过了什么,保证它是一种特殊的哑剧类型?
8赞 kudlatiger 6/4/2018
Internet Explorer 有时存在 application/json 问题 - 博客脱机
8赞 Panu Logic 9/2/2018
想象一下,我有一份由某人编写的包含纯文本的文档。现在,纯文本恰好也是有效的 JSON。那么我使用 text/plain 作为其 mime 类型会错吗?JSON 是文本的 SUB-TYPE。所以我认为两者都应该被允许。问题是哪个在实践中效果更好。根据 codetoshare 的评论,IE 在 application/json 方面存在问题。但是任何浏览器都不应该有文本/纯文本问题。如果text/plain不安全,那么我如何从我的网站提供文本文件?
13赞 Omegastick 8/30/2019
@EugenMihailescu 该页面的标题是“MIME 类型的不完整列表”
416赞 Mark Clancy 1/25/2009 #2

如果要从客户端调用 ASP.NET Web 服务,则必须使用它才能正常工作。我相信这对于 jQueryExt 框架是一样的。application/json

评论

20赞 Nathan 3/19/2010
jQuery 似乎至少可以与“application/json”和“text/plain”一起使用......不过,我还没有尝试过所有其他方法。
0赞 Ashraf.Shk786 7/27/2017
jQuery能够与、、content-Type: text/plaincontent-Type: application/jsoncontent-Type: application/json; charset=UTF-8contentType: "application/x-www-form-urlencoded; charset=UTF-8"
696赞 Mikhail.Mamaev 10/7/2009 #3

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

评论

9赞 gbegley 10/31/2012
服务器响应必须以 text/html 格式进行。ExtJS 变体也是如此。
1801赞 gnrfan 4/7/2010 #4

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

当被问及为什么不这样做时,Crockford似乎说JSON不是真正的JavaScript,也不是文本,而且IANA更有可能分发。text/jsonapplication/*text/*

更多资源:

评论

185赞 TRiG 7/6/2011
在早期,很多东西被放入该部分,而现在可能会放入该部分。text/*application/*
38赞 XP84 1/17/2018
@Rohmer - 您“可以”在文本编辑器中打开任何内容,但二进制格式(如 JPEG 或 Windows .exe或 .zip)将包含不可打印的字符,这些字符实际上可能会破坏许多文本编辑器或导致不良行为。例如,尝试跑步。而任何 xml 或 json 文件都是 100% 可打印的。所以我认为 Stijn de Witt 的观点是有道理的,尽管事实是的,现在改变为时已晚。cat file.jpg
7赞 xDaizu 4/5/2018
@XP84您可以使用十六进制形式的文本编辑器打开任何二进制文件。所有不同的字符(其中 16 个)都是 100% 可打印的。所以,按照这个逻辑......所有二进制文件都是文本吗? Json 不是文本。Json 是(警告:前面的非正式松散定义)对象(或对象数组)的文本表示形式
13赞 XP84 5/22/2018
短语“十六进制形式的文本编辑器”没有任何意义。十六进制编辑器将每个字节显示为其十六进制值,例如,字节 1111000 显示为“78”。虽然可能有一些文本编辑器也恰好具有十六进制编辑模式,但这对于执行最技术性任务的最技术性用户而言既不常见也不有用。相比之下,文本表示 ASCII 或 Unicode,而在文本中,字节 1111000 表示小写字符。不是 78。JSON 是文本,其方式与 HTML (text/html) 完全相同。它只包含可读的文本字符,其中具有结构化的含义。x
17赞 Panu Logic 9/1/2018
我倾向于同意 Stijn de Witt 的观点。JSON 旨在使用文本编辑器进行查看和编辑。
437赞 Gourneau 11/17/2010 #5

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

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

application/json json

然后重新启动 Apache:

sudo service apache2 restart

评论

47赞 noamtm 1/20/2011
通常重新加载就足够了(比重新启动快)。另外,请注意,您现在可以执行“sudo service apache2 reload”。
21赞 Prizoff 5/26/2012
Ubuntu 12.04 默认有这个
268赞 Conan 9/7/2011 #6

并非一切都适用于内容类型。application/json

如果您使用 Ext JS 表单提交上传文件,请注意,服务器响应由浏览器解析,以便为 .<iframe>

如果服务器使用 JSON 发送返回对象,则必须将标头设置为 ,以便告诉浏览器将文本原封不动地插入到文档正文中。Content-Typetext/html

请参阅 Ext JS 3.4.0 API 文档

评论

44赞 one.beat.consumer 2/16/2012
应尽可能避免使用不符合标准的工具;按规格使用。application/json
16赞 Hendy Irawan 2/24/2012
@one.beat.consumer 虽然这是真的,但它并不特定于 ExtJs 本身。这是一种浏览器限制(或者更确切地说,也许是一种“安全措施”)。
9赞 Synchro 8/10/2012
当然,使用 text/plain 会更好,这样它就不会将任何 HTML 语义应用于非 HTML 内容?或者,如果帧没有 DOM,浏览器不允许您提取帧的内容?
6赞 jakub.g 7/5/2013
更令人困惑的是:我只是使用默认浏览器在三星 Galaxy Beam (Android 2.3) 上调试类似的情况,并且似乎触发了 、 的事件,但没有触发它。截至今天,Android <=2.3 约占 Android 市场份额的 50%。iframeloadapplication/javascriptapplication/x-javascripttext/javascripttext/plainapplication/jsontext/html
284赞 Ivo Limmen 11/30/2011 #7

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

  • 从服务器加载 JSON 时,Chrome 不再发出警告。
  • Firebug 将在响应中添加一个选项卡,显示 JSON 数据 格式 化。如果 MIME 类型不同,它只会显示为 “响应内容”。
331赞 Resist Design 4/12/2012 #8

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

322赞 shashwat 4/18/2012 #9

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

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

<httpCompression>
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.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 配置。

评论

14赞 12/12/2014
“所以我个人建议使用 application/x-javascript”是这个答案变得具有误导性的地方。GoDaddy确实允许压缩,我在我的共享主机上利用它,无论如何我都不建议使用不同的内容类型来启用压缩,这完全是错误的。这是可以做到的,但仍然是错误的。使用不同的内容类型来支持浏览器是一回事,使用不同的内容类型进行服务器端压缩是另一回事。application/json
223赞 yodabar 4/28/2012 #10

如果处于客户端环境中,则对于受良好支持的 Web 应用程序,必须调查跨浏览器支持。

正确的 HTTP Content-Type 将是 ,正如其他人已经强调的那样,但有些客户端不能很好地处理它,这就是为什么 jQuery 推荐默认 .application/jsontext/html

242赞 VLostBoy 5/15/2012 #11

JSON 是一种域特定语言 (DSL) 和独立于 JavaScript 的数据格式,因此具有自己的 MIME 类型。当然,对 MIME 类型的尊重是客户端驱动的,因此可能会用于字节的传输,但这样一来,您就会不必要地将解释推高到供应商应用程序域 - 。你会通过以下方式传输 XML 吗?application/jsontext/plainapplication/jsontext/plain

但老实说,你对MIME类型的选择是向客户建议如何解释数据 - 或者(当它不是HTML时)就像类型擦除一样 - 它就像在类型化语言中使所有对象都是Object类型一样没有信息。text/plaintext/HTML

据我所知,没有一个浏览器运行时会接受 JSON 文档并自动将其作为 JavaScript 可访问对象提供给运行时,而无需干预,但如果您使用的是瘫痪的客户端,那就完全不同了。但这还不是全部 - RESTful JSON 服务通常没有 JavaScript 运行时,但这并不能阻止它们使用 JSON 作为可行的数据交换格式。如果客户那么残废......那么我会考虑通过 Ajax 模板服务进行 HTML 注入。

应用程序/JSON!

1022赞 Alix Axel 6/20/2012 #12

对于 JSON:

Content-Type: application/json

对于 JSON-P

Content-Type: application/javascript

评论

68赞 Benjamin Gruenbaum 9/8/2013
不过,JSONP 并不是真正的 JSON,它是一种传递 JavaScript 对象文字的技术
188赞 Irfan DANISH 12/31/2012 #13

正确答案是:

Content-Type: application/json
163赞 raja 1/19/2013 #14

JSP 中,您可以在 page 指令中使用以下命令:

<%@ page language="java" contentType="application/json; charset=UTF-8"
    pageEncoding="UTF-8"%>

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

125赞 Sukane 2/26/2013 #15

“” 是正确的 JSON 内容类型。application/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())
  }
}
515赞 Bhavin 3/28/2013 #16

JSON格式:

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

例:

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

内容类型: application/json


JSON-P格式:

带填充的 JSON。 响应是 JSON 数据,并围绕它进行函数调用。

例:

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

内容类型: application/javascript

评论

52赞 styfle 1/29/2014
JSON的定义是错误的。它不需要动态生成,也不需要遵循查询参数。您可以提供静态 JSON 文件。此外,获得最多赞成票的答案有一个指向 RFC 的链接。
11赞 Jimmy Kane 1/30/2014
此外,JSONP 可以是分配给 var 的 json 数据。
183赞 fcm 4/2/2013 #17

正如许多其他人所提到的,是正确的答案。application/json

但尚未解释的是您提出的其他选项的含义。

  • application/x-javascript:之前 JavaScript 的实验性 MIME 类型是标准。application/javascript

  • text/javascript:现已过时。使用 javascript 时应使用。application/javascript

  • text/x-javascript:上述情况的实验性 MIME 类型。

  • text/x-json:JSON在正式注册之前的实验性MIME类型。application/json

总而言之,每当您对内容类型有任何疑问时,都应该查看此链接

评论

16赞 Oli 4/2/2013
什么时候过时了?我仍在用标签填充 HTML 文档。text/javascript<script type="text/javascript" ...
8赞 fcm 4/2/2013
这对浏览器来说没有区别,真的。对于RFC标准来说,它已经过时了:rfc-editor.org/rfc/rfc4329.txt
18赞 TCB13 6/28/2013
@Oli您可以安全地删除,至少按照 HTML5 进行操作。type="text/javascript"<script>...</script>
96赞 LombaX 5/4/2013 #18

正确的 MIME 类型是 application/json

我经历过许多浏览器类型或框架用户需要的情况:

text/html

application/javascript

评论

10赞 Mark Amery 6/5/2014
这种情况的例子?
81赞 Andro 5/16/2013 #19

我使用以下

contentType: 'application/json',
data: JSON.stringify(SendData),
56赞 Ankit Zalani 6/21/2013 #20

如果 JSON 带有填充,那么它将是 .如果 JSON 没有填充,那么它将是 .application/jsonpapplication/json

要同时处理这两个问题,最好使用“application/javascript”,而不用担心它是带填充还是不带填充。

评论

9赞 Rob W 8/31/2013
你答案的第一部分是错误的。“application/jsonp” 不是有效的 MIME 类型。JSONP 的响应正文只是 JavaScript,因此必须使用 JavaScript 的 MIME 类型之一。
64赞 Chand Priyankara 6/29/2013 #21

Spring 中,你有一个定义的类型:它相当于 application/jsonMediaType.APPLICATION_JSON_VALUE

评论

2赞 Edward J Beckett 2/28/2014
这也是 Java EE :: javax.ws.rs.core.MediaType
72赞 Alexander Burakevych 8/9/2013 #22

发布时,应将 Content-Type 标头设置为“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");
124赞 user1596138 2/13/2014 #23

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/javascriptapplication/json

浏览器支持是另一回事。

最广泛支持的非标准媒体类型是 或 。但一些大牌甚至使用 .text/jsontext/javascripttext/plain

更奇怪的是 Flickr 发送的 Content-Type 标头,它以 .Google 使用一些 ajax api。text/xmltext/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

50赞 user3087089 3/29/2014 #24

PHP开发人员使用这个:

<?php
    header("Content-type: application/json");

    // Do something here...
?>
59赞 Mehmet_ 2/6/2015 #25

对于 JSON,我使用:

Content-Type: application/json

IETF 的 JSON 数据交换格式 7158 提案第 1.2 节:JSON 规范中对此进行了描述。

65赞 eQ19 4/2/2015 #26

在 PHP 中非常适合存储数组或对象 数据。application/json

我使用此代码将数据放入 Google Cloud Storage (GCS) 上的 JSON 格式,该存储设置为可公开查看

$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"));
51赞 3 revs, 2 users 96%jgomo3 #27

扩展接受的响应,当您在 REST 上下文中使用 JSON 时...

关于使用和何时表示 REST 资源和集合,存在着很强的争论application/x-resource+jsonapplication/x-collection+json

如果您决定遵循 jsonapi 规范,则应使用 ,因为它已记录在案。application/vnd.api+json

尽管没有一个通用的标准,但很明显,为正在传输的资源添加的语义证明了一个更明确的 Content-Type 的合理性,而不仅仅是 .application/json

按照这个推理,其他上下文可以证明更具体的 Content-Type 是合理的。

评论

3赞 Hilikus 7/26/2016
application/vnd.api+json似乎专门针对使用 json:api 的 API,这是一个非常狭窄的规范,有自己的期望和格式,我不明白它适用于任何返回 json 的 API。如果我错了,请纠正我
37赞 Iresha Rubasinghe 2/15/2016 #28

JSON(JavaScript 对象表示法)和 JSONP(“带填充的 JSON”)格式似乎非常相似,因此它们应该使用哪种 MIME 类型可能会非常令人困惑。尽管格式相似,但它们之间存在一些细微的差异。

因此,每当有任何疑问时,我都有一个非常简单的方法(在大多数情况下效果很好),即去检查相应的RFC文档。

JSON RFC 4627(JavaScript 对象表示法 (JSON) 的 application/json 媒体类型)是 JSON 格式的规范。它在第 6 节中说,JSON 文本的 MIME 媒体类型是

application/json.

JSONP格式在浏览器中,JSONP(“带填充的 JSON”)的处理方式与 JSON 不同。JSONP 被视为常规 JavaScript 脚本,因此它应该使用 JavaScript 的当前官方 MIME 类型。但是,在许多情况下,MIME 类型也可以正常工作。application/javascript,text/javascript

请注意,RFC 4329(脚本媒体类型)文档已标记为已过时,建议改用类型。但是,由于遗留原因,它仍然被广泛使用,并且具有跨浏览器支持(MIME 类型并不总是如此,尤其是对于较旧的浏览器)。text/javascriptapplication/javascripttext/javascriptapplication/javascript

50赞 Krishna 4/11/2016 #29

如果从 JSON 格式的 REST API 获取数据,则必须使用 Content-Type

  • 对于 JSON 数据:Content-Type:application/json
  • 对于 HTML 数据:Content-Type:text/html
  • 对于 XHTML 数据:Content-Type:application/xhtml+xml
  • 对于 XML 数据:Content-Type:text/xml、application/xml
14赞 behzad babaei 9/4/2016 #30

为了指定有趣的 JSON 结果,您可以在请求标头中添加“application/json”,如下所示:

“Accept:application/json”是所需的响应格式。

“Content-Type:application/json” 指定请求的内容格式,但有时您同时指定 和 ,但这些格式的质量可能不同。哪个服务器将发回不同的响应格式,请看以下示例:application/jsonapplication/xml

Accept:application/json;q=0.4,application/xml;q=8

这将返回 XML,因为 XML 具有更高的质量。

评论

0赞 Hussain Akbar 11/29/2019
如果我可以在这里开始一个论点:请求中的接受标头不会使服务器以该格式回复。正如你所说,这是所需的格式。q 限定符是一个 wieghtage。如果服务器应用程序没有按照请求所述执行,则可以继续以所需的任何格式进行回复。同样,如果服务器应用程序仅支持 xml,则指定 json 不会执行任何自动转换;您将收到 XML 响应。
14赞 sammyb123 10/18/2016 #31

正确的当前标准是 。虽然默认编码是 UTF-8,但值得一提的是,它也可以是 UTF-16 或 UTF-32。当 JSON 以 UTF-16 或 UTF-32 编写时,必须使用二进制内容传输编码。application/json

RFC 4627 中有关 JSON 的详细信息: JavaScript 对象表示法 (JSON) 的 application/json 媒体类型

有关二进制传输编码的更多信息,请参见 5.Content-Transfer-Encoding 标头字段 (RFC 1341)。

15赞 alejnavab 1/4/2017 #32

为了补充前面的答案,根据 W3C 的 JSON 链接数据 (JSON-LD) 的 MIME 类型为:

application/ld+json

类型名称:应用程序

子类型名称:ld+json

此外,来自同一来源:

文件扩展名

.jsonld

66赞 Kashif Solangi 8/8/2017 #33
  • Content-Type: application/json- JSON格式
  • Content-Type: application/javascript - JSON-P格式
  • Content-Type: application/x-javascript- JavaScript的
  • Content-Type: text/javascript- JavaScript 已过时。较旧的 Internet Explorer 版本用于 HTML 属性。
  • Content-Type: text/x-javascript- JavaScript 媒体类型,已过时
  • Content-Type: text/x-json- application/json 正式注册前的 JSON。

评论

0赞 Vikash Chauhan 9/3/2019
对于 JSON 文本:application/json 内容类型:application/json
15赞 cherankrish 4/9/2019 #34

由于您可能需要更频繁地使用这些内容类型,因此即使有许多内容类型,也请始终尝试记住这三种内容类型

  • 内容类型:application/json
  • 内容类型:application/xml
  • 内容类型:text/html

评论

7赞 jpaugh 8/20/2019
别忘了text/plain
8赞 Hussain Akbar 11/29/2019 #35

你问题的一部分与我有关,因为我刚刚遇到它。

第三方提供商提供由多个客户端使用的 REST 服务。这是一个使用查询参数调用的简单 REST,返回格式正确的 JSON。我已经用 PHP 和 Java 测试了它,它按预期工作。

我的客户使用 Oracle Service Bus 作为其应用服务器和 Internet 之间的网关。当我制作 OSB 服务时,它因错误而崩溃。原来,被送回去的人是.OSB 根据此标头处理响应;在文本、XML 和 JSON 之间进行转换。在本例中,响应是 JSON,但标头没有这么说。联系供应商时,我得到的答复是:“我们不会改变它,因为它不会影响其他任何人”。Invalid message formatcontent-typetext/html

标头指定内容应该是什么,而不是它的实际内容。也就是说,在您的消费程序中,您可以检查或忽略它并以任何方式处理内容。另一个示例是,您可以返回 GIF 数据,但将内容类型指定为 JSON,然后继续忽略标头并读取图像数据。这不会损害您的程序,但可能会伤害其他人。Content-Type

故事的寓意:玩得好。

10赞 Shirsh Shukla 12/13/2020 #36

正如一些研究,

最常见的 MIME 类型是

应用程序/json

让我们看一个示例来区分 JSON 和 JavaScript。

  • 应用程序/json

当不知道如何使用这些数据时,会使用它。当信息只是以JSON格式从服务器中提取时,它可以通过链接或从任何文件中提取,在这种情况下,它被使用。

例如-

<?php

    header('Content-type:application/json');

    $directory = [
            ['Id' => 1, 'Name' => 'this'],
            ['Id' => 2, 'Name' => 'is'],
            ['Id' => 3, 'Name' => 'Stack Overflow'],
        ];

    // Showing the JSON data

    echo json_encode($directory);
?>

输出为,

[{"Id":1, "Name":"this"}, {"Id":2, "Name":"is"}, {"Id":3, "Name":"Stack Overflow"}]

  • 应用程序/javascript

当预定义数据的使用时,将使用它。它由客户端 Ajax 应用程序调用的应用程序使用。当数据的类型为 JSON-P 或 JSONP 时,将使用它。

例如

<?php

    header('Content-type:application/javascript');

    $dir = [
            ['Id' => 1, 'Name' => 'this' ],
            ['Id' => 2, 'Name' => 'is'],
            ['Id' => 3, 'Name' => 'Stack Overflow'],
    ];

    echo "Function_call(" . json_encode($dir) . ");";
?>

输出为,

Function_call([{"Id":1, "Name":"this"}, {"Id":2, "Name":"is"}, {"Id":3, "Name":"Stack Overflow"}])

对于其他 MIME 类型,请参阅 MIME 类型(IANA 媒体类型)中的完整详细信息。

评论

0赞 Peter Mortensen 11/10/2021
JSON-P 和 JSONP 有什么区别?
0赞 Shirsh Shukla 11/11/2021
访问此页面,了解 JSON-P 与 JSONP 的区别 stackoverflow.com/questions/2887209/...
7赞 ceving 3/2/2022 #37

这取决于观点。

如果您是发送请求的客户端,那么是正确的选择。application/json

但是,如果您是接收请求的服务器,则必须做好准备,客户端也可以发送编码。所以和有效。application/jsonapplication/json; charset=utf-8

在这两种情况下,媒体类型相同。但内容类型不同。

21赞 samnoon 7/13/2022 #38

最常见的 MIME 类型是 application/json。下面是所有 JSON 内容类型的列表:

  • Content-Type: application/json - JSON格式
  • Content-Type: text/x-json- application/json 正式注册前的 JSON。
  • Content-Type: application/javascript - JSON-P格式
  • Content-Type: application/x-javascript- JavaScript的

过时类型:

  • Content-Type: text/javascript- JavaScript 已过时。较旧的 Internet Explorer 版本用于 HTML 属性。
  • Content-Type: text/x-javascript- JavaScript 媒体类型,已过时

其他参考资料:

RFC4627 - JavaScript 对象表示法 (JSON) 的媒体类型application/json

评论

0赞 anjanesh 6/12/2023
出于好奇 - application/json 是什么时候正式注册的?我有一个输出 JSON 的 URL 端点,但采用文本格式,并且不发送 Content-Type: application/json 标头。
1赞 samnoon 6/12/2023
嗨,@anjanesh!这些参考资料应该会有所帮助: datatracker.ietf.org/doc/html/rfc4627iana.org/assignments/media-types/application/json
0赞 Muhammad Ali 7/29/2023 #39

要使用的标准和广泛接受的 JSON 内容类型是:

应用程序/json

您应该使用它,因为:

  • 用于在 HTTP 请求和响应中传输 JSON 数据的内容类型。
  • 它是 JSON 数据的官方 MIME 类型,所有现代浏览器和 Web 服务器都支持它。

其他是过时的:

用户提到的其他内容类型(application/x-javascript、text/javascript、text/x-javascript、text/x-json)在过去 JSON 不像现在这样标准化时使用。但是,由于潜在的安全性和兼容性问题,不建议立即使用它们。

安全问题:

  • 一些较旧的浏览器可能会将 JavaScript 内容类型(application/x-javascript、text/javascript、text/x-javascript)解释为可执行脚本,如果攻击者注入恶意代码,可能会导致安全漏洞。

  • 使用非标准内容类型提供 JSON 数据可能会触发某些浏览器或 Web 应用程序中的安全机制。

浏览器支持:

  • 虽然现代浏览器在很大程度上对 application/json 进行了标准化,但一些较旧的浏览器可能无法正确处理其他内容类型。
  • application/json 被所有主流浏览器所支持,并已成为 JSON 数据的事实标准。

希望它有所帮助。