mirror of
https://github.com/lammertb/libhttp.git
synced 2025-08-13 12:42:25 +03:00
67 lines
2.0 KiB
Lua
67 lines
2.0 KiB
Lua
-- Set keep_alive. The return value specifies if this is possible at all.
|
|
canKeepAlive = mg.keep_alive(true)
|
|
now = os.date("!%a, %d %b %Y %H:%M:%S")
|
|
|
|
-- First send the http headers
|
|
mg.write("HTTP/1.1 200 OK\r\n")
|
|
mg.write("Content-Type: text/html\r\n")
|
|
mg.write("Date: " .. now .. " GMT\r\n")
|
|
mg.write("Cache-Control: no-cache\r\n")
|
|
mg.write("Last-Modified: " .. now .. " GMT\r\n")
|
|
if not canKeepAlive then
|
|
mg.write("Connection: close\r\n")
|
|
mg.write("\r\n")
|
|
mg.write("<html><body>Keep alive not possible!</body></html>")
|
|
return
|
|
end
|
|
if mg.request_info.http_version ~= "1.1" then
|
|
-- wget will use HTTP/1.0 and Connection: keep-alive, so chunked transfer is not possible
|
|
mg.write("Connection: close\r\n")
|
|
mg.write("\r\n")
|
|
mg.write("<html><body>Chunked transfer is only possible for HTTP/1.1 requests!</body></html>")
|
|
mg.keep_alive(false)
|
|
return
|
|
end
|
|
|
|
-- use chunked encoding (http://www.jmarshall.com/easy/http/#http1.1c2)
|
|
mg.write("Cache-Control: max-age=0, must-revalidate\r\n")
|
|
--mg.write("Cache-Control: no-cache\r\n")
|
|
--mg.write("Cache-Control: no-store\r\n")
|
|
mg.write("Connection: keep-alive\r\n")
|
|
mg.write("Transfer-Encoding: chunked\r\n")
|
|
mg.write("\r\n")
|
|
|
|
-- function to send a chunk
|
|
function send(str)
|
|
local len = string.len(str)
|
|
mg.write(string.format("%x\r\n", len))
|
|
mg.write(str.."\r\n")
|
|
end
|
|
|
|
-- send the chunks
|
|
send("<html>")
|
|
send("<head><title>Civetweb Lua script chunked transfer test page</title></head>")
|
|
send("<body>\n")
|
|
|
|
fileCnt = 0
|
|
if lfs then
|
|
send("Files in " .. lfs.currentdir())
|
|
send('\n<table border="1">\n')
|
|
send('<tr><th>name</th><th>type</th><th>size</th></tr>\n')
|
|
for f in lfs.dir(".") do
|
|
local at = lfs.attributes(f);
|
|
if at then
|
|
send('<tr><td>' .. f .. '</td><td>' .. at.mode .. '</td><td>' .. at.size .. '</td></tr>\n')
|
|
end
|
|
fileCnt = fileCnt + 1
|
|
end
|
|
send("</table>\n")
|
|
end
|
|
|
|
send(fileCnt .. " entries (" .. now .. " GMT)\n")
|
|
send("</body>")
|
|
send("</html>")
|
|
|
|
-- end
|
|
send("")
|