前言

适用场景:添加CDN缓存时间、操作set-cookie、标记业务数据类型等。

获取响应头

  • 指令:ngx.resp.get_headers
  • 语法:headers = ngx.resp.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*log_by_lua*balancer_by_lua*
  • 含义:读取当前请求的响应头,并返回一个lua的table类型的数据
  • 示例
server {
# ...
location /testlua {
content_by_lua_block {
local ngx = require "ngx";
local h = ngx.resp.get_headers()
for k,v in pairs(h) do
ngx.say(string.format("Header name: %s, value: %s",k,v))
end
-- 从table中读取指定响应头的值
ngx.say(h["connection"])
}
}
}

请求测试:

curl -i http://192.168.0.10/testlua

修改响应头

  • 指令:ngx.header.HEADER
  • 语法:ngx.header.HEADER = VALUE
  • 环境:rewrite_by_lua*access_by_lua*content_by_lua*header_filter_by_lua*body_filter_by_lua*log_by_lua*balancer_by_lua*
  • 含义:对响应头进行修改、清除、添加等操作。(输出响应头时,默认会将“_”替换为"-")
  • 示例
localtion /testlua {
content_by_lua_block {
local ngx = require "ngx";
ngx.header.myrespheader = "helloworld"
ngx.header.content_type = 'test/plain'
ngx.header.second_header = "hellonginx" -- 下划线会变成中划线
ngx.header["third_header"] = "hellolua" -- 等同于 ngx.header.third_header = "hellolua"
ngx.header["forth_header"] = {"test10=10;env=10","test11=11;env=11"} -- 一个响应头里面设置两个值
local h = ngx.resp.get_headers() -- 读取响应头
for k,v in pairs(h) do
ngx.say(string.format("Header name: %s, value: %s",k,v))
end
}
}

请求测试:

curl -i http://192.168.0.10/testlua

HTTP/2 200
server: openresty
date: Sun, 28 May 2023 02:39:26 GMT
content-type: test/plain
myrespheader: helloworld
second-header: hellonginx
third-header: hellolua Header name: second-header, value: hellonginx
Header name: third-header, value: hellolua
Header name: myrespheader, value: helloworld
Header name: content-type, value: test/plain
Header name: connection, value: close

删除响应头

如果要删除一个响应头,将其赋值为 nil 即可,例如:

ngx.header["second_header"] = nil

参考

  • 《Nginx实战:基于lua语言的配置、开发与架构详解》

[nginx]lua控制响应头的更多相关文章

  1. Nginx配置各种响应头防止XSS,点击劫持,frame恶意攻击

    为什么要配置HTTP响应头? 不知道各位有没有被各类XSS攻击.点击劫持 (ClickJacking. frame 恶意引用等等方式骚扰过,百度联盟被封就有这些攻击的功劳在里面.为此一直都在搜寻相关防 ...

  2. 修改nginx的http响应头server字段

    信息泄露类型:HTTP服务器响应头Server字段信息泄露 示例: 解决: 需要重新对nginx编译安装: [root@localhost ~]# tar zxvf nginx-1.8.1.tar.g ...

  3. 【Nginx】修改响应头,根据不同请求IP重定向到不同IP

    背景: 使用CAS登录的过程中会涉及到三次重定向,如果在同一个局域网内,是没有任何问题的,但如果涉及到跨网访问,这个问题就比较蛋疼了. 解决思路: 通过Nginx对要访问的系统进行代理,根据请求IP来 ...

  4. nginx 定义:响应头和请求头

    1) 响应头 add_header 例如: add_header Cache-Control no-cache; add_header Access-Control-Allow-Origin *; a ...

  5. nginx 添加response响应头

    硬添

  6. nginx替换响应头(重点:如何在替换时加上if判断)

    在实现微信小程序内嵌非业务域名时,通过nginx做镜像网站绕过小程序业务域名检测,但有一些表单页面提交后会返回一个302状态,由响应头Location的值决定提交成功后的跳转地址.那么问题来了,这个地 ...

  7. OpenResty(Nginx+Lua)开发入门

    Nginx入门 本文目的是学习Nginx+Lua开发,对于Nginx基本知识可以参考如下文章: nginx启动.关闭.重启 http://www.cnblogs.com/derekchen/archi ...

  8. 高并发 Nginx+Lua OpenResty系列(2)——Nginx Lua API

    Nginx Lua API 和一般的Web Server类似,我们需要接收请求.处理并输出响应.而对于请求我们需要获取如请求参数.请求头.Body体等信息:而对于处理就是调用相应的Lua代码即可:输出 ...

  9. (转)X-Frame-Options响应头缺失漏洞

    原文:https://blog.csdn.net/ljl890705/article/details/78071601 x-frame-options响应头缺失漏洞. 故名思意,就是返回的响应头信息中 ...

  10. Web安全 之 X-Frame-Options响应头配置

    最近项目处于测试阶段,在安全报告中存在" X-Frame-Options 响应头缺失 "问题,显示可能会造成跨帧脚本编制攻击,如下图: X-Frame-Options: 值有三个: ...

随机推荐

  1. 京东APP百亿级商品与车关系数据检索实践

    导读 本文主要讲解了京东百亿级商品车型适配数据存储结构设计以及怎样实现适配接口的高性能查询.通过京东百亿级数据缓存架构设计实践案例,简单剖析了jimdb的位图(bitmap)函数和lua脚本应用在高性 ...

  2. 在C#中使用SQLite数据库

    轻量级桌面程序数据库不太适合用SQLServer.MySQL之类的重量级数据库,嵌入式数据库更好.在对比Access.SQLite.Firebird数据库后发现SQLite较另外两个有较多优点. 环境 ...

  3. vue处理图片路径出问题时显示默认图片

    <img :src="item.url? item.url: '' " alt :onerror="defaultImg" /> 这里一定要判断sr ...

  4. 2022-12-14:给定一个正数n, 表示从0位置到n-1位置每个位置放着1件衣服 从0位置到n-1位置不仅有衣服,每个位置还摆着1个机器人 给定两个长度为n的数组,powers和rates pow

    2022-12-14:给定一个正数n, 表示从0位置到n-1位置每个位置放着1件衣服 从0位置到n-1位置不仅有衣服,每个位置还摆着1个机器人 给定两个长度为n的数组,powers和rates pow ...

  5. 2021-07-02:正则表达式匹配。给定一个字符串s和一个匹配串p。“.“匹配单个字符。“*“匹配左边元素的多个字符。判断p是否匹配s。比如s=“ab“,p=“a.“,返回true。比如s=“ab“

    2021-07-02:正则表达式匹配.给定一个字符串s和一个匹配串p."."匹配单个字符.""匹配左边元素的多个字符.判断p是否匹配s.比如s="ab ...

  6. 2021-06-30:给定长度为m的字符串aim,以及一个长度为n的字符串str ,问能否在str中找到一个长度为m的连续子串, 使得这个子串刚好由aim的m个字符组成,顺序无所谓, 返回任意满足条件

    2021-06-30:给定长度为m的字符串aim,以及一个长度为n的字符串str ,问能否在str中找到一个长度为m的连续子串, 使得这个子串刚好由aim的m个字符组成,顺序无所谓, 返回任意满足条件 ...

  7. 2021-12-16:给定两个数a和b, 第1轮,把1选择给a或者b, 第2轮,把2选择给a或者b, ... 第i轮,把i选择给a或者b。 想让a和b的值一样大,请问至少需要多少轮? 来自字节跳动。

    2021-12-16:给定两个数a和b, 第1轮,把1选择给a或者b, 第2轮,把2选择给a或者b, - 第i轮,把i选择给a或者b. 想让a和b的值一样大,请问至少需要多少轮? 来自字节跳动. 答案 ...

  8. vue全家桶进阶之路28:项目仓库Gitee

    Gitee(之前称为GitCafe)是一种基于web的Git仓库托管服务,在中国很受欢迎.它为开发人员提供了一个平台,可以托管他们的Git仓库,与其他开发人员协作,并管理他们的代码. https:// ...

  9. TLS 加速技术:Intel QuickAssist Technology(QAT)解决方案

    作者:vivo 互联网服务器团队- Ye Feng 本文介绍了 Intel QAT 技术方案,通过Multi-Buffer技术和QAT硬件加速卡的两种方式实现对TLS的加速 一.背景 当前 TLS 已 ...

  10. 对promise的简单理解

    随着ES6的推行它的许多新特性受到了广大开发者的好评,比如promise,为什么使用这个promise呢,他具体能帮我们做些啥? 其实从字面意思上来理解promise就是承诺,比如:你命令你的手下本月 ...