使用Ruby的HTTP服务器

使用Ruby的HTTP服务器,ruby,http,Ruby,Http,我正在尝试用Ruby制作一个小型HTTP服务器。这只是为了学习东西是如何工作的,没什么大不了的。所以我所做的就是向服务器发送一个ajax请求。服务器正在监听端口2000,因此ajax请求也在端口2000上 我面临的问题是,ajax请求只返回标题,而内容丢失。我尝试了我能找到的一切,但似乎也失败了 我已附上代码,供您查看 require 'socket' # Get sockets from stdlib server = TCPServer.new(2000) #

我正在尝试用Ruby制作一个小型HTTP服务器。这只是为了学习东西是如何工作的,没什么大不了的。所以我所做的就是向服务器发送一个ajax请求。服务器正在监听端口2000,因此ajax请求也在端口2000上

我面临的问题是,ajax请求只返回标题,而内容丢失。我尝试了我能找到的一切,但似乎也失败了

我已附上代码,供您查看

require 'socket'               # Get sockets from stdlib
server = TCPServer.new(2000)  # Socket to listen on port 2000
loop {                         # Servers run forever
  client = server.accept       # Wait for a client to connect
  headers = "HTTP/1.1 200 OK\r\nDate: Tue, 14 Dec 2010 10:48:45 GMT\r\nServer: Ruby\r\nContent-Type: text/html; charset=iso-8859-1\r\n\r\n"
  client.puts headers  # Send the time to the client
  client.puts "<html>amit</html>"
  client.close                 # Disconnect from the client
}
require'socket'#从stdlib获取套接字
server=TCPServer.new(2000)#用于侦听端口2000的套接字
循环{#服务器永远运行
client=server.accept#等待客户端连接
headers=“HTTP/1.1 200 OK\r\n日期:2010年12月14日星期二10:48:45 GMT\r\n服务器:Ruby\r\n内容类型:text/html;charset=iso-8859-1\r\n\r\n”
client.put标题#将时间发送给客户端
client.puts“amit”
client.close#断开与客户端的连接
}
当指向在Apache上运行的PHP脚本时,ajax请求正在工作。唯一的问题似乎是在使用此服务器时出现的

一如既往,我们非常感谢您的帮助:)

问候,, Amit

您的代码运行良好

$ telnet localhost 2000
HTTP/1.1 200 OK
Date: Tue, 14 Dec 2010 10:48:45 GMT
Server: Ruby
Content-Type: text/html; charset=iso-8859-1

<html>amit</html>


Connection to host lost.
$telnet localhost 2000
HTTP/1.1200ok
日期:2010年12月14日星期二10:48:45 GMT
服务器:Ruby
内容类型:text/html;字符集=iso-8859-1
阿密特
与主机的连接丢失。

现在,您必须找出AJAX请求的问题所在…

我还包括了
内容长度
标题,这似乎消除了我在curl中遇到的错误:

require 'socket'               # Get sockets from stdlib
server = TCPServer.new(2000)   # Socket to listen on port 2000
loop {                         # Servers run forever
  client = server.accept       # Wait for a client to connect
  resp = "<html>amit</html>"
  headers = ["HTTP/1.1 200 OK",
             "Date: Tue, 14 Dec 2010 10:48:45 GMT",
             "Server: Ruby",
             "Content-Type: text/html; charset=iso-8859-1",
             "Content-Length: #{resp.length}\r\n\r\n"].join("\r\n")
  client.puts headers          # Send the time to the client
  client.puts resp
  client.close                 # Disconnect from the client
}
require'socket'#从stdlib获取套接字
server=TCPServer.new(2000)#用于侦听端口2000的套接字
循环{#服务器永远运行
client=server.accept#等待客户端连接
resp=“amit”
headers=[“HTTP/1.1200正常”,
“日期:2010年12月14日星期二10:48:45 GMT”,
“服务器:Ruby”,
“内容类型:text/html;charset=iso-8859-1”,
“内容长度:#{resp.Length}\r\n\r\n”].join(“\r\n”)
client.put标题#将时间发送给客户端
客户机
client.close#断开与客户端的连接
}

您的响应标头中缺少
访问控制允许源代码
HTTP标头。
由于您正在尝试一个AJAX请求,而且它基本上是一个XHTPrequest,因此需要在响应中将其传递给客户端,以便完成浏览器的跨源资源共享实现

只需添加您的HTTP服务器:

headers = "HTTP/1.1 200 OK\r\n" headers += "Access-Control-Allow-Origin: *\r\n" headers += "Date: Tue, 14 Dec 2010 10:48:45 GMT\r\nServer: Ruby\r\nContent-Type: text/html; charset=iso-8859-1\r\n\r\n" headers=“HTTP/1.1 200正常\r\n” headers+=“访问控制允许来源:*\r\n” headers+=“日期:2010年12月14日星期二10:48:45 GMT\r\n服务器:Ruby\r\n内容类型:text/html;字符集=iso-8859-1\r\n\r\n”
然后您可以尝试查看是否有效。

即使我在浏览器中打开url,它也可以正常工作。。。唯一的问题是,当我将它与ajax一起使用时,它不会响应。。。同样的ajax请求对apache上运行的php脚本的响应非常好……那么您可能需要用这些信息来修正这个问题。您可以做的一件事是比较响应(包括标题)。