更新日志
3.10.3
发布日期:2026-07-14
升级须知
多个数据面共享内存(lua_shared_dict)默认值被调高,因此在默认配置下,3.10.3 网关启动时预留的共享内存比 3.10.2 约多 365 MiB:
| 共享字典 | 3.10.2 默认值 | 3.10.3 默认值 |
|---|---|---|
prometheus-metrics(高级指标) | 15 MiB | 128 MiB |
kubernetes、nacos、nacos-stream、consul(服务发现) | 各 20 MiB | 各 64 MiB |
tracing_buffer(SkyWalking) | 10 MiB | 32 MiB |
api-calls-for-portal | 10 MiB | 64 MiB |
这些字典在网关启动时分配,无论对应功能是否被使用,因此该增长适用于每一个 3.10.3 网关。升级前,请调高网关容器的内存 requests 和 limits(在 Kubernetes 中还应检查节点的内存压力与驱逐阈值),避免网关被 OOM 杀死。如果你未使用某项功能——例如某种未配置的服务发现类型——可以通过网关配置或 Helm chart 的共享字典值把对应字典调回原先的大小。
内置 Dashboard 用户现在会在连续密码登录失败后被临时锁定。默认策略为启用状态,同一用户和来源 IP 连续失败 5 次后锁定 15 分钟。管理员可以通过新的登录失败限制系统设置调整或关闭该策略。升级后新密码和被修改的密码也必须至少 12 个字符,并继续满足原有复杂度要求。已有密码在登录时不会重新校验长度。
如果内置用户启用了双因素认证(2FA),该用户的 HTTP Basic Auth 会被拒绝,因为 Basic Auth 无法携带第二 因素。程序化集成请改用 Token 认证;Token 通过 X-API-KEY 请求头传入,不需要携带 2FA 验证码。
网关现在通过 apisix.trusted_addresses 判断是否信任客户端传入的 X-Forwarded-* 和 RFC 7239 Forwarded 请求头。当未配置 trusted_addresses,或请求来自不可信地址时,网关会在转发上游前用自身观测到的值覆盖 X-Forwarded-Proto、X-Forwarded-Host 和 X-Forwarded-Port,并清除 Forwarded 请求头。如果上游应用依赖可信负载均衡器或反向代理传入的原始转发协议、host 或端口,请将该代理的 IP 或 CIDR 配置到 trusted_addresses。
openid-connect 插件不再默认把 refresh_session_interval 设为 900 秒。现在只有显式配置 refresh_session_interval 时才会执行周期性静默重认证。如果你的部署依赖此前 900 秒刷新一次的行为,请在升级前或升级过程中显式设置 refresh_session_interval: 900。
对于使用 SQL Server 的部署,控制面现在会先创建并准备数据库,再让其他组件连接,并启用 READ_COMMITTED_SNAPSHOT,避免网关配置读取被写事务阻塞。若既有 SQL Server 数据库尚未启用该设置,首次启动会以 ROLLBACK IMMEDIATE 应用该数据库级变更;正在进行的数据库事务和连接可能会被断开一次,之后连接池会重新连接,后续启动不会重复执行该操作。
控制面现在会在存储时加密更多保 存凭证的插件字段。由于 API7 EE 升级时先升级控制面、再升级数据面,在升级间隙中,3.10.3 的控制面会加密这些字段,而仍为 3.10.2 的旧数据面无法解密,可能导致相关插件失效,直到数据面也完成升级。
本次新增加密的字段,按插件列出如下:
- ai-cache:
semantic.embedding.openai.api_key、semantic.embedding.azure_openai.api_key
如果你使用了上述插件的相关字段,请在控制面升级后尽快将数据面升级到 3.10.3,并在两侧都升级到 3.10.3 之前避免编辑这些插件。
新功能
插件
- AI Cache
- 在精确匹配缓存之外,新增语义(L2)缓存层,通过 RediSearch 按 embedding 相似度匹配提示词。流式 LLM 响应现在可以被缓存并回放,而不再被跳过。新增 Prometheus 指标,报告缓存命中、未命中、绕过和 embedding 延迟。
- AI Aliyun Content Moderation
- 新增
request_check_roles,用于选择要审查的请求角色(user、tool和/或system)。user和tool内容遵循request_check_mode(last或all,默认last);选择system时,系统内容会在每个请求中检查。长内容现在以线性时间分块,且对多字节(UTF-8)安全。
- 新增
- AI AWS Content Moderation
- 请求审查现在在 AI 协议识别之后执行,检查上游 LLM 实际可见的解码后提示词内容,而不是原始 HTTP JSON 外壳。拒绝响应现在以提供商兼容格式返回,并新增可配置的
check_request、deny_code和deny_message。
- 请求审查现在在 AI 协议识别之后执行,检查上游 LLM 实际可见的解码后提示词内容,而不是原始 HTTP JSON 外壳。拒绝响应现在以提供商兼容格式返回,并新增可配置的
- IP Restriction
- 新增可配置的
response_code(403或404,默认403),在请求被拦截时返回,使运营者可以用404隐藏资源是否存在。
- 新增可配置的
- File Logger
- 日志文件
path现在可以在插件元数据中设置一次并在多条路由间共享,不必在每条路由的插件配置中都填写。插件配置中设置的path仍然优先于元数据中的值。
- 日志文件
- Logger 插件
- 为 HTTP Logger、RocketMQ Logger、TCP Logger、Tencent Cloud CLS 和 UDP Logger 的 schema 新增
max_req_body_bytes和max_resp_body_bytes,使请求/响应体大小上限(默认 524288 字节)在配置时被校验并在 Dashboard 中展示。
- 为 HTTP Logger、RocketMQ Logger、TCP Logger、Tencent Cloud CLS 和 UDP Logger 的 schema 新增
- 限流插件
- 为 Limit Count、Limit Count Advanced、GraphQL Limit Count 和 AI Rate Limiting 的 Redis 与 Redis Cluster 策略新增 Redis 连接 keepalive 设置(
redis_keepalive_timeout和redis_keepalive_pool),方便运营者调整空闲超时时间和连接池大小。
- 为 Limit Count、Limit Count Advanced、GraphQL Limit Count 和 AI Rate Limiting 的 Redis 与 Redis Cluster 策略新增 Redis 连接 keepalive 设置(
数据面
- 新增
apisix.trusted_addresses,根据解析后的客户端地址控制网关是否信任客户端传入的X-Forwarded-*和Forwarded请求头。 - 新增
apisix.match_uri_encoded_slash。启用后,编码斜杠(%2F)在路由匹配期间保持编码状态,可作为路径参数的一部分,而不是路径分隔符。 - 在 standalone YAML 模式中,环境变量占位符现在会在 YAML 解析前替换。未加引号的占位符可以解析为原生布尔值或数字;加引号的占位符仍保持字符串,从而精确保留大整数 ID 和 token 值。
控制面
- 为内置 Dashboard 用户新增 TOTP 双因素认证。用户可在账号设置中注册、启用、关闭和恢复 2FA;管理员可重置用户的 2FA 状态。
- 为内置用户新增登录失败限制。连续失败登录会临时锁定用户和来源 IP,写入审计事件,并返回明确的锁定提示。
- 新增双因素认证的 Dashboard UI:账号设置中的二维码和恢复码设置流程、登录时的 OTP 步骤,以及管理员重置用户 2FA 的操作。
- 密码表单和随机密码生成已更新为新的 12 字符最小长度。
开发者门户
- 新增强制双因素认证选项。当启用 2FA 且设置了
twoFactor.required时,开发者必须先完成 2FA 注册才能访问受保护页面,该要求在登录和代理层都会强制执行。
缺陷修复
插件
- AI Proxy 和 AI Proxy Multi
- 修复问题:包含 tool result 且混有其他内容的 Anthropic Messages 请求会被转换成非法的 OpenAI Chat 消息顺序,导致 OpenAI 兼容上游拒绝该会话后续的每个请求。现在 tool 消息会紧跟在包含 tool call 的 assistant 消息之后,旁边的文本或媒体会保留在后续 user 消息中。若干其他 Anthropic 到 OpenAI 的转换细节也已与 LiteLLM 兼容行为对齐,包括工具名清洗、长工具名冲突处理、adaptive thinking effort、结构化输出 schema 提取、空数组编码和内容块形状。
- 修复问题:结构化 chat content 可能以 table 形式传给下游 AI 插件并导致请求处理错误。协议适配器现在会在 AI guard 和 cache 插件消费前一致地拍平文本内容。
- AI Lakera Guard
- 修复问题:在
action: alert且fail_open: false的流式响应中,Lakera API 报错或超时可能放行已流出的响应,而不是 fail closed。现在 Lakera 报错会按fail_open处理,严格配置下会拦截响应。
- 修复问题:在
- AI AWS Content Moderation 和 AI Aliyun Content Moderation
- 修复问题:
deny_code此前接受任意数字。现在会校验为200–599范围内的整数 HTTP 状态码(默认200),超出范围的值会在配置时被拒绝。
- 修复问题:
- AI Aliyun Content Moderation
- 修复问题:在 body filter 中返回
ngx.OK可能中断后续 body filter 处理。现在插件会正 常返回,使其他 filter 可以继续执行。
- 修复问题:在 body filter 中返回
- AI Rate Limiting
- 修复问题:部分已配置的 Redis 字段会被丢弃并替换为默认值——redis-sentinel 策略的
redis_username/redis_password,以及 redis 和 redis-cluster 策略的redis_keepalive_timeout/redis_keepalive_pool。现在所有已配置的 Redis 字段都会被转发。
- 修复问题:部分已配置的 Redis 字段会被丢弃并替换为默认值——redis-sentinel 策略的
- gRPC Transcode
- 修复问题:空的 protobuf
repeated字段会被编码为{}而不是 JSON 数组([])。现在空 repeated 字段会显示为数组,包括嵌套消息和 descriptor-set 方式的消息。
- 修复问题:空的 protobuf
- Key Auth 和其他 Consumer 认证插件
- 修复问题:如果 Consumer 凭据引用了无法解析的 secret,数据面可能仍把未解析的字面量加入索引,并用该字面量完成认证。现在引用的 secret 无法解析时,Consumer 认证会 fail closed。
- Secret 引用
- 修复问题:更新或删除
/secrets配置不会使 secret LRU 缓存失效,因此旧 secret 值可能继续使用到缓存过期,甚至无限期使用。现在 secret 配置变化后会重新解析 secret 引用。
- 修复问题:更新或删除
- Proxy Rewrite
- 修复问题:同时配置
use_real_request_uri_unsafe和uri时,请求 query string 会在 URI 改写中丢失。现在会保留原始 query string, 并在改写后的 URI 已含 query 时正确合并。
- 修复问题:同时配置
- Loggly
- 修复问题:不同 route 的批量 Loggly 日志可能使用错误的 token 或 tags,因为异步处理器复用了最新 route 的配置。现在每个批处理器都会保留自己的 route 配置。
- Datadog
- 修复问题:较大的合并 DogStatsD datagram 可能超过常见的 8192 字节 agent 缓冲区并被静默截断。现在只有在 payload 可容纳时才合并,否则回退为每个 metric 一个 datagram。
- Zipkin
- 修复问题:明确标记为未采样的请求仍会构造完整 span tag table 和 access 阶段子 span。现在未采样请求会跳过这些额外追踪工作,同时保留 trace 传播。
- OpenTelemetry
- 修复问题:运行时更新 OpenTelemetry 插件元数据不会重建用于注入 core span 的 tracer,因此这些 span 可能继续使用旧 collector 或 resource 设置,直到 worker 重启。现在元数据变化后 tracer 会刷新。
- 修复问题:
additional_attributes在 log 阶段变量填充前求值,导致依赖最终请求状态的属性缺失或过期。现在这些属性在 log 阶段求值。 - 修复问题:当
trace_id_source设为x-request-id时,非合法十六进制的X-Request-Id值(例如 UUID)或重复的请求头可能返回HTTP 500。现在会校验该值,无法使用时回退为随机的合法 trace ID。 - 修复问题:插件元数据 schema 接受
resource属性和collector.request_headers的非标量值,这些值随后会在运行时被静默丢弃。现在这类值会在配置时被拒绝。
- OpenID Connect
- 修复问题:
refresh_session_interval错误地默认设为900,即使用户未配置也会启用静默重认证。该默认值已移除(见升级须知)。
- 修复问题:
- MQTT Proxy
- 修复问题:
protocol_name过去是必填项,尽管标准默认值是MQTT。现在该字段可省略,并默认使用MQTT。
- 修复问题:
- Forward Auth
- 修复问题:当
request_method为POST时,插件在缓冲请求体后仍可能把客户端的Transfer-Encoding、Content-Length和Expect请求头转发给认证服务,导致请求 framing 不一致。现在这些客户端 framing 头不会再复制到认证服务请求中。
- 修复问题:当
- Authz CASBIN
- 修复问题:在不同 route 之间切换不同 Casbin model 或 policy 形状时,可能触发
casbin enforce error/invalid request size。内置lua-casbin依赖已更新,包含相关 enforce 修复。
- 修复问题:在不同 route 之间切换不同 Casbin model 或 policy 形状时,可能触发
- Request ID
- 修复问题:配置
algorithm: range_id但省略可选 range 对象时可能返回HTTP 500。现在 range 对象有默认值。
- 修复问题:配置
- Workflow
- 修复问题:Workflow action 插件可能在 workflow 决定跳过或执行该 action 前先运行
_meta.pre_functionhook,从而影响本不应执行的 action。现在 workflow 会先决定是否运行 action,再执行这些 meta hook。
- 修复问题:Workflow action 插件可能在 workflow 决定跳过或执行该 action 前先运行
- Request Validation
- 修复问题:
Content-Type带 charset 参数或大小写不同(例如application/x-www-form-urlencoded; charset=utf-8)的表单请求体未被识别为 form-urlencoded,因而被当作 JSON 解析并以HTTP 400拒绝。现在这类 Content-Type 会被识别并按表单体校验。
- 修复问题:
数据面
- 修复问题:部分日志文件被 rotation 后,网关可能仍保持旧文件句柄。现在部分 rotation 后也会正确重新打开日志。
- 修复问题:当配置源上报的 revision 比网关已见过的更小时(例如控制面数据库被恢复到较早状态),网关可能持续下发过期配置,直到 worker 重启。现在观测到更小的 revision 时会强制进行一次完整配置重新同步。
- 修复问题:通过 global rule 或 consumer 挂载的插件(如
ai-proxy-multi)可能因网关无法在请求时获取插件的父配置而返回HTTP 5xx。现在所有承载插件的资源类型都能被正确解析。 - 修复问题:当
client-control配置max_body_size: 0(不限制)时,分块请求体仍可能被以HTTP 413拒绝。现在max_body_size为0会正确地对分块请求禁用大小检查。
控制面
- 修复问题:配置 revision 刚变化后、下一次 heartbeat 尚未上报新 revision 前,网关实例可能短暂显示为 OutOfSync。现在新增宽限窗口,在正常同步窗口内仍保持最近有 heartbeat 的实例为 Healthy。
- 修复问题:兼容性报告被截断为 200 条且顺序不稳定,因此大报告可能隐藏 error,并在不同网关实例间显示不同结果。现在控制面会存储完整且排序后的报告,并基于全部条目计算兼容性。
- 修复问题:secret provider 的请求体可能匹配与 URL 路径中 provider 名称不同的类型,导致数据面丢弃或误读已保存 secret。现在控制面会按路径选择的 provider 类型校验请求体。
- 修复问题:控制面接受了一些数据面会静默丢弃的核心资源配置,包括非法 TLS、filter 和 IP match 配置。现在这些配置会在发布前被校验拒绝。
- 修复问题:运行时 services 端点上的插件配置未被校验,因此带有非法插件配置的 service 会被接受,随后被数据面静默丢弃。现在 service 的插件配置会被校验,非法时以
HTTP 400拒绝。 - 修复问题:OpenAPI schema 会拒绝 IPv6 upstream node host。现在 IPv6 host 可以被接受。
- 修复问题:batch
ssls校验使用了 SNI schema 而不是 SSL schema, 导致缺少证书字段的条目可能通过校验。现在 batch SSL 校验使用正确 schema。 - 修复问题:审计日志导出只返回前 256 条。现在会导出所有匹配的审计日志。
- 修复问题:凭据查询索引可能被不执行数据库迁移的组件删除,且部分启动 schema repair 会不必要地重建当前索引。现在 schema repair 会保留当前索引,仅修复过期形状。
- 修复问题:在大型部署中,heartbeat 和实例状态查询可能变慢。新增索引和 Go 侧状态计算改善了这些查询。
3.10.2
发布日期:2026-06-29
升级须知
控制面现在会在存储时加密更多保存凭证的插件字段。由于 API7 EE 升级时先升级控制面、再升级数据面,在升级间隙中,3.10.2 的控制面会加密这些字段,而仍为 3.10.1 的旧数据面无法解密,可能导致相关插件失效,直到数据面也完成升级。
本次新增加密的字段,按插件列出如下:
- limit-count、limit-count-advanced 和 graphql-limit-count:
redis_password、sentinel_password - limit-conn:
redis_password - limit-req:
redis_password - ai-rate-limiting:
redis_password、sentinel_password - elasticsearch-logger:
headers(自定义认证请求头) - openid-connect:
session.redis.password - ai-cache:
redis_password - ai-lakera-guard:
api_key
如果你使用了上述插件的相关字段,请在控制面升级后尽快将数据面升级到 3.10.2,并在两侧都升级到 3.10.2 之前避免编辑这些插件。
当 hmac-auth 启用 validate_request_body 时,默认的 max_req_body_size 现在为 67108864 字节(64 MiB),与 Apache APISIX 对齐。在 3.10.1 中该默认值为 524288 字节(512 KiB),会以 HTTP 413 拒绝 512 KiB 到 64 MiB 之间的请求体。升级后,这类请求默认会被接受。如果你依赖较低的上限,请显式设置 max_req_body_size 以恢复。
开发者门户的注册同意项现在通过单个 signUpConsentLabel 选项配置(渲染在同意复选框旁边的 HTML 片段),且仅在配置了该标签时才强制要求同意。原有的 tosURL 和 beforeSignUpButtonHtml 选项已移除。如果你的门户配置设置了其中任一项,请在升级前将内容迁移到 signUpConsentLabel,否则注册同意文案将不再显示。
新功能
插件
- AI Cache(新插件)
- 缓存 LLM 响应,使相同的请求从缓存返回,而不再重复调用上游模型。精确匹配缓存以归一化后的请求体为键,存储在 Redis 中;缓存命中时返回存储的响应,并带
X-AI-Cache-Status: HIT和X-AI-Cache-Age响应头。流式 请求会被跳过(X-AI-Cache-Status: BYPASS)。
- 缓存 LLM 响应,使相同的请求从缓存返回,而不再重复调用上游模型。精确匹配缓存以归一化后的请求体为键,存储在 Redis 中;缓存命中时返回存储的响应,并带
- AI Lakera Guard(新插件)
- 通过 Lakera Guard API 检测 AI 流量中的提示词注入和其他不安全内容。
direction选项(input、output或both)用于选择插件扫描请求提示词、LLM 响应(包括流式响应)还是两者。被标记的流量会以可配置的deny_code拒绝,或在action设为alert时仅记录日志。
- 通过 Lakera Guard API 检测 AI 流量中的提示词注入和其他不安全内容。
- AI Aliyun Content Moderation
- 新增
request_check_mode(last或all,默认last),用于控制审查多轮对话的范围:last仅检查最后一个 user 轮次,all检查每个 user 轮次。仅审查user角色的内容,忽略system和assistant内容。长内容现在以线性时间分块,且对多字节(UTF-8)安全。
- 新增
- AI Proxy
- 发送给 logger 插件的结构化
llm_summary对象(启用logging.summaries时)现在包含更多 AI 可观测性字段:stream、tool_count、has_tool_calls、end_user_id、cache_read_input_tokens、cache_creation_input_tokens和reasoning_tokens。
- 发送给 logger 插件的结构化
- Elasticsearch Logger
- 新增通过自定义请求头向 Elasticsearch 认证的支持(
headers选项,例如Authorization: Bearer <token>或 API key 请求头),作为基本auth的替代方式。
- 新增通过自定义请求头向 Elasticsearch 认证的支持(
- OpenID Connect
- 新增 Redis 作为会话存储后端。将
session.storage设为redis并配置session.redis(host、port 等选项),即可把会话存储在 Redis 而非会话 cookie 中;默认仍为cookie。
- 新增 Redis 作为会话存储后端。将
数据面
- 新增
log_format_extra——一种用于 logger 插件的叠加式日志格式,它在默认的丰富日志格式上追加字段,而不像log_format那样替换默认格式。新增变量$upstream_unresolved_host记录 DNS 解析前配置的上游 host。log_format_extra可通过插件元数据全局设置,也可按路由设置。 - 为流(L4)TCP 代理新增按端口的 PROXY protocol 控制。每个
stream_proxy.tcp条目可独立启用接收 PROXY protocol(proxy_protocol)和向上游发送 PROXY protocol(proxy_protocol_to_upstream),覆盖全局默认值。 - 新增
max_post_args_readable_size配置项(默认 64 MiB),用于限制在匹配post_arg.*路由谓词(针对 JSON 和 multipart 请求)时读取的请求体大小。设为0可禁用该限制。 - 调试会话现在会把每个请求的日志作为 OpenTelemetry span event 记录在请求的 root span 上,因此无需外部日志收集器即可 在 trace 中查看每个请求的日志。
控制面
- 新增数据面的 RPM 安装方式,与现有的 Docker 和 Helm 方式并列。Dashboard 的网关组部署页面新增 RPM 标签页;在隔离网络主机上安装
api7-gatewayRPM 后,生成的离线脚本会下发网关组客户端证书、写入网关配置,并将实例接入控制面。
开发者门户
- 禁用 API Hub:运营者可通过新增的
apiHub.enabled配置开关完全关闭 API Hub。禁用后,导航中的 API Hub 链接会隐藏,API Hub 页面返回 not-found,且 API Hub 的 URL 会从 sitemap 中移除。 - 强制邮箱验证:可配置在注册和登录时要求开发者先验证邮箱地址才能完成认证。
- 自定义 PostgreSQL schema:门户可以部署到自定义的 PostgreSQL schema(而非
public),按连接应用该 schema 的search_path并运行 schema 范围内的迁移。 - 平台管理员的组织管理:管理员的 Organizations 页面现在可以接管组织(成为其 owner)或删除组织,作为对原有用户管理操作的补充。
- 文档 Markdown 与 LLM 端点:门户内文档站现在提供 Markdown 和面向 AI 工具的 LLM 友好文本端点,且可以将单个文档页面排除在这些端点之外,同时仍可 在文档界面中正常阅读。
缺陷修复
插件
- AI Proxy
- 修复问题:当上游返回的工具调用的
arguments不是合法 JSON 时,整个响应转换会被中断,客户端收不到任何内容。现在该非法工具调用会回退为空参数对象,响应的其余部分(包括任何文本内容)得以保留。 - 修复问题:携带
tool_choice但没有可用tools的请求(例如只有一个在转换中被丢弃的内置工具)会带着孤立的tool_choice转发并被上游拒绝。现在这样的tool_choice(以及parallel_tool_calls)会被移除。另外,上游省略最后完成块的流式 Anthropic 请求不再让客户端挂起到超时——流现在会被正确终止。 - 修复问题:当上游 LLM 返回错误状态(如
HTTP 429或5xx)时,错误响应体被丢弃,客户端收到空响应体。现在上游错误响应体和 content type 会被保留,ai-proxy-multifallback 场景下也是如此。
- 修复问题:当上游返回的工具调用的
- AI Proxy Multi
- 修复问题:构建工作实例池失败时可能抛出 Lua 错误并破坏性地清空池状态。现在该失败路径对 nil 安全且不具破坏性。
- Limit Count
- 修复问题:当
count或time_window来自变量时,非法值(非整数、零或负数、或超出安全整数范围)会被静默忽略,从而可能完全失效限流。现在这类值会被校验并拒绝,堵住了一处限流绕过。 - 修复问题:使用 Redis 策略和滑动窗口计数时,检查与自增不是原子操作,因此并发请求可能超过配置的上限。现在计数通过 Redis 脚本原子完成。
- 修复问题:当
- Limit Request
- 修复问题:限流计数的键设置方式导致挂在共享资源(如 Consumer)上的限流对每条路由分别计数,而不是共用一个桶。现在计数按父资源为键,因此 Consumer 级别的限流会在该 Consumer 的所有路由间共同生效。
- HMAC Auth
- 修复问题:当启用
validate_request_body且请求体超过max_req_body_size时,请求会以容易误解的HTTP 401被拒绝。现在改为以HTTP 413拒绝。默认的max_req_body_size也提升至 64 MiB(见升级须知)。
- 修复问题:当启用
- Attach Consumer Label
- 修复问题:当匹配到的 Consumer 没有标签时,客户端可以伪造已配置的请求头,因为插件只在存在标签值时才覆盖该请求头。现在已配置的请求头总会从客户端请求中剥离,即使 Consumer 没有匹配的标签。
- Redirect