PATH_INFO と <base> と Web の「完全」保存

ここんところ地味に調べていた範囲で分かったところ。

  • 動的に出力しているページは PATH_INFO のパラメータを利用するしないに関わらず、PATH_INFO 付きのリクエストが可能
  • PATH_INFO 付きのリクエストの際、クライアントがページの PATH を誤認してしまい、相対パスで指定されている画像などが正しく取得できないばかりか、この場合はすべての画像などのリクエストがスクリプト本体に集中する1
  • つまり、画像をたくさん使っているページは、PATH_INFO 付きリクエストをしただけで軽く DoS

といった動作が起きる。つーことで、動的に生成しているページでは PATH_INFO を利用している利用していないに関わらず <base> を吐くようにした方がよい。2面倒くさいから同じ意味を持つ HTTP ヘッダか何かないのかと思ったけど、どうやらそういうものはないらしい。

問題は <base> ってどのクライアントに対しても安心して使えるものなの?ということなんだけど、i-mode, Vodafone, EZweb, L-mode の HTML および XHTML の仕様には base 要素はありました。EZweb の proxy サーバによる XHTML → HDML 変換でもこれは生きるようです。WILLCOM では Opera か NetFront が標準と考え(超乱暴)、どの環境でも使えると踏んでいいんじゃなかろか。

で、ふと思ったのは、<base> を HTML の中に書いちゃったら、ローカルに保存してもそれが有効じゃん?てこと。試しにやってみたらバッチリ <base> の指示通り、ページが公開されていた URL に対して画像をリクエストしてくれた。警告も何も出ない。3んー。これってどうなんだろう? Thunderbird ではプライバシーやセキュリティの観点からリモートの画像をダウンロードしない設定が可能だけど、ブラウザの場合はどういう動作するのがいいのかね。

じゃあ「完全」保存の場合はどうなるの?と思ったら、これは以下のようになった。

ブラウザ<base>の処理
IE6SP2コメントアウト
Firefox 1.0.7コメントアウト
Opera 8.5削除

どのブラウザも、ローカルに保存したファイルだけで完結するように HTML を修正している。

ついでに、「完全」てどの程度完全なのよ?と思って CSS の @import を利用しているページを保存してみた。今度は

ブラウザ@import への追随
IE6SP2×
Firefox 1.0.7×
Opera 8.5

こういう結果になった。Opera 優秀。と感じるが、Opera は注意が必要。保存したファイルは HTML も画像もすべて同じフォルダにどばっと保存される。うっかりデスクトップに保存した日にゃ大変な目に遭う。

  1. PATH_INFO が付いたまま画像などをリクエストするため。 

  2. すべて絶対パスで指定しているか、PATH_INFO 付きのアクセスを禁止するとか rewrite するとかしてるのなら話は別だけど。 

  3. とりあえず Firefox のデフォルトの設定ね。 

More