Atendendo solicitações http com tcpserver

4

Estou tentando usar o tcpserver do ucspi-tcp para iniciar um script que retorna uma página da web simples. Meu script (hello.lua) é o seguinte:

#!/usr/bin/env lua
print([[HTTP/1.1 200 OK
Content-Type: text/html e <html>
<head> e <title>My title</title> e </head> e <body>
<h1>Hello in big font</h1> e </body> e </html>]])

Eu inicio com tcpserver -v -rh 0 9000 /path/to/hello.lua

Quando uso tcpcat myserver 9000 , recebo o retorno esperado:
HTTP/1.1 200 OK
Content-Type: text/html
<html> e <head> e <title>My title</title> e </head>
<body> em <h1> Hello in big font</h1> em </body> em </html>

No entanto, quando tento usar um webbrowser e aponto para http:\myserver:9000 , recebo um erro do navegador (no Google Chrome) Error 101 (net::ERR_CONNECTION_RESET): Unknown error , mesmo que o log do tcpserver mostre uma transação:
tcpserver: status 1/40
tcpserver: pid 21672 from <ip address of browser> e tcpserver: ok 21672 <server hostname>::::ffff:<server ip>:9000 <client hostname>::::ffff:<client ip>::3133 e tcpserver: end 21672 status 0

Eu sei que estou sentindo falta de algo básico aqui, mas não consigo juntar as peças do quebra-cabeça. Qualquer insight é apreciado! Obrigado!

    
por Keith Pimmel 22.02.2011 / 16:26

2 respostas

5

Você precisa de uma linha em branco entre os cabeçalhos e o conteúdo:

HTTP/1.1 200 OK
Content-Type: text/html

<html>
<head>
<title>My title</title>
</head>
<body>
<h1>Hello in big font</h1>
</body>
</html>
    
por 22.02.2011 / 17:38
4

RFC2616 especifica que a linha de status e as linhas de cabeçalho de uma resposta HTTP devem ser terminado com CRLF. Se você compôs seu script lua em uma máquina não-Windows, provavelmente não possui os terminadores de linha CRLF apropriados. Além disso, você precisa separar os cabeçalhos das mensagens do corpo com uma linha em branco (uma CRLF por si só).

    
por 22.02.2011 / 17:48

Tags