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と同じです。JavaScriptMIMEタイプは、以前はtext/javascriptだったけど、2006年4月にRFC4329が出てapplication/javascriptになったんだとか。

IEって使えない

Internet Explorer 7 では application/(java|ecma)script のほうはエラーになる。

JavaScript ソースの MIME タイプ - odz buffer

途中から変わったもんだから、IE7application/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

JSONtext/javascriptを使ってたりと、結構古い記事なので今はどうなってるのか分からないけど、HTTPヘッダーのContent-typeの書き方で読めたり読めなかったりというのは、やっぱりあったみたいです。こう言うの見ると、application/jsonはIE6とかIE7でちゃんと読めるのかとか気になってきますね。IE6はもう対応したくないので、とりあえず今は調べないけど。

charset: UTF-8が要るか要らないかについても、調べてないので断定的なことは書けません。というか、以前調べたんだけど、急いでたのでまとめずに忘れちゃってます。確かあのときの結論は、マルチバイトとか入っててもUnicodeエンコード*1されて、JSON自体はASCIIの範囲内で表記されてるという事で、charset: UTF-8は要らないんじゃないかと思いました。phpJSONを生成したけどjson_encode()UTF-8な文字列しかちゃんとJSONにしてくれません。JSONをパースして表示したりしたいhtmlはEUC-JPなので大丈夫かなという疑問だったんですが、何も気にせず表示できました。

*1:エスケープ?