我的工作要求我在Ruby中实现一个Web服务器,而无需使用任何图书馆的任务。我有一个基本的服务器设置来返回"Hello World"
响应,我准备好进入下一步。Ruby的Web服务器挂在试图解析HTTP请求
下一步是生成基于所述HTTP请求的HTTP响应。这是我遇到麻烦的地方,似乎我的程序中的while
循环导致服务器挂起。
Web服务器的代码:
require 'socket'
server = TCPServer.new('localhost', 2345)
http_request = ""
loop do
socket = server.accept
request = socket.gets
while line = socket.gets
puts line
http_request << line
end
response = "Hello World!\n"
socket.print "HTTP/1.1 200 OK\r\n" +
"Content-Type: text/plain\r\n" +
"Content-Length: #{response.bytesize}\r\n" +
"Connection: close\r\n"
socket.print "\r\n"
socket.print response
puts "DONE with while loop!"
socket.close
end
在上面的代码中,我试图把HTTP请求到一个字符串http_request
和解析,以确定我想,以产生HTTP响应。我已经在没有while循环的情况下测试了我的代码,并且能够使用localhost:2345/test
在我的浏览器中访问Hello World页面。但是,通过添加while
循环,我不再能够加载页面,字符串"DONE with while loop!"
也不会被打印到控制台中。
有谁知道为什么我的Web服务器是挂?我接近完全错误的问题吗?
所以没有一个通用的解决方案,让我保存整个请求转换成'string'以后可以解析?我打算将整个HTTP请求存储在'string'中,解析它以确定我需要在HTTP响应中发回的内容。 –
@CrystalKemper一般不会,因为你需要知道请求体的末尾是为了停止读取数据,否则你最终只会阻塞并等待更多。您可以一次读取标题,然后处理它们。 – matt
我明白了...谢谢你对如何处理身体请求的回答和建议!我认为请求行和标题是我需要的这个任务:)。 –