但老实说,你选择的MIME类型是建议客户端如何解释数据 text/plain 或 text/HTML (当它's not HTML) is like type erasure- it's没有信息,因为在类型语言中使用Object类型的所有对象 .
我所知道的浏览器运行时没有采用JSON文档并自动将其作为JavaScript可访问对象提供给运行时而无需干预,但如果您正在使用残缺客户端,那么's an entirely different matter. But that'不是全部故事 - RESTful JSON服务经常不会't have JavaScript runtimes, but it doesn' t使用JSON作为可行的数据交换格式来阻止它们 . 如果客户端瘫痪...那么我会考虑通过Ajax模板服务进行HTML注入 .
For JSON data: Content-Type:application/json
For HTML data: Content-Type:text/html,
For XHTML data: Content-Type:application/xhtml+xml,
For XML data: Content-Type:text/xml, application/xml
30 回答
在Spring中,您有一个已定义的类型:
MediaType.APPLICATION_JSON_VALUE
,相当于application / json .JSON:
响应是动态生成的数据,根据URL中传递的查询参数 .
Example:
Content-Type:
application/json
JSON-P:
带填充的JSON . 响应是JSON数据,其中包含一个函数调用 .
Example:
Content-Type:
application/javascript
JSON(JavaScript Object Notation)和JSONP("JSON with padding")格式似乎非常相似,因此它们应该使用哪种MIME类型可能会非常混乱 . 即使格式看起来非常相似,但它们之间存在一些细微差别 .
因此,无论什么时候怀疑,我都有非常简单的方法(在大多数情况下都可以很好地找到),即去检查相应的RFC文档 .
JSON RFC 4627(JavaScript对象表示法的应用程序/ json媒体类型(JSON))是JSON格式的规范 . 它在第6节中说,JSON文本的MIME媒体类型是
JSONP JSONP("JSON with padding")在浏览器中的处理方式与JSON不同 . JSONP被视为常规JavaScript脚本,因此它应该使用
application/javascript,
当前JavaScript的官方MIME类型 . 但是,在许多情况下,text/javascript
MIME类型也可以正常工作 .请注意
text/javascript
已被RFC 4329(脚本媒体类型)文档标记为已过时,建议使用application/javascript
类型 . 但是,由于遗留原因,text/javascript
仍然被广泛使用,并且它具有跨浏览器支持(对于application/javascript
MIME类型并不总是如此,特别是对于旧版浏览器) .并非所有内容都适用于内容类型
application/json
.如果您使用Ext JS表单提交上传文件,请注意浏览器会解析服务器响应以创建
<iframe>
的文档 .如果服务器使用JSON发送返回对象,则必须将
Content-Type
标头设置为text/html
,以告知浏览器将文本未更改地插入文档正文中 .见the Ext JS 3.4.0 API documentation .
如果您处于客户端环境中,那么对于支持良好的Web应用程序,必须调查跨浏览器支持 .
正确的HTTP Content-Type将是
application/json
,因为其他人已经突出显示,但是有些客户端没有很好地处理它,这就是jQuery推荐默认text/html
的原因 .在JSP中,您可以在page指令中使用它:
JSON的正确MIME媒体类型是
application/json
. JSP将使用它向客户端发送响应 .正确的MIME类型是 application/json
BUT
我遇到过浏览器类型或框架用户需要的许多情况:
对于JSON,我正在使用:
这在IETF的JSON数据交换格式7158提案Section 1.2: Specifications of JSON中有所描述 .
在REST上下文中使用JSON时,扩展已接受的响应...
当您表示REST资源和集合时,有一个strong argument关于使用
application/x-resource+json
和application/x-collection+json
.如果您决定遵循 jsonapi 规范,you should使用
application/vnd.api+json
,因为它已被记录 .尽管没有通用的标准,很明显,对于被转移的资源添加的语义证明了更明确的内容类型而不仅仅是
application/json
.根据这种推理,其他上下文可以证明更具体的内容类型 .
For JSON:
For JSON-P:
IANA已将JSON的官方MIME类型注册为 application/json .
当被问及为什么不
text/json
时,Crockford似乎说JSON不是真正的JavaScript也不是文本而且IANA更有可能发布application/*
而不是text/*
.更多资源:
Media Types
Request for Comments 4627
bluesmoon: JSON has a type
当然,JSON的正确MIME媒体类型是
application/json
,但是有必要实现应用程序中预期的数据类型 .例如,我使用Ext GWT,服务器响应必须为 text/html 但包含JSON数据 .
客户端,Ext GWT表单监听器
如果使用 application/json 响应类型,浏览器建议我保存文件 .
使用Spring MVC的服务器端源代码段
如果您从客户端调用ASP.NET Web服务,则必须使用
application/json
才能使用它 . 我相信jQuery和Ext框架也是如此 .我用下面的
Content-Type Headers 应设置为' application/json '发帖时 . 侦听请求的服务器应包含“ Accept=application/json ” . 在Spring MVC中你可以这样做:
将标头添加到响应中:
JSON是domain-specific language(DSL)和独立于JavaScript的数据格式,因此有自己的MIME类型,
application/json
. 尊重MIME类型当然是客户端驱动的,因此text/plain
可以用于传输字节,但是你会不必要地将解释推送到供应商应用程序域 -application/json
. 你会通过text/plain
传输XML吗?但老实说,你选择的MIME类型是建议客户端如何解释数据
text/plain
或text/HTML
(当它's not HTML) is like type erasure- it's没有信息,因为在类型语言中使用Object类型的所有对象 .我所知道的浏览器运行时没有采用JSON文档并自动将其作为JavaScript可访问对象提供给运行时而无需干预,但如果您正在使用残缺客户端,那么's an entirely different matter. But that'不是全部故事 - RESTful JSON服务经常不会't have JavaScript runtimes, but it doesn' t使用JSON作为可行的数据交换格式来阻止它们 . 如果客户端瘫痪...那么我会考虑通过Ajax模板服务进行HTML注入 .
应用程序/ JSON!
正如许多人提到的那样,
application/json
是正确的答案 .但尚未解释的是你提出的其他选择意味着什么 .
application/x-javascript
:application/javascript
之前的JavaScript的实验MIME类型是标准的 .text/javascript
:现在已经过时了 . 使用javascript时应该使用application/javascript
.text/x-javascript
:针对上述情况的实验MIME类型 .text/x-json
:在application/json
正式注册之前,JSON的实验MIME类型 .总而言之,无论何时您对内容类型有任何疑问,都应该检查this link
JSON的正确内容类型是
application/json
除非你正在使用JSONP,也称为带填充的JSON,它实际上是JavaScript,所以正确的内容类型是application/javascript
.如果JSON带有填充,那么它将是
application/jsonp
. 如果JSON没有填充,那么它将是application/json
.要处理这两个问题,最好使用:'application / javascript'而不用担心是填充还是填充 .
毫无疑问,
application/json
是JSON响应的最佳MIME类型 .但我有一些经验,因为一些压缩问题,我不得不使用
application/x-javascript
. 我的托管环境是与GoDaddy共享托管 . 他们不允许我更改服务器配置 . 我已将以下代码添加到我的web.config
文件中以压缩响应 .通过使用它,.aspx页面使用g-zip压缩但JSON响应不是 . 我补充道
在静态和动态类型部分 . But this does not compress JSON responses at all.
之后我删除了这个新添加的类型并添加了
在静态和动态类型部分中,并更改了响应类型
.ashx(异步处理程序)来
现在我发现我的JSON响应是用g-zip压缩的 . 所以我个人建议使用
仅当您要在 shared hosting environment 上压缩JSON响应时 . 因为在共享主机中,它们不允许您更改IIS配置 .
仅当使用
application/json
作为MIME类型时,我才有以下内容(截至2011年11月,最新版本的Chrome,Firefox版本为Firebug):从服务器加载JSON时,Chrome不再发出警告 .
Firebug将在响应中添加一个选项卡,显示格式化的JSON数据 . 如果MIME类型不同,它将显示为'Response content' .
“
application/json
”是正确的JSON内容类型 .我使用此代码将数据放在Google Cloud Storage (GCS)上的JSON中,设置为publically viewable:
要直接获取数据:
对于JSON文本:
application/json
对于带回调的JSONP(runnable javascript):
以下是相关评论中提到的一些博客文章 .
Why you shouldn't use text/html for JSON
Internet Explorer sometimes has issues with application/json(DEAD 2018-06-26)
A rather complete list of Mimetypes and what to use them for
The official mime type list at IANA来自@ gnrfan的回答如下
正确答案是:
如果从JSON中的REST API获取数据,则必须使用content-type
如果您使用的是Ubuntu或Debian并且通过Apache提供.json文件,则可能需要提供具有正确内容类型的文件 . 我这样做主要是因为我想使用Firefox扩展JSONView
Apache模块mod_mime将有助于轻松完成此任务 . 但是,使用Ubuntu,您需要编辑文件/etc/mime.types并添加该行
然后重启Apache:
Content-type: application/json
- jsonContent-Type: application/javascript
- json-PContent-type: application/x-javascript
- JavaScript的Content-type: text/javascript
- javascript但过时的旧IE版本曾用作html属性 .Content-type: text/x-javascript
- JavaScript媒体类型但已过时Content-type: text/x-json
- json在申请/ json正式注册之前 .IANA registration for application/json说
您会注意到IANA.org doesn't list any of these other media types,实际上甚至
application/javascript
现在已经过时了 . 所以application/json
确实是唯一可能的正确答案 .浏览器支持是另一回事 .
支持最广泛的非标准媒体类型是
text/json
或text/javascript
. 但是一些大牌甚至使用text/plain
.更奇怪的是Flickr发送的Content-Type标头,它将JSON返回为
text/xml
. 谷歌使用text/javascript
作为ajax apis .例子:
输出:
Content-Type: text/javascript
输出:
Content-Type: text/xml
PHP开发人员使用它: