JSONとJSONPのContent-typeに書くMIMEタイプ
ファイル | 正しいMIMEタイプ | RFC | IE用 |
json | application/json | http://www.ietf.org/rfc/rfc4627.txt | RFC通り |
jsonp | application/javascript | http://www.ietf.org/rfc/rfc4329.txt | text/javascript |
JSONの場合はapplication/json
だけど、JSONPって実体はコールバック関数でJSONを包んだ単なるJavaScriptなので、MIMEタイプはJavaScriptと同じです。JavaScriptのMIMEタイプは、以前はtext/javascript
だったけど、2006年4月にRFC4329が出てapplication/javascript
になったんだとか。
IEって使えない
Internet Explorer 7 では application/(java|ecma)script のほうはエラーになる。
JavaScript ソースの MIME タイプ - odz buffer
途中から変わったもんだから、IE7はapplication/json
だとエラーになってしまうんですが、ちょっとしたメモ - Not FoundでIE8でどうなるか試したところ、やっぱりエラーになりました。ほんとIEって使えない。
詳しくは書かないけど実際にHTTP Headerに書くときは
Safariでマルチバイトな文字を含む場合は、「charset=utf-8」があったほうがいいです。
Opera(8.5)はtext/javascriptだと根本的にだめみたいです。
Catalyst::View::JSONは「text/javascript+json」とかなっているんだけどどうするのが良いのでしょう。さっきまで、間違えて「utf8」って書いてしまっていたんだけど、IE以外はうまく認識してくれますね。
JSONとContent-Type : blog.nomadscafe.jp
JSONにtext/javascript
を使ってたりと、結構古い記事なので今はどうなってるのか分からないけど、HTTPヘッダーのContent-typeの書き方で読めたり読めなかったりというのは、やっぱりあったみたいです。こう言うの見ると、application/json
はIE6とかIE7でちゃんと読めるのかとか気になってきますね。IE6はもう対応したくないので、とりあえず今は調べないけど。
charset: UTF-8
が要るか要らないかについても、調べてないので断定的なことは書けません。というか、以前調べたんだけど、急いでたのでまとめずに忘れちゃってます。確かあのときの結論は、マルチバイトとか入っててもUnicodeでエンコード*1されて、JSON自体はASCIIの範囲内で表記されてるという事で、charset: UTF-8
は要らないんじゃないかと思いました。phpでJSONを生成したけどjson_encode()
はUTF-8な文字列しかちゃんとJSONにしてくれません。JSONをパースして表示したりしたいhtmlはEUC-JPなので大丈夫かなという疑問だったんですが、何も気にせず表示できました。