微服务引擎MSE

重写proxy-cookie插件

2025-05-27 07:56:04

描述

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的值,代表插件已经生效


05oQcvwifH9P