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




json レスポンス サンプル (20)

私はしばらくの間JSONを使いこなしていましたが、テキストとしてプッシュするだけで誰も(私が知っている)誰も傷つけることはありませんでしたが、うまくやってみたいと思います。

私は、JSONコンテンツタイプの "標準"と言われるものたくさんあります:

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

しかし、どちらが正しいか、またはベストですか? 私はそれらの間でセキュリティとブラウザサポートの問題があることを知ります。

JSONがREST APIによって返されている場合は 、同様の質問、 MIMEタイプ何ですか? しかし、私はもう少しターゲットを絞った答えがほしいと思います。


application/jsonは、PHPで素晴らしい配列やオブジェクトのデータを格納するために働いています。

このコードを使用して、 Google Cloud Storage(GCS)の JSONにデータを配置します.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"));

JSON:

レスポンスは、URLで渡されるクエリパラメータに従って、動的に生成されるデータです。

例:

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

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

JSON-P:

パディング付きのJSON。 レスポンスは、JSONデータで、関数呼び出しをラップします。

例:

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

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


JSONにパディングがある場合は、 application/jsonpなりapplication/jsonp 。 JSONがパディングなしであれば、 application/jsonなりapplication/json

両方を処理するには、「application / javascript」を使用することをお勧めします。


JSONのREST APIからデータを取得してコンテンツタイプを使用する必要がある場合

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

JSONはドメイン固有言語 (DSL)であり、JavaScriptとは独立したデータ形式であり、独自のMIMEタイプapplication/json持っていapplication/json 。 もちろん、MIMEタイプの尊重はクライアント主導であるため、 text/plainはバイトの転送のために行うことができますが、 application/jsonというベンダーのアプリケーションドメインへの解釈を不必要に押し上げることになります。 text/plainを使ってXMLを転送しますか?

しかし正直なところ、MIMEタイプの選択は、データのtext/plainまたはtext/HTML (HTMLでない場合)を型の消去のように解釈する方法についてのクライアントへのアドバイスです。これは、Object型のすべてのオブジェクト型付き言語で書かれています。

私が知っているブラウザー・ランタイムは、JSON文書を受け取り、介入なしに自動的にJavaScriptのアクセス可能オブジェクトとしてランタイムに利用可能にしますが、障害のあるクライアントと作業している場合、それはまったく別の問題です。 しかしそれはすべての話ではありません - RESTful JSONサービスはJavaScriptランタイムを持っていないことが多いですが、JSONを実行可能なデータ交換形式として使用することを止めません。 クライアントが不自由な人であれば、代わりにAjaxテンプレートサービスを介したHTMLインジェクションが考えられます。

アプリケーション/ JSON!


JSONをRESTコンテキストで使用しているときに受け入れられたレスポンスを拡張します...

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

また、 jsonapi仕様に従うことを決めた場合はapplication/vnd.api+json 使用する必要があります。

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

この推論の後、他のコンテキストは、より具体的なContent-Typeを正当化する可能性があります。


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

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

    // Do something here...
?>

UbuntuまたはDebianを使用していてApache経由で.jsonファイルを提供している場合は、正しいコンテンツタイプのファイルを提供したいかもしれません。 私は主にFirefox拡張機能JSONViewを使用したいので、これをやっていJSONView

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

application/json json

その後、Apacheを再起動します。

sudo service apache2 restart

MIMEタイプとしてapplication/jsonを使用してapplication/json場合のみ、2011年11月現在の最新バージョンのChrome、 FirebugFirebugます。

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

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


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/javascriptも廃止されています。 application/jsonは本当に唯一可能正解です。

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

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

もっと奇妙なのは、JSONをtext/xmlとして返すFlickrから送られたContent-Typeヘッダです。 Googleはtext/javascriptをいくつかのajax apisに使用してい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


JSON (JavaScript Object Notation)とJSONP (JSON with padding)の形式は非常によく似ているようで、どのMIMEタイプを使用するべきかは非常に混乱している可能性があります。 フォーマットは非常に似ているように見えますが、それらの間には若干の違いがあります。

だから疑いがあるときはいつでも、私は非常に単純なアプローチ(ほとんどの場合完全に見つかる)、つまり、対応するRFCドキュメントをチェックします。

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

application/json.

JSONP JSONP(「パディング付きJSON」)は、JSONとは別の方法でブラウザで処理されます。 JSONPは通常のJavaScriptスクリプトとして扱われるため、JavaScriptの現在の公式MIMEタイプであるapplication/javascript,を使用する必要があります。 しかし、多くの場合、 text/javascript MIMEタイプもうまく動作します。

text/javascriptrfc-editor.org/rfc/rfc4329.txt (Scripting Media Types)ドキュメントでは廃止とマークされているので、代わりにapplication/javascriptタイプを使用することをお勧めします。 しかし、従来の理由から、 text/javascriptはまだ広く使用されており、クロスブラウザーのサポートがあります(特に古いブラウザーでは、 application/javascript MIMEタイプの場合はそうではありません)。


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構成を変更できないためです。


JSONの場合:

Content-Type: application/json

JSONP

Content-Type: application/javascript

クライアント側からASP.NET Webサービスを呼び出す場合は、それを動作させるにはapplication/jsonを使用するapplication/json 。 私はこれがjQueryExtフレームワークで同じだと考えています。


クライアント側の環境では、十分にサポートされているWebアプリケーションでブラウザ間のサポートについて調査することが必須です。

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


多くの人が触れたように、 application/jsonは正解です。

しかし、まだ説明されていないことは、あなたが提案した他の選択肢が意味することです。

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

  • text/javascript :廃止されました。 application/javascriptを使用する場合は、 application/javascriptを使用する必要がありapplication/javascript

  • text/x-javascript :上記の状況のた​​めの実験的なMIMEタイプ。

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

全体として、コンテンツタイプに疑問があるときはいつでも、 このリンクをチェックしてください


実際にはJavaScriptであるJSONとも呼ばれるJSONPを使用していない限り、JSONの適切なコンテンツタイプはapplication/jsonです。したがって、適切なコンテンツタイプはapplication/javascriptです。


正解は次のとおりです。

Content-Type: application/json

私は以下を使用します

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




content-type