描述
proxy-cookie插件是对响应头部set-cookie字段中的path属性或者domain属性进行重写,校验的对象:
· 请求目标服务的返回头部Set-Cookie中Path属性
· 请求目标服务的返回头部Set-Cookie中Domain属性
注:set-cookie头部不区分大小写
作用范围
该插件只能用于路由级插件,因为每条路由响应头部set-cookie字段中的path属性或者domain属性不同,要视具体情况而定。
属性
名称 | 类型 | 必选项 | 默认值 | 有效值 | 描述 | ||
domain | Object | 可选 | 无 | 无 | domain域的重写配置 | ||
use | boolen | 可选 | false | [false, true] | 是否更改domain属性,默认为false, 当设置为true时匹配规则和替换值不可为空。 | ||
regex | string | 无 | 无 | 匹配规则 当use为true时,不可为空。 | |||
replacement | string | 无 | 无 | 替换值 当use为true时,不可为空。
| |||
path | Object | 可选 | 无 | 无 | path域的重写配置 | ||
use | boolen | 可选 | false | [false, true] | 是否更改domain属性,默认为false, 当设置为true时匹配规则和替换值不可为空。
| ||
regex | string | 无 | 无
| 匹配规则 当use为true时,不可为空。
| |||
replacement | string | 无 | 无 | 替换值 当use为true时,不可为空。 | |||
如何启用
在配置窗口页以 YAML 格式填写
配置示例
1) 样例
配置proxy-cookie插件内容,关闭domain,开启path
curl http://192.168.0.95:27152/apisix/admin/routes/1 -H 'X-API-KEY: 2571e288e8f4cd273cab342440068469' -X PUT -d '
{
"name": "test",
"uri": "/hello",
"plugins": {
"proxy-cookie": {
"domain": {
"use": false
},
"path": {
"regex": "/c/app",
"use": true,
"replacement": "/"
},
"disable": true
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:39087": 1
}
}
}'
2) 示例场景
以Path属性为例,Domain属性同理
(1)测试场景1:当set-cookie中不存在Path属性时
用例1-1:属性关闭
即 proxy_cookie_path = {use=false}, 表示不对Path属性进行重写
用例1-2:属性开启
proxy_cookie_path = {use=true, regex="/app/a/b", replacement="/a/b"}, 表示不对Path属性进行重写
proxy_cookie_path = {use=true, regex="^/app/a/b", replacement="/a/b"}, 表示不对Path属性进行重写
(2)测试场景2:当set-cookie中存在Path属性时
如set-cookie: Path=/c/app/a/b
用例2-1 属性关闭
即 proxy_cookie_path = {use=false}, 表示不对Path属性进行重写
用例2-2 属性开启
proxy_cookie_path = {use=true, regex="/app/a/b", replacement="/a/b"},表示对Path属性进行重写,重写后,set-cookie: Path=/c/a/b
proxy_cookie_path = {use=true, regex="*/a/b", replacement="/a/b"}, 表示对Path属性进行重写,重写后,set-cookie: Path=/a/b
proxy_cookie_path = {use=true, regex="c/a/b", replacement="/a/b"}, 表示对Path属性进行重写,重写后(未匹配时,原样输出),set-cookie: Path=/c/app/a/b
启用/启停
在配置页面设置生效开关
验证插件
假定请求响应中的Set-cookie字段信息如下
配置示例如样例中设置,对应的yaml如下
# 对应proxy_cookie_domain
domain:
# 是否更改domain属性,默认为false, 当设置为true时匹配规则和替换值不可为空
use: false
# 匹配规则
#regex: "baidu.com"
# 替换值
#replacement: ""
# 对应proxy_cookie_path
path:
# 是否更改path属性,默认为false, 当设置为true时匹配规则和替换值不可为空
use: true
# 匹配规则
regex: "/c/app"
# 替换值
replacement: "/"
请求接口,发现在header的Set-cookie字段中带上了Path与Domain的值,代表插件已经生效