From: zunda Date: 2005-09-27T18:51:47+09:00 Subject: [ruby-list:41188] Re: 1.8.2 と 1.8.3 の WEBrick::HTTPRequest#query の動作の変化について zundaです WEBrick::HTTPRequest#queryの動作について。 --- Hiroyuki Iwatsuki からのメッセージ: > 岩月と申します。 > > 05/09/27 に zunda さんは書きました: > > BitChannelの内部では、lib/bitchannel/handler.rbでWEBrick::HTTPRequest#query['name'] > > を呼んでリクエストされたページ名を解釈しているようです。下記のdiffにあるように、 > > このメソッドが参照するURLが、ruby-1.8.2では環境変数SCRIPT_NAME、PATH_INFO、 > > QUERY_STRINGをつなぎ合わせて作られていたのに対して、ruby-1.8.3ではREQUEST_URI > > をもとにして作られているようです。このため、ruby-1.8.3で動くBitChannelはリクエスト > > されたページ名が得られずに、いつでもFrontPageを表示するようになっています。 > > 以下の記事あたりが関係しそうな気がします。 > > [ruby-dev:26235] WEBrick::CGI::Socket#request_line and ENV["REQUEST_URI"] > http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/26235 お知らせいただきありがとうございました。 なるほど。WEBrick::CGI#request_uriにとっては1.8.3の方が期待する動作、という ことになりますね。一方、WEBrick::HTTPRequest#queryにとっては期待に反する動作 ということになりそうな気がします。 下記のような変更で、WEBrick::HTTPRequest#queryからもWEBrick::CGI#request_uri からも期待される動作が得られるように思うのですがいかがでしょうか? diff -ur ruby-1.8.3/lib/webrick.orig/cgi.rb ruby-1.8.3/lib/webrick/cgi.rb --- ruby-1.8.3/lib/webrick.orig/cgi.rb 2005-09-26 21:23:05.000000000 -1000 +++ ruby-1.8.3/lib/webrick/cgi.rb 2005-09-26 23:49:17.000000000 -1000 @@ -251,6 +251,10 @@ ret end end + + def query_string + @env["QUERY_STRING"] + end end end end diff -ur ruby-1.8.3/lib/webrick.orig/httprequest.rb ruby-1.8.3/lib/webrick/httprequest.rb --- ruby-1.8.3/lib/webrick.orig/httprequest.rb 2005-07-14 13:00:22.000000000 -1000 +++ ruby-1.8.3/lib/webrick/httprequest.rb 2005-09-26 23:50:18.000000000 -1000 @@ -103,7 +103,7 @@ @path = HTTPUtils::normalize_path(@path) @host = @request_uri.host @port = @request_uri.port - @query_string = @request_uri.query + @query_string = socket.respond_to?(:query_string) ? socket.query_string : @request_uri.query @script_name = "" @path_info = @path.dup rescue __________________________________ For All Sports Fans! http://pr.mail.yahoo.co.jp/yells/