« Google Reader … 遅いです…よね | メイン | Webフィード.cc サービスを開始しました »
2005年10月18日
MyRSS.jp - Transfer-Encoding: chunked による不具合
先日、MyRSS.jp の改修をした際に、 MyRSS.jp のクローラーを HTTP/1.1 に変更しました。
が、、、これにより、Content-Encoded: chunked で送信されるサイトを正しく解析できないという問題が発生してしまいました。
一部のウェブサイトでは、URL や タイトルが文字化け または リンク先が見つからない状態になっていた可能性があります。大変申し訳ございません。
原因が特定できましたのですが、一旦クローラーを HTTP/1.0 に戻す作業を 10/19(水) 午前中に実施します。以降問題は発生しなくなると思います。
この度はMyRSS.jp の改修によりご迷惑をお掛けしまして大変申し訳ございませんでした。
また、ご連絡いただきましたユーザー様には大変感謝しております。
これからも良いサービスを提供できるよう頑張っていきますので、引き続き 何卒よろしくお願いいたします。
---
以下、(ちょっと初歩的で恥ずかしいのですが・・・)少し技術的な解説もしておきたいと思います。
ウェブサイトのコンテンツを取得する場合、最も簡単には(wget とは言わず・・・) telnet を使って
% telnet myrss.jp 80
GET / HTTP/1.0
Host: myrss.jp
とたたくと、インデックスページが取得できます。
通常はこれでいいのですが、少し凝った指定をしながらウェブページを取得したい場合は HTTP/1.1 でアクセスしたくなることがあります(たぶん)。
% telnet myrss.jp 80
GET / HTTP/1.1
TE: deflate
Host: myrss.jp
このとき、サーバーが
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: text/html
のように chuked 指定で返答してきた場合、結果として得られたものは、そのままでは インデックスページ にはならず、ちょっとした結合操作が必要となります。
相手ウェブサーバーから結果として得られるものは
(サイズ) + (本文) を複数集めたものになっています(最後には 0 が入る)ので、サイズを見ながら本文を切り取って結合するといった処理が必要になります。
MyRSS.jp の改修では、内部的にソケット接続で HTTP を直接たたいている箇所で、chunked な場合の結合に失敗してしまっていた、というわけです。
ソケット接続のサンプルプログラムで HTTP/1.1 で接続しているものが結構あったりしますが、基本的には HTTP/1.0 を使うほうがいいと思います。(chunked をきちんと処理すればいいだけなのですが・・・通常は HTTP/1.0 で十分だと思いますので・・・orz)
投稿者 aka : 2005年10月18日 22:50 / 2005年10月 / (~2006) My RSS について
トラックバック
このエントリーのトラックバックURL:
http://133.242.136.64/mt-tb-sf.cgi/243
コメント
》通常は HTTP/1.0 で十分だと思いますので
1.1指定への変更で取得できるサイトは増えたと思いますよ。実際、1.0(または無指定だと0.9?)ではなにもドキュメントを返さないサーバもありますし。
ともあれ、お疲れ様でした。
投稿者 えるしで : 日時 2005年10月19日 17:43
コメントありがとうございます。
HTTP/1.0 を受け付けないサイトもあるのですね・・・
悩ましいところです。。
情報、ありがとうございました。
投稿者 aka : 日時 2005年10月19日 18:33