web-dev-qa-db-ja.com

正しいJSONコンテンツタイプは何ですか?

私はしばらくの間 _ json _ をめちゃくちゃにしてきましたが、それをテキストとして押し出すだけで、誰にも害はありませんでした(知っていることですが)。

私は so を見てきましたが、JSONコンテンツタイプの「標準」と言われています。

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

しかし、どれが正しいのか、それとも一番いいのか?私は、セキュリティとブラウザサポートの問題がそれらの間で異なることを集める。

JSONがREST AP​​Iによって返されている場合、どのMIMEタイプになりますか。しかし、もう少しターゲットを絞った回答をお願いします。

9670
Oli

JSONテキストの場合:

application/json

JSONテキストのMIMEメディアタイプはapplication/jsonです。デフォルトのエンコードはUTF-8です。 (出典: RFC 4627 )。

コールバック付きの JSONP (実行可能なJavaScript)の場合:

application/javascript

関連するコメントに記載されているブログ投稿がいくつかあります。

9674
Gumbo

_ iana _ はJSONの公式MIMEタイプをapplication/jsonとして登録しました。

なぜtext/jsonではないのかという質問に対して、Crockford氏は、JSONは実際にはJavaScriptでもテキストでもないと言っていたようで、またIANAはapplication/*よりtext/*を配布する傾向がありました。

より多くのリソース:

1557
gnrfan

JSONの場合:

Content-Type: application/json

JSON-P の場合:

Content-Type: application/javascript
833
Alix Axel

もちろん、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);
    }
};
610
Mikhail.Mamaev

JSON:

URLに渡されたクエリパラメータに従って、応答は動的に生成されたデータです。

例:

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

コンテンツタイプ: application/json


JSON-P:

パディング付きのJSON。応答はJSONデータであり、それをラップした関数呼び出しがあります。

例:

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

コンテンツタイプ: application/javascript

452
Bhavin

UbuntuまたはDebianを使用していて、Apacheを介して.jsonファイルを提供している場合は、正しいコンテンツタイプでファイルを提供することをお勧めします。私はこれをやっているのは主に私がFirefoxの拡張機能 JSONView を使いたいからです。

Apacheモジュール mod_mime はこれを簡単にするのを助けます。しかし、Ubuntuでは、ファイル /etc/mime.types を編集して次の行を追加する必要があります。

application/json json

次にApacheを再起動します。

Sudo service Apache2 restart
387
Gourneau

クライアントサイドからASP.NET Webサービスを呼び出す場合は、それが機能するためにapplication/jsonを使用する必要があります。これは jQueryExt フレームワークでも同じだと思います。

372
markvpc

_ jsonp _ を使用している場合を除き、JSONの正しいコンテンツタイプはapplication/jsonです。これは実際にはJavaScriptであるため、正しいコンテンツタイプはapplication/javascriptになります。

296
Resist Design

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 _ 設定を変更することはできません。

285
shashwat

_ mime _ タイプとしてapplication/jsonを使用している場合に限り、次のようになります(2011年11月現在、Chromeの最新バージョン、Firefoxでは Firebug

  • JSONがサーバーから読み込まれたときにChromeからの警告がなくなりました。
  • Firebugはレスポンスにタブを追加して、フォーマットされたJSONデータを表示します。 MIMEタイプが異なる場合は、単に「レスポンスコンテンツ」として表示されます。
259
Ivo Limmen

すべてがコンテンツタイプapplication/jsonに対して機能するわけではありません。

ファイルのアップロードに Ext JS form送信を使用している場合は、<iframe>のドキュメントを作成するためにサーバーの応答がブラウザによって解析されることに注意してください。

サーバーが戻りオブジェクトを送信するためにJSONを使用している場合は、テキストを変更せずに文書本体に挿入するようブラウザーに指示するために、Content-Typeヘッダーをtext/htmlに設定する必要があります。

Ext JS 3.4.0 APIドキュメント を参照してください。

234
Conan

JSONは ドメイン固有の言語 (DSL)であり、JavaScriptとは無関係のデータフォーマットであり、それ自体に _ mime _ type、application/jsonがあります。 MIMEタイプの尊重はもちろんクライアント主導であるので、text/plainはバイトの転送のためにするかもしれません、しかしそれからあなたは不必要にベンダーアプリケーションドメインへの解釈を押し上げるでしょう - application/json。 XMLをtext/plain経由で転送しますか?

しかし、正直に言うと、MIMEタイプの選択は、データtext/plainまたはtext/HTML(HTMLではない場合)の解釈方法に関するクライアントへのアドバイスです。型指定された言語でObject型のすべてのオブジェクトを作成するのと同じくらい無駄です。

私が知っているブラウザランタイムは、JSON文書を受け取り、介入なしにそれをJavaScriptアクセス可能オブジェクトとして自動的にランタイムに利用可能にするでしょう。しかし、あなたが不自由なクライアントで働いているなら、それは全く別の問題です。しかし、それだけではありません - RESTful JSONサービスにはJavaScriptランタイムがないことが多くありますが、実行可能なデータ交換フォーマットとしてJSONを使用するのを止めることはできません。クライアントがそれほど不自由なのであれば…それなら、代わりに Ajax templatingサービスを介したHTMLインジェクションを検討するでしょう。

アプリケーション/ JSON!

219
VLostBoy

あなたがクライアントサイドの環境にいるなら、クロスブラウザサポートについて調査することはよくサポートされたウェブアプリケーションのために必須です。

他の人もすでに強調しているように、正しいHTTP Content-Typeはapplication/jsonですが、それをうまく処理できないクライアントもあります。そのため、jQueryはデフォルトのtext/htmlを推奨します。

203

正しい答えは:

Content-Type: application/json
161
Irfan DANISH

他の多くの人が言っているように、application/jsonが正しい答えです。

しかし、まだ説明されていないのは、あなたが提案した他のオプションの意味です。

  • application/x-javascriptapplication/javascriptが標準化される前のJavaScript用の実験的MIMEタイプ。

  • text/javascript:今は時代遅れです。 javascriptを使うときはapplication/javascriptを使うべきです。

  • text/x-javascript:上記の状況に対する実験的なMIMEタイプ。

  • text/x-jsonapplication/jsonが正式に登録される前のJSON用の実験的MIMEタイプ。

全体的に見て、コンテンツタイプについて疑問があるときはいつでも このリンク をチェックする必要があります。

158
fcm

_ jsp _ では、ページディレクティブでこれを使用できます。

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

JSONの正しい _ mime _ mediaタイプはapplication/jsonです。 JSPはそれをクライアントへの応答送信に使用します。

141
raja

application/json”は正しい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())
  }
}
109
Sukane

application/jsonIANA登録

このメディアタイプを使用するアプリケーション: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/javascriptでさえ今では時代遅れです。だからapplication/jsonは本当に唯一の可能な 正しい answerです。

ブラウザのサポートも別のものです。

最も広くサポートされている非標準メディアタイプはtext/jsonまたはtext/javascriptです。しかし、ビッグネームの中にはtext/plainを使用するものもあります。

さらに奇妙なのは、Flickrが送信したContent-Typeヘッダーで、JSONをtext/xmlとして返します。 Googleは、その一部のAjax APIにtext/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

101
Jhawins

正しいMIMEタイプはapplication/jsonです。

_ but _

私はブラウザの種類やフレームワークのユーザーが必要とする多くの状況を経験しました:

text/html

application/javascript
84
LombaX

私は以下を使います

contentType: 'application/json',
data: JSON.stringify(SendData),
71
Andro

投稿時に 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");
63

Spring には定義済みの型があります:MediaType.APPLICATION_JSON_VALUE application/json と同等です。

56

application/jsonはPHPで配列またはオブジェクトデータを格納するのに最適です。

このコードを使用して、JSONのデータを Googleクラウドストレージ(GCS) に設定します。これは 公開されて表示可能 になります。

$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"));
56
Chetabahana

JSONのために、私は使っています:

 Content-Type: application/json

これは、IETFのJSON Data Interchange Format 7158の提案、 セクション1.2:JSONの仕様 で説明されています。

48
Mehmet_

JSONがパディング付きの場合はapplication/jsonpになります。 JSONにパディングがない場合は、application/jsonになります。

両方に対処するには、パディングありでもパディングなしでも、 'application/javascript'を使用するのが賢明です。

48
Ankit Zalani

JSONをRESTコンテキストで使用している場合に、受け入れられた応答を拡張する...

RESTリソースとコレクションを表すときにapplication/x-resource+jsonapplication/x-collection+jsonを使うことについて 強い議論 があります。

そして、 jsonapi の仕様に従うことにした場合、 そうあるべきです それが文書化されているので、application/vnd.api+jsonの使用。

普遍的な標準はありませんが、転送されるリソースに追加されたセマンティクスが単なるapplication/jsonよりも明確なContent-Typeを正当化することは明らかです。

この推論に従って、他の文脈ではより具体的なContent-Typeを正当化することができます。

41
jgomo3

PHP開発者はこれを使用します。

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

    // Do something here...
?>
40
user3087089

JSONのREST AP​​Iからデータを取得する場合はcontent-typeを使用する必要があります。

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
38
Krishna

_ json _ (JavaScript Object Notation)と _ jsonp _ ( "JSON with padding")の形式は非常に似ているように思われるため、どのMIMEタイプを使用するべきかは非常にわかりにくいかもしれません。フォーマットは似ていますが、それらの間にはわずかな違いがいくつかあります。

それで、疑いがあるときはいつでも、私は非常に単純なアプローチ(ほとんどの場合は完璧に動作する)を持っています。すなわち、対応するRFC文書を調べて確認します。

_ json _ RFC 4627 (JavaScript Object Notation(JSON)のapplication/jsonメディアタイプ)は、JSON形式の仕様です。セクション6で、JSONテキストのMIMEメディアタイプは

application/json.

_ jsonp _ JSONP( "JSON with padding")は、ブラウザではJSONとは異なる方法で処理されます。 JSONPは通常のJavaScriptスクリプトとして扱われるため、application/javascript,をJavaScriptの現在の公式MIMEタイプとして使用する必要があります。しかし、多くの場合、text/javascript MIMEタイプも問題なく動作します。

text/javascriptRFC 4329 (Scripting Media Types)の文書では時代遅れとしてマークされているので、代わりにapplication/javascript typeを使用することをお勧めします。しかし、昔からの理由により、text/javascriptは依然として広く使用されており、クロスブラウザをサポートしています(application/javascript MIMEタイプ、特に古いブラウザでは必ずしもそうとは限りません)。

24

Content-Type: application/json - json
Content-Type: application/javascript - json-P
Content-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が正式に登録されました。

23
Kashif Solangi

興味深い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を返します。

6
behzad babaei

現在の正しい標準はapplication/jsonです。デフォルトのエンコーディングはUTF-8ですが、UTF-16やutf-32でも構いません。 JSONがUTF-16またはUTF-32で書かれているときは、バイナリcontent-transfer-encodingを使用する必要があります。

Jsonに関するより詳しい情報はここにあります: https://tools.ietf.org/html/rfc4627

バイナリ転送エンコーディングの詳細については、 https://www.w3.org/Protocols/rfc1341/5_Content-Transfer-Encoding.html

5
sammyb123

残りの答えを補足するために、JSONリンクデータ(JSON-LD) W3Cによる のMIMEタイプは次のとおりです。

application/ld+json

タイプ名: application

サブタイプ名: ld + json

さらに、同じ情報源から。

ファイル拡張子

.jsonld

5
alejnavab

多くのコンテンツタイプがある場合でも、これら3つのコンテンツタイプを常に覚えておくようにしてください 。あなたがより頻繁にこれらを使用しなければならないかもしれないように。

  • コンテンツタイプ:application/json
  • コンテンツタイプ:application/xml
  • コンテンツタイプ:text/html
1
cherankrish