2010-12-14 57 views
3

我想在Ruby中製作一個小的HTTP服務器。它只是爲了學習東西如何運作,沒有什麼大不了的。所以我所做的就是向服務器發送一個ajax請求。服務器正在偵聽端口2000,所以ajax請求也在端口2000上。HTTP服務器與Ruby

我面對的問題是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 
} 

時指出,一個PHP腳本Ajax請求工作在Apache上運行。使用此服務器時似乎會出現唯一的問題。

任何幫助,一如既往,深爲讚賞:)

問候, 阿米特

回答

1

你的代碼工作正常。

$ 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. 

現在你要找出什麼地方錯了你的AJAX請求......

+0

即使當我在瀏覽器中打開url時,它仍然可以正常工作......唯一的一點是,當它與ajax一起使用時,它不會響應...相同的ajax請求很好地響應了在apache上運行的php腳本。 .. – Amit 2010-12-14 12:39:12

+2

然後你可能不得不用這個信息來修改這個問題。你可以做的一件事是比較響應(包括標題)。 – 2010-12-14 13:23:05

1

我還包括Content-Length頭,並且似乎在清理我的捲曲度得到錯誤:

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 
} 
1

您在響應標題中缺少了Access-Control-Allow-Origin HTTP標頭。 由於您正在嘗試AJAX請求,並且它基本上是一個XHTTPRequest,您需要將它傳遞給客戶端的響應,以完成瀏覽器的跨源資源共享實現。

只需添加在您的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"

,然後你可以嘗試看看,如果作品。