Pertanyaan Melayani permintaan http dengan tcpserver


Saya mencoba menggunakan tcpserver dari ucspi-tcp untuk meluncurkan skrip yang mengembalikan halaman web sederhana. Skrip saya (hello.lua) adalah sebagai berikut:

#!/usr/bin/env lua
print([[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>]])

Saya meluncurkannya dengan tcpserver -v -rh 0 9000 /path/to/hello.lua

Ketika saya menggunakan tcpcat myserver 9000, Saya mendapatkan hasil yang diharapkan:
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> 

Namun, ketika saya mencoba menggunakan browser web dan menunjuk ke http:\\myserver:9000, Saya mendapatkan kesalahan browser (di Chrome) Error 101 (net::ERR_CONNECTION_RESET): Unknown error, meskipun pencatatan tcpserver menunjukkan transaksi:
tcpserver: status 1/40
tcpserver: pid 21672 from <ip address of browser>
tcpserver: ok 21672 <server hostname>::::ffff:<server ip>:9000 <client hostname>::::ffff:<client ip>::3133
tcpserver: end 21672 status 0 

Saya tahu saya kehilangan sesuatu yang mendasar di sini, tetapi saya tidak bisa mengumpulkan potongan-potongan teka-teki itu. Wawasan apa pun dihargai! Terima kasih!


4
2018-02-22 15:26


asal




Jawaban:


Anda memerlukan garis kosong antara header dan konten:

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>

5
2018-02-22 16:38





RFC2616 menetapkan bahwa baris status dan baris header dari respons HTTP harus diakhiri dengan CRLF. Jika Anda menyusun skrip lua Anda pada mesin non-Windows, maka Anda mungkin tidak memiliki terminator CRLF yang tepat. Juga, Anda perlu memisahkan header pesan dari badan dengan garis kosong (CRLF sendiri).


4
2018-02-22 16:48