深入Web
一、基本介绍
httpd
库是基于HTTP/1.1
协议的实现, 内置了基本的处理方法、转换函数、请求/响应等等.httpd
库默认情况下就能工作的很好, 但是在一些较为特殊的场景还是需要微调一下参数.
二、内置方法
1. 空闲连接
函数原型: httpd:timeout(number)
设置每个连接到最大空闲(idle)连接等待时间, 超过这个数值httpd将主动断开连接. (number
默认值为: 0, 永不超时)
2. 路径长度
函数原型: httpd:max_path_size(number)
设置Path的最大长度, 超过这个值httpd将会返回414
. (number
默认值为: 1024)
3. 头部大小
函数原型: httpd:max_header_size(number)
设置Header最大长度, 超过这个值httpd将会返回431
. (number
默认值为: 65535)
4. 请求体大小
函数原型: httpd:max_body_size(number)
设置Body的最大长度, 超过这个值将会返回413
. (number
默认为:1024 * 1024)
5. 日志写入
函数原型: httpd:log(folder)
指定日志写入的文件名称, 默认情况下不会写日志到文件.
6. 关闭日志
函数原型: httpd:nolog(true)
关闭所有httpd的日志输出.
7. 路由过滤
函数原型: httpd:before(function)
此方法注册了一个function
参数过滤器; 参数function
是一个回调函数, 所有的API
与USE
路由之前会先调用它;
8. 监听Unix Domain
函数原型: httpd:listenx(unix_domain_path, backlog)
listen
方法用于告诉httpd对象监听指定unix domain socket
(本地套接字).
合理的设置backlog
能减少连接被重置的情况(默认值为128
).
9. 监听端口
函数原型: httpd:listen(ip, port, backlog)
listen
方法用于告诉httpd对象监听指定端口, ip
指定为"0.0.0.0"即可, port
则为你想监听的端口号.
合理的设置backlog
能减少连接被重置的情况(默认值为128
).
10. 监听端口(SSL)
函数原型: httpd:listen_ssl(ip, port, backlog, key, cert, pw)
listen
方法用于告诉httpd对象监听指定端口, ip
指定为"0.0.0.0"即可, port
则为你想监听的端口号.
key
与cert
指定私钥与证书所在的文件路径, 不配套的证书与私钥怎会抛出异常. 如果证书有密码则需要配置pw
.
合理的设置backlog
能减少连接被重置的情况(默认值为128).
11. 开启rest语法支持
函数原型: httpd:enable_rest()
调用后httpd
将会开启rest语法
支持, 所有rest语法
的匹配到的参数
将会放在HTTP Content
的query
属性上.
基本语法如下所示:
--- 语法①
app:api("/article/{number:id}.html", function(content)
--- TODO
end)
--- 语法②
app:api("/article/{string:id}.html", function(content)
--- TODO
end)
--- 语法③
app:api("/article/{id}.html", function(content)
--- TODO
end)
--- 语法④
app:api("/nlist/{number[]:nlist}", function(content)
--- TODO
end)
--- 语法⑤
app:api("/slist/{string[]:slist}", function(content)
--- TODO
end)
语法①的id
为Number
类型, 如果你需要的是Integer
. 那么请自行进行转换.
语法②与③的id
为String
类型, 它可以是任何合理的字符串
. 语法③只是语法②的一种简写.
语法④与⑤的nlist
与slist
均为table
类型, 内部会自动转换成指定类型数组
.
注意:
不建议
大规模
使用rest语法
(性能一般), 如无特殊情况
请不要开启支持;不建议使用④与⑤语法, 因为并不知道客户端传来的数据是否
"合理"
;
三、回调参数
HTTP Content
客户端请求的所有请求头部与请求体的集合, 并且包含服务器对请求辨别后的一些参数也防止在内;
args
: GET
或者POST
方法传递的参数会放到这个属性下面, 也支持multipart/form-data
的参数传递方式;
headers
: 一个table
类型的key-value
数据结构, 框架层不会进行headers
进行内容解析;
body
: 目前支持的类型包含: multipart/form-data
、application/x-www-form-urlencoded
、application/json
;
json/xml
: 在body
是json
类型时, content
的json
属性为true
; 在body
是xml
类型时, content
的xml
属性为true
.
file
: 它是数组类型, 当客户端使用multipart/form-data
传递数据时将会有这个属性;
四、继续学习
本章节我们深入学习了httpd
库的方法使用, 下一章节我们将学习使用template
库