我一直在弄乱JSON一段时间,只是将其作为文本推出,并没有伤害任何人(据我所知),但是我想正确地做事。
我见过这么多的所谓的“标准”为JSON内容类型:
application/json
application/x-javascript
text/javascript
text/x-javascript
text/x-json
但是哪一个是正确的,还是最好的? 我发现在它们之间存在安全性和浏览器支持问题。
我知道有一个类似的问题, 如果REST API返回JSON,则为哪种MIME类型? ,但我想要一个更有针对性的答案。
#1楼
JSON的正确内容类型是application/json
除非您使用JSONP ,也称为JSON与Padding,它实际上是JavaScript,因此正确的内容类型将是application/javascript
。
#2楼
毫无疑问, application/json
是JSON响应的最佳MIME类型。
但是由于一些压缩问题,我有一些必须使用application/x-javascript
经验。 我的托管环境是与GoDaddy共享的托管。 它们不允许我更改服务器配置。 我已将以下代码添加到我的web.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配置。
#3楼
如果您在客户端环境中,则对于良好支持的Web应用程序,必须调查跨浏览器的支持。
正确的HTTP Content-Type将是application/json
,因为其他application/json
也已经突出显示,但是某些客户端不能很好地处理它,因此jQuery建议使用默认的text/html
。
#4楼
JSON是一种域特定语言 (DSL)和一种独立于JavaScript的数据格式,因此具有其自己的MIME类型application/json
。 对MIME类型的尊重当然是由客户端驱动的,因此text/plain
可能会用于字节传输,但随后您将不必要地将解释推向供应商应用程序域-application application/json
。 您会通过text/plain
传输XML吗?
但老实说,您选择的MIME类型是向客户端提供有关如何解释数据的建议- text/plain
text/HTML
或text/HTML
(当不是HTML时)就像类型擦除-它与使所有对象成为Object类型一样没有信息性以一种打字语言。
据我所知,没有浏览器运行时会使用JSON文档并自动将其作为JavaScript可访问的对象供运行时使用,而无需干预,但是如果您使用的是残废的客户端,那就完全不同了。 但是,这并不是整个故事- REST风格的 JSON服务往往没有JavaScript的运行时间,但使用JSON作为一种可行的数据交换格式它不会阻止他们。 如果客户端瘫痪了……那么我可能会考虑通过Ajax模板服务进行HTML注入。
应用程序/ JSON!
#5楼
对于JSON:
Content-Type: application/json
对于JSON-P :
Content-Type: application/javascript