HTTP-сервер с Ruby - PullRequest
       3

HTTP-сервер с Ruby

3 голосов
/ 14 декабря 2010

Я пытаюсь сделать небольшой HTTP-сервер в Ruby.Это просто значит узнать, как все работает, ничего особенного.Так что я сделал, чтобы отправить серверу запрос 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
}

Запрос ajax работает, когда указаноPHP-скрипт, работающий на Apache.кажется, единственная проблема возникает при использовании этого сервера.

Любая помощь, как всегда, высоко ценится:)

С уважением, Amit

Ответы [ 3 ]

1 голос
/ 12 августа 2011

Я также включил заголовок Content-Length, и это, казалось, прояснило ошибки, которые я получал с помощью 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
}
1 голос
/ 03 сентября 2013

Вам не хватает заголовка HTTP Access-Control-Allow-Origin в заголовках ответа. Поскольку вы пытаетесь выполнить запрос 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"

и тогда вы можете попытаться увидеть, работает ли.

1 голос
/ 14 декабря 2010

Ваш код работает нормально.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...