何度も書いてるのと、WWWサーバのアクセスログを見ている人にはお分かりの通り、わたしのケータイからインターネットへうろうろするのは自宅サーバで Delegate を画像圧縮PROXYとして動かしてここを経由しています。
で、だいたいはうまく動くのですが、一部のページ(例: http://www.google.co.jp/ T^T)なんかはHTMLの途中でちょん切れてしまうのでうまく表示されません。他のページではだいたい表示されるのと、CFIでの加工は画像のみを対象にしつつブラウザで画像を表示しない設定にしてもおかしくなっていたので、おそらく Delegate のバグであろうとほったらかしにしていました。
で、本日インターネットをうろうろしていますと、こちらのページに答えが載っておりました。一部引用しますと、
問題はcfiを使うとなぜだか webサーバ -> delegate -> クライアント gzipされたtext/html 伸長されたtext/html gzipされたときの gzipされたときの Content-Length: Content-Length: というような感じになりました。IEではContent-Lengthを無視するのか正常に表示 されるのだけど、京ぽんオペラでは最後が切れてしまいます。
フムフム、つまり表示できないページってのはWWWサーバからgzipで圧縮して送られるページってことですな。対策としてはDelegateのCFIでgzip圧縮してやると(てゆーか何か加工すると) Content-Lengthが再設定されるのだそうです。
ただ、この設定は過去に試したことがあるのですが、うちの delegated でこれをやると、AirH"電話での表示がはちゃめちゃになっちゃうのですねー。おかしーなー、なにが違うのだろう? と思って元ネタをそのままコピペするとちゃんと動くのです(笑)。うむむむ、なんでー? と思って目を凝らしてよく見るとバグがいました。
Content-Type: text/htmlふっ、ヘッダの書き換え行が無効な命令だったからgzipしたかたまりを text/html として表示していたのね・・・。まぬけすぎです(^^;)
Ouptut-Header: Content-Encoding: gzip
Body-Filter: /usr/bin/gzip --best
そんなわけで、幾つかの表示できないページもちゃんと動くようになりました。今の設定では Content-Type: が text/ で始まらなくて、かつ gzip 圧縮されたページは途中で切れるはずなのですが、そんなのあんまり無いと思うし そもそもAirH電話"では扱えない形式である可能性が極めて高いので、これで良しとしておきましょう。
□ 関連記事