Nginx的一个谜题

有一个题:打印 http 请求的请求 url、方法、querystring、POST 请求中的 json body,如果 json body 的大小大于 100 字节,返回 413 状态码

我是这么写的

1
2
3
4
5
6
7
8
9
10
11
12
ngx.req.read_body()

local args = ngx.req.get_body_data()

ngx.say(args)
ngx.say(string.len(args))

if (string.len(args) > 100) then
ngx.log(ngx.ERR, "lslslslslsl")

ngx.exit(413)
end

进行post请求,curl -X POST --data '{"id":1,"name":"sjtsjt"}' "http://192.168.15.179:8081/test1"

结果发现无论是不是大于100个字节都返回200,查看一下nginx error日志,发现
attempt to set status 413 via ngx.exit after sending out the response status 200,大意是已经发出了200,我还要尝试修改状态为413,记录错误。

关于这个错误的案例

https://github.com/openresty/lua-resty-redis/issues/15

那么怎么修改呢?

方法1:调整顺序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
ngx.req.read_body()

local args = ngx.req.get_body_data()



if (string.len(args) > 100) then
ngx.log(ngx.ERR, "lslslslslsl")

ngx.exit(413)
end

ngx.say(args)
ngx.say(string.len(args))

-------------本文结束感谢您的阅读-------------