From: YANAGAWA Kazuhisa Date: 2000-11-10T22:03:57+09:00 Subject: [ruby-list:25882] net/http takes wrong value for Host with proxy Net::HTTP は Net::HTTP#connect で Net::HTTPCommand.new を実行していて, このとき HTTP ヘッダのデフォルトを作っています.Host フィールドの値は 渡されたソケットの送信先アドレスとポート番号. Proxy を使う場合,Net::HTTP.Proxy で proxy server のアドレスとポートを 与えていて,connect が渡すソケットも proxy を向いた物です.結果として proxy を利用する場合,HTTP ヘッダの Host フィールドにはproxy のアドレ スとポートから作られた文字列が入ります. ....Proxy 越しだと名前ベースのバーチャルホストを使っているサイトの path にアクセスできません.それはもう,全く.HTTP ヘッダを Host が目的 サイトをさすように上書きする(get や head に {"Host" => "targetsite:port"} を渡す)とアクセスできるようなので,これが原因で間違いないと思います. # start でヘッダ設定作るようにすると透過性を保てるかな? それともなにかかんちがいしてる? だれも proxy 越しにアクセスしない,な んていう事は無いと思うんだけど,今まで聞いた話には無いし.他で確認でき ますかね? # name based virtual host の有名なのって,なにかな? とりあえず,この一 # 週間ぐらい 404 だなぁと思いつつデータとりにいかせたままだったのは私 # ですごめんなさい,とかあやまってみたり :-P # 以下はちょっと別の話. Response の HTTP ヘッダを読むのは case ignorant でできますけど,送信時 に渡す引数では正規化してませんね.これ仕様なら仕様で構わないっちゃあ構 わないんですけど,「{"connection" => "close"} を渡したのに keep-alive するのはなぜ?」なんていうわかりにくい話の原因になりゃしないかと思うん ですが.上書きする時なんとかしません? Persistent connection 使ってると,get した後 connection 切りにいった時 にはソケット閉じてて Errno::EPIPE っていう問題は, 2.x なんていうえらく 古い DeleGate が CERN HTTPd の下につながってるなんていう変なネットワー ク構成の性という気がひしひしとしているので多分どうにもならないんだな.... # 使うといろいろ出てくるものだ,というお話. -- 柳川和久 @ 東大阪市 . 大阪府 November 10, 2000 Q. こんな私でも幸せになれるでしょうか? A. その予定はありません(笑)