2018-12-19 12:23:14 +01:00
# HTTP Server Module
2018-12-16 21:39:43 +01:00
| Since | Origin / Contributor | Maintainer | Source |
| :----- | :-------------------- | :---------- | :------ |
2019-01-13 22:01:57 +01:00
| 2015-01-19 | [Vladimir Dronnikov ](https://github.com/dvv ) | [Vladimir Dronnikov ](https://github.com/dvv ) | [http.lua ](../../lua_modules/http/httpserver.lua ) |
2018-12-16 21:39:43 +01:00
This Lua module provides a simple callback implementation of a [HTTP 1.1 ](https://www.w3.org/Protocols/rfc2616/rfc2616.html ) server.
### Require
```lua
2018-12-19 12:23:14 +01:00
httpserver = require("httpserver")
2018-12-16 21:39:43 +01:00
```
### Release
```lua
httpserver = nil
2018-12-19 12:23:14 +01:00
package.loaded["httpserver"] = nil
2018-12-16 21:39:43 +01:00
```
## httpserver.createServer()
2018-12-19 12:23:14 +01:00
Function to start HTTP server.
2018-12-16 21:39:43 +01:00
#### Syntax
`httpserver.createServer(port, handler(req, res))`
#### Parameters
- `port` : Port number for HTTP server. Most HTTP servers listen at port 80.
- `handler` : callback function for when HTTP request was made.
#### Returns
`net.server` sub module.
#### Notes
2018-12-19 12:23:14 +01:00
Callback function has 2 arguments: `req` (request) and `res` (response). The first object holds values:
2018-12-16 21:39:43 +01:00
2018-12-28 23:33:26 +01:00
- `conn` : `net.socket` sub module
2018-12-19 12:23:14 +01:00
- `method` : Request method that was used (e.g.`POST` or `GET` )
- `url` : Requested URL
- `onheader` : value to setup handler function for HTTP headers like `content-type` . Handler function has 3 parameters:
- `self` : `req` object
2018-12-28 23:33:26 +01:00
- `name` : Header name
2018-12-19 12:23:14 +01:00
- `value` : Header value
- `ondata` : value to setup handler function HTTP data. Handler function has 2 parameters:
- `self` : `req` object
- `chunk` : Request data
2018-12-16 21:39:43 +01:00
The second object holds functions:
2018-12-19 12:23:14 +01:00
- `send(self, data, [response_code])` : Function to send data to client. `self` is `req` object, `data` is data to send and `response_code` is HTTP response code like `200` or `404` (for example)
- `send_header(self, header_name, header_data)` : Function to send HTTP headers to client. `self` is `req` object, `header_name` is HTTP header name and `header_data` is HTTP header data for client.
2018-12-16 21:39:43 +01:00
- `finish([data])` : Function to finalize connection, optionally sending data. `data` is optional data to send on connection finalizing.
2019-01-13 22:01:57 +01:00
Full example can be found in [http-example.lua ](../../lua_modules/http/http-example.lua )