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

正确的JSON内容类型是什么?,json,http-headers,content-type,Json,Http Headers,Content Type,我已经胡闹了一段时间,只是把它作为文本推出来,它没有伤害任何人(据我所知),但我想开始把事情做好 我已经看到了很多关于JSON内容类型的所谓“标准”: application/json application/x-javascript text/javascript text/x-javascript text/x-json 但哪一个是正确的,还是最好的?我推测,它们之间存在着不同的安全性和浏览器支持问题 我知道有一个类似的问题,但我想要一个更具针对性的答案。对于JSON文本: applica

我已经胡闹了一段时间,只是把它作为文本推出来,它没有伤害任何人(据我所知),但我想开始把事情做好

我已经看到了很多关于JSON内容类型的所谓“标准”:

application/json
application/x-javascript
text/javascript
text/x-javascript
text/x-json
但哪一个是正确的,还是最好的?我推测,它们之间存在着不同的安全性和浏览器支持问题

我知道有一个类似的问题,但我想要一个更具针对性的答案。

对于JSON文本:

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

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

application/javascript
以下是相关评论中提到的一些博客帖子:

  • 根据@gnrfan下面的回答

如果从客户端调用ASP.NET Web服务,则必须使用
application/json
才能使其工作。我相信这对于软件和框架也是一样的

当然,JSON的正确MIME媒体类型是
application/JSON
,但需要了解应用程序中预期的数据类型

例如,我使用,服务器响应必须为text/html,但包含JSON数据

客户端,Ext GWT表单侦听器

如果使用应用程序/json响应类型,浏览器建议我保存文件

使用的服务器端源代码片段

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

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

更多资源:


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

Apache模块将有助于轻松完成这一任务。但是,使用Ubuntu时,您需要编辑文件/etc/mime.types并添加行

application/json json
然后重新启动Apache:

sudo service apache2 restart

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

如果使用form submit上载文件,请注意浏览器会解析服务器响应,以便为
创建文档

如果服务器使用JSON发送返回对象,则必须将
内容类型
标题设置为
text/html
,以便通知浏览器将未更改的文本插入到文档正文中


请参阅。

仅当使用
应用程序/json
作为类型时,我有以下内容(截至2011年11月,最新版本的Chrome,Firefox有):

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

    • 正确的JSON内容类型是
      application/JSON
      ,除非您使用的是带填充的JSON,它实际上是JavaScript,因此正确的内容类型应该是
      application/JavaScript

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

      但是我有一些经验,因为一些压缩问题,我不得不使用
      application/x-javascript
      。我的托管环境与共享托管。他们不允许我更改服务器配置。我已将以下代码添加到我的
      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"/>
      
      现在我发现我的JSON响应是用g-zip压缩的。所以我个人推荐使用

      application/x-javascript
      

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

      如果您在客户端环境中,对于支持良好的web应用程序,必须调查跨浏览器支持

      正确的HTTP内容类型应该是
      application/json
      ,其他人也强调了这一点,但有些客户端处理得不太好,这就是为什么jQuery推荐默认的
      text/html

      json是一种(DSL)和独立于JavaScript的数据格式,因此它有自己的类型,
      application/json
      。当然,对MIME类型的尊重是由客户端驱动的,因此
      text/plain
      可以用于字节的传输,但这样做会不必要地将解释推到供应商应用程序域上-
      application/json
      。您会通过
      text/plain
      传输XML吗

      但老实说,您选择的MIME类型是向客户提供的关于如何解释数据的建议——
      text/plain
      text/HTML
      (当它不是HTML时)就像类型擦除一样——它的无信息性就如同将所有类型的对象都用类型化语言表示一样

      据我所知,任何浏览器运行时都不会接受JSON文档,并自动将其作为JavaScript可访问对象提供给运行时,而无需干预。但是,如果您使用的是残废的客户机,那就完全不同了。但这并不是全部——JSON服务通常没有JavaScript运行时,但这并不能阻止它们使用JSON作为可行的数据交换格式。如果客户是如此残废。。。然后我会考虑通过模板服务来进行HTML注入。
      Application/JSON

      对于JSON:

      { "Name": "Foo", "Id": 1234, "Rank": 7 }
      
      functionCall({"Name": "Foo", "Id": 1234, "Rank": 7});
      
      内容类型:应用程序/json
      
      用于:

      { "Name": "Foo", "Id": 1234, "Rank": 7 }
      
      functionCall({"Name": "Foo", "Id": 1234, "Rank": 7});
      
      内容类型:应用程序/javascript
      
      正确答案是:

      Content-Type: application/json
      
      在中,您可以在页面指令中使用此命令:

      <%@ page language="java" contentType="application/json; charset=UTF-8"
          pageEncoding="UTF-8"%>
      
      
      
      JS的正确媒体类型
      <%@ page language="java" contentType="application/json; charset=UTF-8"
          pageEncoding="UTF-8"%>
      
      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())
        }
      }
      
      { "Name": "Foo", "Id": 1234, "Rank": 7 }
      
      functionCall({"Name": "Foo", "Id": 1234, "Rank": 7});
      
      text/html
      
      application/javascript
      
      contentType: 'application/json',
      data: JSON.stringify(SendData),
      
      @RequestMapping(value="location", method = RequestMethod.POST, headers = "Accept=application/json")
      
      HttpHeaders headers = new HttpHeaders();
      headers.add("Content-Type", "application/json");
      
      curl -I "https://ajax.googleapis.com/ajax/services/search/video?v=1.0&q=jsonexample"
      
      curl -I "https://www.flickr.com/services/rest/?method=flickr.test.echo&format=json&api_key=f82254c1491d894f1204d8408f645a93"
      
      <?php
          header("Content-type: application/json");
      
          // Do something here...
      ?>
      
       Content-Type: application/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"));
      
      application/json.
      
      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