2011年1月 7日

[ruby-list:47739] TCPServerクラスではacceptしたオブジェクトに対してgetsする必要はあるか?

はじめまして、魏と申します。

現在TCPServerを使った簡単なWEBServerを作っています。

うまくいかなかった箇所は、
サーバーからresponseを返す時に、HTTPのヘッダーとボディーを分けて出力しても、ヘッダーしかブラウザで認識できない問題です。
cl.print "HTTP/1.1 200/OK\r\nContent-type:text/html\r\n\r\n"
cl.write("<html><body><h1>vvvvvvvvvvvvvvvv</h1></body></html>")


一方
ヘッダーとボディーの間にgetsメソッドを呼ぶと、ブラウザでは正確に表示されます。
cl.print "HTTP/1.1 200/OK\r\nContent-type:text/html\r\n\r\n"
cl.gets
cl.write("<html><body><h1>vvvvvvvvvvvvvvvv</h1></body></html>")

getsを使わなくても、responseできると思ったのですが原因がわかりません。
よろしくお願いします。
(getsを使わない場合でもtelnetで見ると、ちゃんとボディーはクライアントに届いています。)


■ソースコード
----------------------------------------------------------------------
#!/usr/bin/env ruby
require 'socket'
s = TCPServer.new(8000)
loop {
cl = s.accept
Thread.start {
cl.print "HTTP/1.1 200/OK\r\nContent-type:text/html\r\n\r\n"
cl.gets
cl.write("<html><body><h1>vvvvvvvvvvvvvvvv</h1></body></html>")
cl.close
}
}


投稿者 xml-rpc : 2011年1月 7日 22:16
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/101176
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。