2010-12-14 24 views
3

J'essaye de faire un petit serveur HTTP dans Ruby. C'est juste pour apprendre comment fonctionnent les choses, rien de grand. Donc ce que j'ai fait est d'envoyer une requête ajax au serveur. Le serveur écoute sur le port 2000, et donc la requête ajax est également sur le port 2000.Serveur HTTP avec Ruby

Le problème auquel je suis confronté est que la requête ajax est renvoyée uniquement avec les en-têtes, le contenu est manquant. J'ai essayé tout ce que je pouvais trouver, mais il semble ne pas trop ...

Je joins le code, pour vous de jeter un oeil

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 
} 

La demande ajax fonctionne lorsqu'il est pointé vers un script PHP fonctionnant sur Apache. le seul problème semble se produire lors de l'utilisation de ce serveur.

Toute aide est, comme toujours, très apprécié :)

Cordialement, Amit

Répondre

1

Votre code fonctionne bien.

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

Maintenant, vous devez savoir ce qui ne va pas avec votre requête AJAX ...

+0

Cela fonctionne bien même quand j'ouvre l'url dans un navigateur ... seule chose est qu'il ne répond pas quand je l'utilise avec ajax ... la même requête ajax répond très bien au script php fonctionnant sur Apache. .. – Amit

+2

Ensuite, vous devrez peut-être modifier cette question avec cette information. Une chose que vous pouvez faire est de comparer les réponses (y compris les en-têtes). –

1

J'ai aussi inclus l'en-tête Content-Length et qui semblait éclaircir les erreurs que je recevais avec boucle:

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

L'en-tête HTTP Access-Control-Allow-Origin vous manque dans vos en-têtes de réponse. Puisque vous essayez une requête AJAX, et qu'il s'agit essentiellement d'une requête XHTTP, vous devez la transmettre dans la réponse au client, afin de réaliser les implémentations de partage de ressources d'origine croisée de votre navigateur.

ajoutez simplement votre serveur 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"

et vous pouvez essayer de voir si les travaux.