[nginx]lua控制响应头
前言
适用场景:添加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控制响应头的更多相关文章
- Nginx配置各种响应头防止XSS,点击劫持,frame恶意攻击
为什么要配置HTTP响应头? 不知道各位有没有被各类XSS攻击.点击劫持 (ClickJacking. frame 恶意引用等等方式骚扰过,百度联盟被封就有这些攻击的功劳在里面.为此一直都在搜寻相关防 ...
- 修改nginx的http响应头server字段
信息泄露类型:HTTP服务器响应头Server字段信息泄露 示例: 解决: 需要重新对nginx编译安装: [root@localhost ~]# tar zxvf nginx-1.8.1.tar.g ...
- 【Nginx】修改响应头,根据不同请求IP重定向到不同IP
背景: 使用CAS登录的过程中会涉及到三次重定向,如果在同一个局域网内,是没有任何问题的,但如果涉及到跨网访问,这个问题就比较蛋疼了. 解决思路: 通过Nginx对要访问的系统进行代理,根据请求IP来 ...
- nginx 定义:响应头和请求头
1) 响应头 add_header 例如: add_header Cache-Control no-cache; add_header Access-Control-Allow-Origin *; a ...
- nginx 添加response响应头
硬添
- nginx替换响应头(重点:如何在替换时加上if判断)
在实现微信小程序内嵌非业务域名时,通过nginx做镜像网站绕过小程序业务域名检测,但有一些表单页面提交后会返回一个302状态,由响应头Location的值决定提交成功后的跳转地址.那么问题来了,这个地 ...
- OpenResty(Nginx+Lua)开发入门
Nginx入门 本文目的是学习Nginx+Lua开发,对于Nginx基本知识可以参考如下文章: nginx启动.关闭.重启 http://www.cnblogs.com/derekchen/archi ...
- 高并发 Nginx+Lua OpenResty系列(2)——Nginx Lua API
Nginx Lua API 和一般的Web Server类似,我们需要接收请求.处理并输出响应.而对于请求我们需要获取如请求参数.请求头.Body体等信息:而对于处理就是调用相应的Lua代码即可:输出 ...
- (转)X-Frame-Options响应头缺失漏洞
原文:https://blog.csdn.net/ljl890705/article/details/78071601 x-frame-options响应头缺失漏洞. 故名思意,就是返回的响应头信息中 ...
- Web安全 之 X-Frame-Options响应头配置
最近项目处于测试阶段,在安全报告中存在" X-Frame-Options 响应头缺失 "问题,显示可能会造成跨帧脚本编制攻击,如下图: X-Frame-Options: 值有三个: ...
随机推荐
- HTML中meta标签的那些属性
<meta> 标签是 HTML 中用于描述网页元信息的元素.它位于 <head> 部分,不会显示在页面内容中,但对于浏览器.搜索引擎等具有重要作用.主要作用有:定义文档的字符编 ...
- 2022-12-07:删除重复的电子邮箱。删除重复数据后,id=3的数据被删除。请问sql语句如何写? DROP TABLE IF EXISTS `person`; CREATE TABLE `per
2022-12-07:删除重复的电子邮箱.删除重复数据后,id=3的数据被删除.请问sql语句如何写? DROP TABLE IF EXISTS `person`; CREATE TABLE `per ...
- 2022-02-23:如何搭建k8s单机环境(用k3s),并且搭建dashboard?
2022-02-23:如何搭建k8s单机环境(用k3s),并且搭建dashboard? 答案2022-02-03: 使用场景:个人电脑.需要安装虚拟机,操作系统是centos. 个人电脑上测试,不需要 ...
- Spring源码:Bean生命周期(五)
前言 在上一篇文章中,我们深入探讨了 Spring 框架中 Bean 的实例化过程,该过程包括从 Bean 定义中加载当前类.寻找所有实现了 InstantiationAwareBeanPostPro ...
- 【熊子q的代码乐园】用python写个健康报备记录小系统
目录 一.前言 二.技术实现 1.概述 2. 环境 3. 技术核心 4. 数据库 5. 源代码 三.最后 一.前言 coding的一路上,遇到过许多问题,也写过一些代码去解决,回头看看还是有点意思的, ...
- 使用android studio发布android与flutter混合开发项目
一.生成androd签名证书 Android studio的Build > Grenerate Signed Bundle 选择apk 点击Create New 录入对应的签名信息:点击确定 对 ...
- 深入理解 apply()方法
apply(thisArg) apply(thisArg, argsArray) thisArg 在 func 函数运行时使用的 this 值.请注意,this 可能不是该方法看到的实际值:如果这个函 ...
- 从兆碱基到 Kb、KB、Bps、bps 之间的区别
由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文中链接. 生物信息很多文章都提到:DNA 序列的 100 万个碱基数据(兆碱基)大致相当于计算机 1 兆 ...
- ensp 链路聚合
链路聚合(Link Aggregation) 指将多个物理端口汇聚在一起,形成一个逻辑端口,以实现出/入流量吞吐量在各成员端口的负荷分担,链路聚合在增加链路带宽.实现链路传输弹性和工程冗余等方面是 ...
- 4. Mybatis的增删改查(CRUD)
1.新增 <!--int insertUser();--> <insert id="insertUser"> insert into t_user va ...