PEAR::HTTP_Requestの相対パスでのリダイレクト対応について

Locationヘッダに相対パスが指定されているとき、パスとかクエリストリングの扱いが変。

Locationヘッダに相対パスが指定されている場合、以下のような処理が問題になっています。

まず、リダイレクト先URLを作るときに、URIのパス部分しか更新しません。つまり、リダイレクト元のURIにクエリストリングなどが含まれていると、リダイレクト先URIを絶対URIにするときに、リダイレクト元のクエリストリングが使われます。

そして、URIのパスを更新する処理で、Locationヘッダに指定された文字列をそのまま使っています。これは、つまり、"hoge_path?hoge_query#hoge_fragment"だった場合にこれをそのままURIのパスとして使う様になると言う事です。

まとめると、以下のような挙動になります。

http://example.com/?ichi-ban
  Location: redirect?ni-ban
http://example.com/redirect?ni-ban?ichi-ban

と言う訳で、上記の様にリダイレクト先URLがおかしなものになってしまいます。

これ、世間的には既知ですよね?それとも、HTTP_Requestはあまり使われていないのでしょうか?みんな、socketとかcurlとかを使うのですか?


あれ?クエリストリングって、リダイレクトで引き継いだりしませんよね?


HTTP_Requestを修正して差分を記載していましたが、いろいろとバグだらけの修正をしてしまっていたので、消しました。

プロフィール

このブログ記事について

このページは、koshigoeが2007年12月27日 13:20に書いたブログ記事です。

ひとつ前のブログ記事は「gdatacopierの例外」です。

次のブログ記事は「TracとMercurial」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。