メッセージ。 - diary
2010-03-16
# [日記] 朝の進捗
昨夜はご飯を食べると急激に眠くなって寝てしまった。その代わり、今朝は早めに起きて作業中。Amazon S3のテストがうまく動かない原因を調べていて、ちょっと変なところがあると分かってきた。クライアントとプロキシの間をパケットキャプチャをして調べているのだが、HTTPのHEADメソッドでデータを取りにいった際の戻りとして、HTTPボディが返ってきている。
正確には、HTTPのHEADメソッドではHTTPボディを取得しないはずなんだが、プロキシがそのへんを無視してというか混乱していてボディを無理矢理取得しようとしている(コード的にはport->stringが動いていて、一応content-length分のデータ(NULLストリング)が取得できている)。これはHTTPシーケンスとしてはおかしいので、このへんの問題が、Amazon S3のテストを止める原因になっていると思われる。
なお、どうしてこうなってしまったかというと、プロキシサーバーの実装で、HTTPでソケットからデータを読み込む部分(下位からのリクエストと上位からのレスポンス)を単に共用してしまっていることが原因だと思われる。下位からのリクエストと上位からのレスポンスは、フォーマットが非常に似ている。だから当初は、同じロジックでデータを取得できるんじゃないかと考えたのだ。
ところが実際には、HEADメソッドの場合はcontent-lengthが0より大きい数値であってもHTTPボディを取得しないとか、content-lengthやtransfer-encodingが指定されていないときにHTTPボディはどう扱うのかといった部分で、いくつかの条件分岐をしなければならない。この「条件」に相当する部分について、ぼくの理解が曖昧になっていることが原因になって今回の問題が起こっているということが分かった。
で、修正なのだが、やっぱり2~3日ぐらいかかるかなという感じ。コードの修正量じたいは少ないと思うんだけど、あまりad hocにコードをいじっても良くない気がする。プロトコル実装のコアな部分だから、フラグプログラミングみたいに、ちょっと変なコードを書くとはまってしまう感じ。
正確には、HTTPのHEADメソッドではHTTPボディを取得しないはずなんだが、プロキシがそのへんを無視してというか混乱していてボディを無理矢理取得しようとしている(コード的にはport->stringが動いていて、一応content-length分のデータ(NULLストリング)が取得できている)。これはHTTPシーケンスとしてはおかしいので、このへんの問題が、Amazon S3のテストを止める原因になっていると思われる。
なお、どうしてこうなってしまったかというと、プロキシサーバーの実装で、HTTPでソケットからデータを読み込む部分(下位からのリクエストと上位からのレスポンス)を単に共用してしまっていることが原因だと思われる。下位からのリクエストと上位からのレスポンスは、フォーマットが非常に似ている。だから当初は、同じロジックでデータを取得できるんじゃないかと考えたのだ。
ところが実際には、HEADメソッドの場合はcontent-lengthが0より大きい数値であってもHTTPボディを取得しないとか、content-lengthやtransfer-encodingが指定されていないときにHTTPボディはどう扱うのかといった部分で、いくつかの条件分岐をしなければならない。この「条件」に相当する部分について、ぼくの理解が曖昧になっていることが原因になって今回の問題が起こっているということが分かった。
で、修正なのだが、やっぱり2~3日ぐらいかかるかなという感じ。コードの修正量じたいは少ないと思うんだけど、あまりad hocにコードをいじっても良くない気がする。プロトコル実装のコアな部分だから、フラグプログラミングみたいに、ちょっと変なコードを書くとはまってしまう感じ。
2010-03-12
# [日記] 夜の進捗(なし)
なんか、帰ってくると非常に眠くて、あまり仕事ができない。本当のことをいえば、実は今年確定申告をしたほうがよいとかしないでもよいとかそういう話もあるのだが、疲れてできてない…。まぁ確定申告は来週の月曜が締め切りだから、それまでに頑張ろう…。あと、帰宅後に作業日報を書いて送っているのだが、それを帰宅後に書くのにも時間と労力がかかってて、その作業時間はどこに付けるの?みたいな話があって、いろいろややこしい。on top of that、今週末はTOEICを受けようと思ってて、その勉強もしなければいけないのだ。