我想通过lua_ngx_module来使用lua来进行一些访问控制,在access_by_lua指令写入lua逻辑。在这当中对于一个http请求,怎么获取请求的头部信息?
怎么区分请求和响应的头部?也就是说ngx.header.HEADER这个接口对应的是请求中的header还是给http响应添加头部?
我想要在lua中给响应添加Set-Cookie,因为需要种多个cookie,所以我写了如下一个函数:
1.function set_cookie(str)
2. local temp = {}
3. if (nil == ngx.header.set_cookie) then
4. table.insert(temp, str)
5. ngx.header["Set-Cookie"] = temp --这个地方写成ngx.header.set_cookie和ngx.header["Set-Cookie"]有何区别呢
6. else
7. table.insert(ngx.header["Set-Cookie"], str)
8. end
9.end
因为设置多个Set-Cookie的头部需要给ngx.header["Set-Cookie"]赋值一个table,所以我需要添加一个Set-Cookie的头部时,就会调用一次上面的set_cookie(str)函数。
但是第一次设置的时候是运行正常的,第二次调用set_cookie时,会执行第7行的代码,这时会报错:bad argument#1 to 'insert' (table expected, got string)
难道是说之前给ngx.header["Set-Cookie"]赋值的table因为只有一个元素被转化成了string??