深入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是一个回调函数, 所有的APIUSE路由之前会先调用它;

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则为你想监听的端口号.

keycert指定私钥与证书所在的文件路径, 不配套的证书与私钥怎会抛出异常. 如果证书有密码则需要配置pw.

合理的设置backlog能减少连接被重置的情况(默认值为128).

11. 开启rest语法支持


函数原型: httpd:enable_rest()

调用后httpd将会开启rest语法支持, 所有rest语法的匹配到的参数将会放在HTTP Contentquery属性上.

基本语法如下所示:

--- 语法①
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)

语法①的idNumber类型, 如果你需要的是Integer. 那么请自行进行转换.

语法②与③的idString类型, 它可以是任何合理的字符串. 语法③只是语法②的一种简写.

语法④与⑤的nlistslist均为table类型, 内部会自动转换成指定类型数组.

注意:

  • 不建议大规模使用rest语法(性能一般), 如无特殊情况请不要开启支持;

  • 不建议使用④与⑤语法, 因为并不知道客户端传来的数据是否"合理";

三、回调参数


HTTP Content 客户端请求的所有请求头部与请求体的集合, 并且包含服务器对请求辨别后的一些参数也防止在内;

args : GET或者POST方法传递的参数会放到这个属性下面, 也支持multipart/form-data的参数传递方式;

headers: 一个table类型的key-value数据结构, 框架层不会进行headers进行内容解析;

body: 目前支持的类型包含: multipart/form-dataapplication/x-www-form-urlencodedapplication/json;

json/xml: 在bodyjson类型时, contentjson属性为true; 在bodyxml类型时, contentxml属性为true.

file : 它是数组类型, 当客户端使用multipart/form-data传递数据时将会有这个属性;

四、继续学习


本章节我们深入学习了httpd库的方法使用, 下一章节我们将学习使用template

Copyright © CandyMi 2019-2022 all right reserved,powered by Gitbook该文件修订时间: 2021-03-26 23:17:31

results matching ""

    No results matching ""