有一个题:打印 http 请求的请求 url、方法、querystring、POST 请求中的 json body,如果 json body 的大小大于 100 字节,返回 413 状态码
我是这么写的1
2
3
4
5
6
7
8
9
10
11
12ngx.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
14ngx.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))