quinku (luarocks) (download)

quinku is a simple, opinionated HTTP 1.1 server with optional support for HTTPS and multipart requests. It requires only LuaSocket to perform and is otherwise written in pure Lua.

Example of a simple response and GET query:

local http = require"quinku"

local function handler(request)
	local response = {
		status = 200,
		headers = {}
	}
	
	if request.path == "/" then
		if request.get["boob"] == "please give me html" then
			response.headers["Content-Type"] = "text/html; charset=UTF-8"
		end
		
		response.body = "Hello, World!"
	else
		response.status = 404
		response.body = "Oops"
	end
	
	return response
end

local settings = {
	ip = "0.0.0.0",
	port = 25000,
	handler = handler
}

http.run(settings)

Note that quinku may mutate the tables you pass onto it.

By default, quinku assumes the response body to be plain-text encoded with UTF-8.

The request structure contains:

File uploads may only exist in post, and are exposed as tables with the filename and value fields.

The response structure may contain any of these fields:

None are necessary, but data given must be consistent (e.g. Content-Length may not be different from the true body length.)

HTTPS (untested) requires the LuaSec module and is enabled by extending the settings table:

local settings = {
	ip = "0.0.0.0",
	port = 25000,
	handler = handler,
	sec = {
		key_file = "/path/to/cert.key",
		cert_file = "/path/to/the.crt"
	}
}