Я не эксперт в этой области, но вот что, как мне кажется, происходит ....
Браузер отправляет GET-запрос с полем заголовка «Connection: keep-alive».Таким образом, браузер ожидает сохранения соединения по крайней мере до тех пор, пока не получит полный фрагмент ответа.В соответствии с этим протоколом ответ сервера должен включать заголовок, указывающий длину ответа, чтобы браузер знал, когда он получил полный ответ.После этой точки соединение может быть закрыто без заботы браузера.
Исходный пример слишком быстро закрывает соединение, прежде чем браузер сможет проверить получение полного ответа.Любопытно, что если я запускаю этот пример и обновляю свой браузер несколько раз, он будет загружаться примерно каждые 1 из 10 попыток.Возможно, это ошибочное поведение из-за того, что браузер иногда запускает достаточно быстро, чтобы обойти мой сервер, закрывая соединение.
Ниже приведен пример кода, который последовательно выполняется в моем браузере:
require 'socket'
response = %{HTTP/1.1 200 OK
Content-Type: text;charset=utf-8
Content-Length: 12
Hello World!
}
server = TCPServer.open(80)
loop do
client = server.accept
client.puts response
sleep 1
client.close
end