前言

适用场景:添加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. 用Python语言进行时间序列ARIMA模型分析

    应用时间序列 时间序列分析是一种重要的数据分析方法,应用广泛.以下列举了几个时间序列分析的应用场景: 1.经济预测:时间序列分析可以用来分析经济数据,预测未来经济趋势和走向.例如,利用历史股市数据和经 ...

  2. 使用 Sa-Token 完成踢人下线功能

    一.需求 在企业级项目中,踢人下线是一个很常见的需求,如果要设计比较完善的话,至少需要以下功能点: 可以根据用户 userId 踢出指定会话,对方再次访问系统会被提示:您已被踢下线,请重新登录. 可以 ...

  3. 2022-04-22:给你一个大小为 m x n 的矩阵 board 表示甲板,其中,每个单元格可以是一艘战舰 ‘X‘ 或者是一个空位 ‘.‘ ,返回在甲板 board 上放置的 战舰 的数量。 战舰

    2022-04-22:给你一个大小为 m x n 的矩阵 board 表示甲板,其中,每个单元格可以是一艘战舰 'X' 或者是一个空位 '.' ,返回在甲板 board 上放置的 战舰 的数量. 战舰 ...

  4. ol设置最佳可视范围和限制缩放

    目前随着科技发展,智慧城市的不断发展,GIS方面的技术也是层出不穷,如市场流行的 OPENLAYERS, CESIUM, THREE等,但是也会有很多棘手的问题,比如不同分辨率下,图层的显示范围,禁止 ...

  5. vulnhub_jangow

    来源 vulnhub:https://www.vulnhub.com/entry/jangow-101,754/ 描述 难度:简单 这在 VirtualBox 而不是 VMware 上效果更好 我这里 ...

  6. C++面试八股文:如何在堆上和栈上分配一块内存?

    某日二师兄参加XXX科技公司的C++工程师开发岗位6面: 面试官: 如何在堆上申请一块内存? 二师兄:常用的方法有malloc,new等. 面试官:两者有什么区别? 二师兄:malloc是向操作系统申 ...

  7. C# 客户端程序 Visual Studio 远程调试方法

    传统桌面客户端的远程调试相比UWP,ASP等项目来说,配置比较麻烦,因为它是非部署的应用程序,原理是复制编译的文件到远程计算机,通过网络来连接和VS的通信,本文主要讲述WPF,WinForm应用程序的 ...

  8. selenium4-获取页面元素相关信息

    本小节我们简单说下如何使用selenium4-获取页面元素相关信息,以及获取页面元素的相关信息后可以做什么. 获取页面元素的主要目的:(1)执行完步骤后进行断言:(2)获取前一步骤的响应结果作为后续步 ...

  9. NFS远程挂载

    NFS远程挂载 一.概述 NFS是一种基于TCP/IP 传输的网络文件系统协议.通过使用NFS协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源 NAS存储: NFS服务的实现依赖于RPC ...

  10. Mysql数据库常见故障

    Mysql数据库常见故障 1.报错现象 Host is blocked because of many connection errors; unblock with 'mysqladmin flus ...