以前、インプレス社のAKIBA PC Hotline!のiモード版をFOMAで見ることができないということを紹介したことがあります。この件について少々掘り下げて調べてみました。
なお、AKIBA PC Hotline!のサイトを題材として取り上げているのは筆者がAKIBA PC Hotline!で初めて気づいた現象であるために取り上げているだけで、それ以上の意味はないことをあらかじめ述べておきます。
FOMAでiモード版AKIBA PC Hotline!を見ようとすると、
無効なデータを受信しました(502) |
と表示されます。しかし、同じページを従来のiモード機で表示すると問題なく見ることができます。このことからFOMAと従来機では異なる点があることがわかります。そこで、両者がHTTPでどのようにやり取りをしているかを調べてみました。
まずFOMA P2101Vでiモードを使用した際にWebサーバーに送られるリクエストをキャプチャしてみました。その結果を以下に示します。(実際のプロトコルでは「www.localhost.net
」はアクセス対象のドメイン名が入ります。)
GET / HTTP/1.1 |
次にSO503iで同様にキャプチャした結果を以下に示します。(これも実際のプロトコルでは「www.localhost.net
」はアクセス対象のドメイン名が入ります。)
GET / HTTP/1.0 |
このようにFOMAではHTTP/1.1で、従来機ではHTTP/1.0でアクセスしていることがわかります。(そのこと自体は仕様として公開されています。)その他にはFOMAでは許容するMIMEタイプ(=全て)と言語(=日本語)を送っていますが、これは特別なことではありません。
このリクエストに対してAKIBA PC Hotline!のWebサーバーがどのように応答するかを調べた結果(ヘッダ部分のみ)を以下に示します。
HTTP/1.1 200 OK |
HTTP/1.1 200 OK |
このように応答に実質的な差がないことがわかります。(Set-Cookie
はクッキーをブラウザに投げるためのヘッダです。これはユニークビジターを認識するために一般的に行われているクッキー設定です。このため、この行のみFOMA P2101VとSO503iで異なる内容が投げられています。)
この得られた情報を元に、エンティティボディのみ別のものとして同じヘッダを返すプログラムを作成してFOMA P2101Vで接続してみたところ、やはり先ほどのエラーメッセージが出てエンティティボディの表示を行うことができませんでした。
このことから問題はヘッダにあることがわかります。そこでいろいろとヘッダに手を加えてみたところ、Content-Length
を加えると例のエラーメッセージが出なくなることがわかりました。やはりiモードではContent-Length
は必須ということです。特にHTTP/1.1の場合、このヘッダが存在しないとFOMAでは表示不可能になるようです。HTTP/1.0であれば問題なく表示できます。これは、Keep-Alive
を含む可能性のあるHTTP/1.1の実装に関するFOMA用iモードセンターサーバーの制限なのでしょう。
余談になりますが、ここで紹介したリクエスト時とレスポンス時のヘッダ部分もパケット通信料に反映されます。リクエスト時のヘッダは固定なので仕方ありませんが、サーバー側のレスポンスはできる限り余計なヘッダを返さないように設定した方がユーザーにとってうれしいサイトといえます。