Hatena::ブログ(Diary)

kanonjiの日記 RSSフィード

http://kanonji.info/blog/ 2013年2月頃に移転しました。

2011-04-06

JSONとJSONPのContent-typeに書くMIMEタイプ

ファイル正しいMIMEタイプRFCIE用
jsonapplication/jsonhttp://www.ietf.org/rfc/rfc4627.txtRFC通り
jsonpapplication/javascripthttp://www.ietf.org/rfc/rfc4329.txttext/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だとエラーになってしまうんですが、400で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なので大丈夫かなという疑問だったんですが、何も気にせず表示できました。

参考

*1:エスケープ?

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/kanonji/20110406/1302065168