Chinaunix首页 | 论坛 | 博客
  • 博客访问: 546520
  • 博文数量: 911
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 7395
  • 用 户 组: 普通用户
  • 注册时间: 2022-03-07 15:28
个人简介

天翼云是中国电信倾力打造的云服务品牌,致力于成为领先的云计算服务提供商。提供云主机、CDN、云电脑、大数据及AI等全线产品和场景化解决方案。

文章分类

全部博文(911)

文章存档

2026年(14)

2025年(202)

2024年(244)

2023年(247)

2022年(202)

我的朋友

分类: 网络与安全

2025-12-29 17:15:27

本文分享自天翼云开发者社区《 openresty中filter_by_lua使用》.作者:lucky_lyw
  1. body_filter_by_lua* 可能在一次请求中调用多次,跟响应数据量无关,取决于响应次数

2. body_filter_by_lua* 多数时候离不开有 header_filter_by_lua* 辅助


点击(此处)折叠或打开

  1. -- access_by_lua_file:
  2. ngx.say("123")
  3. ngx.say("456")

  4. -- body_filter_by_lua_file:
  5. local chunk, eof = ngx.arg[1], ngx.arg[2]
  6. print(chunk, eof)

  7. -- 结果
  8. -- body_filter_by_lua*首次调用时:123 false
  9. -- body_filter_by_lua*第二次调用时:456 false
  10. -- body_filter_by_lua*第三次调用时: 空 true
当代码运行到 body_filter_by_lua* 时,HTTP报头(header)已经发送出去了。如果在之前设置了跟响应体相关的报头,而又在 body_filter_by_lua*中修改了响应体,会导致响应报头和实际响应的不一致。举个简单的例子:假设上游的服务器返回了 Content-Length 报头,而 body_filter_by_lua* 又修改了响应体的实际大小。客户端收到这个报头后,按其中的 Content-Length 去处理,顺着一头栽进坑里。由于 Nginx 的流式响应,发出去的报头就像泼出去的水,要想修改只能提前进行。OpenResty 提供了跟 body_filter_by_lua* 相对应的 header_filter_by_lua*。header_filter 会在 Nginx 发送报头之前调用,所以可以在这里置空 Content-Length 报头:

点击(此处)折叠或打开

  1. header_filter_by_lua_block {
  2.     ngx.header.content_length = nil
  3. }


阅读(4) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~