2010-12-14 8 views
3

私はRubyで小さなHTTPサーバを作ろうとしています。そのことはちょっとしたものが何かを学ぶことを意味し、大きなものは何もありませだから私はサーバーにajaxリクエストを送ることです。サーバーはポート2000でリッスンしていますので、ajaxリクエストもポート2000にあります。Rubyを使ったHTTPサーバ

私が直面している問題は、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

+2

それからこの情報でこの質問を修正しなければならないかもしれません。あなたができることの1つは、応答(ヘッダーを含む)を比較することです。 –

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"
をして、あなたの作品かどうかを確認しようとすることができます。

関連する問題