Lua web快速開發(fā)指南(4) - 詳細(xì)了解httpd庫的作用

2019-06-18 22:53 更新

httpd庫是基于HTTP 1.1協(xié)議實(shí)現(xiàn)而來, 內(nèi)置了高性能的http協(xié)議解析器與urldecode解析庫.

httpd庫默認(rèn)情況下就能工作的很好, 但是在一些需求較為極端的場(chǎng)景還是需要微調(diào)一下參數(shù).

httpd常用的內(nèi)置方法介紹

1. httpd:timeout(number)

設(shè)置每個(gè)連接到最大空閑(idle)連接等待時(shí)間, 超過這個(gè)數(shù)值httpd將主動(dòng)斷開連接. (默認(rèn)值為:30秒)

2. httpd:max_path_size(number)

設(shè)置Path的最大長(zhǎng)度, 超過這個(gè)值httpd將會(huì)返回414. (默認(rèn)值為: 1024)

3. httpd:max_header_size(number)

設(shè)置Header最大長(zhǎng)度, 超過這個(gè)值httpd將會(huì)返回431. (默認(rèn)值為: 65535)

4. httpd:max_body_size(number)

設(shè)置Body的最大長(zhǎng)度, 超過這個(gè)值將會(huì)返回413. (默認(rèn)為 1024 * 1024)

5. httpd:before(function)

before方法決定API與USE路由回調(diào)在觸發(fā)之前的行為, 默認(rèn)情況下允許所有路由通過.

before方法一般用來設(shè)置與修改用戶驗(yàn)證路由行為(例如頭部驗(yàn)證), 這提供了開發(fā)者基于before函數(shù)設(shè)計(jì)中間件的機(jī)會(huì).

當(dāng)開發(fā)者設(shè)置了function后(即是是一個(gè)空函數(shù)), 需要利用http庫來決定行為.

6. httpd:group(type, prefix, handles)

group方法提供了一種批量注冊(cè)路由的方式, 為一組同一組路由提供簡(jiǎn)單便方便在注冊(cè)方法.

第一個(gè)參數(shù)type為需要批量注冊(cè)的路由類型; 初始化httpd對(duì)象后, 使用app.USEapp.API進(jìn)行傳值;

第二個(gè)參數(shù)prefix為string類型的頭部; 例如:/api、/admin;

第三個(gè)參數(shù)為一組路由處理函數(shù)或處理類數(shù)組; 類型為: {route = '/login', class = class};

注意: 此方法僅支持批量注冊(cè)API與USE路由, 不可同時(shí)注冊(cè)不同類型路由;

7. httpd:static(folder, ttl)

listen方法用于告訴httpd對(duì)象監(jiān)聽指定端口.

第一個(gè)參數(shù)ip暫未被httpd使用(但是必須設(shè)置), 默認(rèn)監(jiān)聽所有網(wǎng)卡的'0.0.0.0'地址與指定的端口號(hào);

backlog為用戶最大連接等待隊(duì)列, 合理的設(shè)置能減少連接被重置的情況(默認(rèn)值為128).

8. httpd:run()

在httpd庫所有參數(shù)與路由設(shè)置完畢之后, 調(diào)用run方法開啟監(jiān)聽模式.

httpd的請(qǐng)求日志

日志格式為: [年/月/日 時(shí):分:秒] - [ip] - [x-real-ip] - [path] - [method] - [http code] - [request handle timeline]

httpd的中間件

httpd庫提供了before方法, 為開發(fā)人員自定義'中間件'行為提供了可能. 具體使用方法請(qǐng)參考http庫.

http content

每個(gè)http請(qǐng)求都會(huì)在調(diào)用before與用戶注冊(cè)的路由時(shí)為其傳入一個(gè)content, 這個(gè)Content是客戶端請(qǐng)求的所有參數(shù).

args : 支持標(biāo)準(zhǔn)get或者post的參數(shù), 對(duì)a[1]=1&a[2]=2將會(huì)不會(huì)解析為數(shù)組類型; 支持multipart/form-data的參數(shù)傳遞方式;

header: 原始header key-value表, 框架層不會(huì)進(jìn)行header進(jìn)行內(nèi)容解析. (一般情況下沒這個(gè)必要);

body : 目前body支持這些類型: multipart/form-data、application/x-www-form-urlencoded、application/json、application/xml;

json/xml: 在body為json類型的時(shí)候, content的json屬性為true; 在body為xml類型的時(shí)候, content的xml屬性為true.

file : 當(dāng)客戶端使用multipart/form-data傳遞數(shù)據(jù)時(shí)將會(huì)有這個(gè)屬性; 這個(gè)屬性是數(shù)組類型;

繼續(xù)學(xué)習(xí)

一下章我們一起學(xué)習(xí)如何利用template庫構(gòu)建httpd模板引擎

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)