openresty ngx_lua请求响应

请求头操作

ngx.req.set_header:添加、修改请求头

语法格式:ngx.req.set_header(name, value)
* name 如果不存在,表示添加
* name 如果存在,表示修改使用环境:set_by_lua*、rewrite_by_lua*access_by_lua*、content_by_lua*header_filter_by_lua*、body_filter_by_lua*# 示例
ngx.req.set_header(name, "gtlx"):设置单个值
ngx.req.set_header(test, {"1","2"}):使用数组设置多个值

ngx.req.clear_header:删除请求头

语法格式:ngx.req.clear_header(name)使用环境:set_by_lua*、rewrite_by_lua*access_by_lua*、content_by_lua*header_filter_by_lua*、body_filter_by_lua*# 示例
ngx.req.clear_header(name):直接删除请求头
ngx.req.set_header(test, nil):通过设置为nil,删除请求头

ngx.req.get_headers:获取请求头

语法格式:ngx.req.get_headers(max_headers?, raw?)使用环境:set_by_lua*、rewrite_by_lua*access_by_lua*、content_by_lua*header_filter_by_lua*、body_filter_by_lua*# 示例
location / {content_by_lua_block {local ngx = require "ngx";local headers = ngx.req.get_headers();for key,value in pairs(headers) doprint(key .. value)endngx.say(h["name"])    #获取名为name的请求头#等同于:ngx.var.http_name}
}

请求体操作

lua_need_request_body:强制获取请求体,默认不读取

语法格式:lua_need_request_body on|off
* off(默认):表示不读取请求体数据,通过ngx.var.request_body读取的数据为空
* on:开启读取请求体数据,ngx_lua不推荐使用这种方式读取请求体注意事项
* 如果读取的请求体数据超过client_body_buffer_size大小,$request_body、ngx.var.request_body读取的数据为空
* client_body_buffer_size、client_max_body_size设置相同,避免出现这种情况

ngx.req.read_body:开启读取请求体

语法:ngx.req.read_body()
环境:rewrite_by_lua*、access_by_lua*、content_by_lua*
* 同步读取请求体,且不会阻塞nginx事件循环

ngx.req.get_body_file:从临时文件读取请求体数据

语法:file_name = ngx.req.get_body_file()
环境:rewrite_by_lua*、access_by_lua*、content_by_lua*
* 获取存放请求数据的临时文件,并读取数据,以字符串返回
* 尽量控制请求体的大小,避免使用临时文件

ngx.req.get_body_data:从内存中读取请求体,返回字符串

语法:data = ngx.req.get_body_data()
环境:rewrite_by_lua*、access_by_lua*、content_by_lua*、log_by_lua*
* 从内存中读取请求体,返回字符串

ngx.req.get_post_args:从内存中读取请求数据,以table格式返回

语法:args, err = ngx.req.get_post_args(max_args?)
* 从内存中读取请求体,返回table数据
* max_args表示最多读取的参数个数环境:rewrite_by_lua*、access_by_lua*、content_by_lua*、log_by_lua*、header_filter_by_lua*、body_filter_by_lua*

响应头操作

ngx.header.headerName:添加、修改、删除响应头

语法:ngx.header.headerName = value、ngx.header["headerName"] = value
* headerName存在,表示修改响应头
* headerName不存在,表示添加响应头
* value设置为nil,表示删除响应头
* ngx.header.test_value = value:输出时,会自动转换为test-value = value环境:rewrite_by_lua*、access_by_lua*、content_by_lua*、log_by_lua*、header_filter_by_lua*、body_filter_by_lua*

ngx.resp.get_headers:获取响应头

语法:headers = ngx.resp.get_headers(max_headers?, raw?)
* 读取响应头,以table类型返回环境:rewrite_by_lua*、access_by_lua*、content_by_lua*、log_by_lua*、balancer_by_lua*、header_filter_by_lua*、body_filter_by_lua*

响应体操作

ngx.print、ngx.say:异步输出响应体

ngx.flush:强制刷新print、say的内容,转换为同步输出

语法格式:
* ngx.print(...):异步输出,等待内容全部到达缓冲区后输出
* ngx.say(...):异步输出,等待内容全部到达缓冲区后输出
* ngx.flush():强制刷新,flush将之前的内容立刻输出

使用示例

default.conf

server {listen       80;server_name  localhost;location /test {content_by_lua_block {ngx.say("hello");ngx.sleep(3);ngx.say("gtlx");}}location /test2 {content_by_lua_block {ngx.say("hello");ngx.flush();ngx.sleep(3);ngx.say("gtlx 2");}}location /test3 {content_by_lua_block {ngx.say("hello");ngx.flush(true);ngx.sleep(3);ngx.say("gtlx 3");}}#error_page  404              /404.html;error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/local/openresty/nginx/html;}}

创建容器

docker run -it -d -p 3000:80 \
-v /Users/huli/lua/openresty/conf7/default.conf:/etc/nginx/conf.d/default.conf \
--name open4 lihu12344/openresty

使用测试

# 全部内容等待3s后输出
huli@hudeMacBook-Pro conf7 % curl localhost:3000/test
hello
gtlx# hello先输出,gtlx 2等待3s后输出
huli@hudeMacBook-Pro conf7 % curl localhost:3000/test2
hello
gtlx 2# hello先输出,gtlx 2等待3s后输出
huli@hudeMacBook-Pro conf7 % curl localhost:3000/test3
hello
gtlx 3

使用示例 2

default.conf

server {listen       80;server_name localhost;location /test {client_body_buffer_size 1k;client_max_body_size 1k;content_by_lua_block {ngx.req.read_body()       ngx.say(ngx.req.get_body_data())}}location /test2 {client_body_buffer_size 1k;client_max_body_size 1k;content_by_lua_block {ngx.req.read_body();local args, err = ngx.req.get_post_args();if args thenfor key,value in pairs(args) doif type(value) == "table" thenngx.say(key, " ==> ", table.concat(value, " "))elsengx.say(key, " ==> ", value)endendelselocal file = ngx.req.get_body_file()if file thenngx.say("file body", file)endend}}#error_page  404              /404.html;error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/local/openresty/nginx/html;}}

创建容器

docker run -it -d -p 4000:80 \
-v /Users/huli/lua/openresty/conf7/default.conf:/etc/nginx/conf.d/default.conf \
--name open5 lihu12344/openresty

***********

使用测试

# /test
huli@hudeMacBook-Pro conf7 % curl -i localhost:4000/test -d "test=123&test=234&name=瓜田李下"
HTTP/1.1 200 OK
Server: openresty/1.21.4.1
Date: Tue, 05 Jul 2022 12:56:50 GMT
Content-Type: application/octet-stream
Transfer-Encoding: chunked
Connection: keep-alivetest=123&test=234&name=瓜田李下# /test2
huli@hudeMacBook-Pro conf7 % curl -i localhost:4000/test2 -d "test=123&test=234&name=瓜田李下"
HTTP/1.1 200 OK
Server: openresty/1.21.4.1
Date: Tue, 05 Jul 2022 12:56:32 GMT
Content-Type: application/octet-stream
Transfer-Encoding: chunked
Connection: keep-alivename ==> 瓜田李下
test ==> 123 234

get 请求

post form数据

post json数据

openresty ngx_lua请求响应相关推荐

  1. openresty ngx_lua常用指令

    openresty ngx_lua常用指令 请求中断 ngx.exit:请求中断 语法格式:ngx.exit(status) * status >= 200:立刻中断请求,返回状态码 * sta ...

  2. openresty ngx_lua获取环境变量

    openresty ngx_lua获取环境变量 环境变量 ngx.config.subsystem:当前请求的nginx环境 语法格式:subsystem = ngx.config.subsystem ...

  3. openresty ngx_lua重定向

    openresty ngx_lua重定向 ngx.redirect:https://github.com/openresty/lua-nginx-module#ngxredirect ngx.req. ...

  4. Servlet基础:接口、类、请求响应、配置、会话追踪、上下文、协作、异常

    10.1 Servlet介绍 ​ Servlet技术是Sun公司提供的一种实现动态网页的解决方案,它是基于Java编程语言的Web服务器端编程技术,主要用于在Web服务器端获得客户端的访问请求信息和动 ...

  5. Web请求响应简单整理

    简单对Web请求响应如何处理进行的整理,难免有理解不到位,理解有偏差的地方,如有理解有误的地方,希望大牛批评指正. 1.Web开发的定义 首先看看微软对Web开发的定义: Web开发是一个指代网页或网 ...

  6. “一切都是消息”--iMSF(即时消息服务框架)之【请求-响应】模式(点对点)...

    MSF的名字是 Message Service Framework 的简称,由于目前框架主要功能在于处理即时(immediately)消息,所以iMSF就是 immediately Message S ...

  7. java 请求响应_java http接口请求响应 request response

    接口类: 1 package org.sunshine.dcda.epg.wechat.controller.niao; 2 3 import javax.servlet.http.HttpServl ...

  8. nginx log记录请求响应日志及日志分割

    之前部署了quic的集群在aws,在测试的时候发现在大报文的情形下HTTP3的请求耗时比较不稳定,并且耗时比普通的HTTP2要大很多,就想看看请求的具体耗时有多少 请求响应日志记录 我的quic集群是 ...

  9. ASP.NET Web API 记录请求响应数据到日志的一个方法

    原文:ASP.NET Web API 记录请求响应数据到日志的一个方法 原文:http://blog.bossma.cn/dotnet/asp-net-web-api-log-request-resp ...

最新文章

  1. java实现将汉语转换为拼音
  2. JS nodeType返回类型
  3. oracle数据库buffer,Oracle数据库导入Buffer不足出现主机蜂鸣
  4. shell定时执行hive脚本文件
  5. tensorflow 模型压缩
  6. 如何异地加载 Spring Boot 配置文件?
  7. spring mvc原理_Spring MVC的工作原理,我们来看看其源码实现
  8. Jerry带您了解Restful ABAP Programming模型系列之三:云端ABAP应用调试
  9. 后台通过request.setAttribute向前台传值,前台如何去获取其中的对象或属性值
  10. 解决Flash挡住层用z-index无效的问题
  11. 聊聊传说中的散列哈希Hash算法,以及Java中的HashTable,HashMap,HashSet,ConcurrentHashMap......
  12. strong,weak, retain, assign的区别@property的参数
  13. Java学习笔记(一):Java基础
  14. 让机器看了几千万篇热门文章总结的17类热门标题方式模板
  15. 培训机构毕业的程序员被歧视的背后逻辑
  16. POE交换机和普通交换机哪里不同
  17. 51单片机74HC595级联测试proteus
  18. 【Centos】EFAK(kafka-eagle)对ZK、Kafka可视化管理工具容器化安装与配置
  19. Mac电脑怎么远程桌面连接?
  20. android Criteria

热门文章

  1. python脚本运行越来越慢
  2. PPM,PGM图片格式
  3. Math.cbrt() Math.sqrt() Math.pow()
  4. Idempotent Consumer
  5. Android连接逍遥模拟器
  6. 站内文案编辑seo关键词优化技巧
  7. JS-计算日期差值;计算日期之间的月数
  8. Linux系统load average异常值处理的trick
  9. linux移植1.3寸oled屏幕,芯片SH1106
  10. [bzoj1127][悬线法]KUP