Skip to content

响应改写

此页面由 docs/rules/response-modification.md 自动同步生成。

本章介绍修改返回给客户端的响应内容的规则。


设置或修改响应头部。

pattern resHeaders://key=value # 内联格式(单个头)
pattern resHeaders://(key1:value1) # 小括号格式(无空格)
pattern resHeaders://{varName} # 引用内嵌值/Values(推荐)

⚠️ 重要

  1. {name} 是引用内嵌值的语法,不是直接定义 JSON!
  2. 小括号内不能有空格,含空格内容必须使用块变量
Terminal window
# 内联格式设置单个头
www.example.com resHeaders://X-Custom-Header=custom-value
# 小括号格式(无空格)
www.example.com resHeaders://(X-Version:1.0)
# 引用内嵌值(推荐,支持空格和多个头)
www.example.com resHeaders://{my-res-headers}

内嵌值定义:

``` my-res-headers
X-Version: 1.0
X-Server: bifrost
```
Terminal window
# 添加安全头部(无空格)
www.example.com resHeaders://(X-Frame-Options:DENY)
# 设置缓存控制(使用内嵌值处理逗号和空格)
www.example.com resHeaders://{cache-headers}
# 添加调试信息
www.example.com resHeaders://X-Debug-Info=proxy-enabled
测试场景规则预期
内联格式test.com resHeaders://X-Custom=value响应包含 X-Custom: value
小括号格式test.com resHeaders://(X-A:1)响应包含 X-A 头部
覆盖已有头部test.com resHeaders://Content-Type=text/plainContent-Type 被覆盖

设置响应 Set-Cookie 头部。

pattern resCookies://name=value # 内联格式
pattern resCookies://(name:value) # 小括号格式(无空格)
pattern resCookies://{varName} # 引用内嵌值(推荐)

⚠️ 注意:小括号内不能有空格,含空格内容必须使用块变量

Terminal window
# 内联格式
www.example.com resCookies://session=abc123
# 小括号格式(无空格)
www.example.com resCookies://(token:xyz789)
# 引用内嵌值(多个 Cookie,推荐)
www.example.com resCookies://{my-cookies}
Terminal window
# 带属性的 Cookie(使用内嵌值处理复杂内容)
www.example.com resCookies://{auth-cookie}

内嵌值定义:

``` auth-cookie
auth: token123; path=/; httpOnly; secure
```
测试场景规则预期
内联格式test.com resCookies://session=abcSet-Cookie 包含 session=abc
小括号格式test.com resCookies://(a:1)响应包含 Set-Cookie

快速设置 CORS(跨域资源共享)响应头。

pattern resCors://\*
pattern resCors://https://app.example.com
pattern resCors://{options}
Terminal window
# 允许所有来源
www.example.com resCors://*
# 允许特定来源
www.example.com resCors://https://app.example.com
# 允许特定来源
www.example.com resCors://https://app.example.com
Terminal window
# 完整 CORS 配置(使用内嵌值)
www.example.com resCors://{cors-config}

内嵌值定义:

``` cors-config
origin: *
credentials: true
methods: GET,POST,PUT
headers: X-Custom
maxAge: 86400
expose: X-Trace-Id
```

说明:

  • 支持 JSON 值,也支持上面的多行 key: value 格式
  • origin 为空时默认回退为 *
  • credentialstrue 时会返回 Access-Control-Allow-Credentials: true
选项对应头部说明
originAccess-Control-Allow-Origin允许的来源
methodsAccess-Control-Allow-Methods允许的方法
headersAccess-Control-Allow-Headers允许的请求头
credentialsAccess-Control-Allow-Credentials是否允许携带凭证
maxAgeAccess-Control-Max-Age预检请求缓存时间
exposeAccess-Control-Expose-Headers暴露给客户端的头部
测试场景规则预期
允许所有来源test.com resCors://*Access-Control-Allow-Origin: *
特定来源test.com resCors://https://app.comAccess-Control-Allow-Origin: https://app.com
详细配置test.com resCors://{cors-config}返回 methods / headers / max-age 等完整 CORS 头

设置响应的 Content-Type 头部。

pattern resType://content_type
类型
JSONapplication/json
HTMLtext/html
JavaScriptapplication/javascript
CSStext/css
纯文本text/plain
XMLapplication/xml
图片image/png, image/jpeg
Terminal window
# 设置为 JSON
www.example.com resType://application/json
# 设置为 HTML
www.example.com resType://text/html
# 强制下载
www.example.com resType://application/octet-stream
测试场景规则预期
设置 JSONtest.com resType://application/jsonContent-Type: application/json
设置 HTMLtest.com resType://text/htmlContent-Type: text/html

设置响应的字符编码。

pattern resCharset://charset
Terminal window
# 设置 UTF-8
www.example.com resCharset://utf-8
# 设置 GBK
www.example.com resCharset://gbk
# 设置 ISO-8859-1
www.example.com resCharset://iso-8859-1
测试场景规则预期
UTF-8 编码test.com resCharset://utf-8Content-Type 包含 charset=utf-8

局部替换响应头内容。

pattern headerReplace://res.header_name:old_value=new_value
pattern headerReplace://res.header_name:/regex/=replacement
Terminal window
# 替换 Content-Type
www.example.com headerReplace://res.content-type:text/plain=application/json
# 使用正则替换
www.example.com headerReplace://res.server:/nginx\/\d+/=nginx/custom
# 修改 Cache-Control
www.example.com headerReplace://res.cache-control:max-age=\d+=max-age=0
测试场景规则预期
简单替换test.com headerReplace://res.server:nginx=customServer 中 nginx 被替换
正则替换test.com headerReplace://res.content-type:/\/\w+/=/jsonMIME 类型被修改

控制响应缓存行为。

pattern cache://seconds
pattern cache://{options}
Terminal window
# 缓存 1 小时
www.example.com cache://3600
# 禁用缓存
www.example.com cache://0
# 缓存一天
www.example.com cache://86400
测试场景规则预期
设置缓存test.com cache://3600Cache-Control 设置 max-age=3600
禁用缓存test.com cache://0响应头包含 no-cache 相关指令

设置响应为附件下载。

pattern attachment://filename
Terminal window
# 设置下载文件名
www.example.com/api/export attachment://data.csv
# 动态文件名(使用模板变量需要反引号)
www.example.com/report attachment://`report_${now}.pdf`
测试场景规则预期
设置附件名test.com attachment://file.txtContent-Disposition: attachment; filename=“file.txt”

响应修改规则可以组合使用:

Terminal window
# 多个响应头 + CORS(使用内嵌值)
www.example.com resHeaders://{my-headers} resCors://*
# 类型 + 编码
www.example.com resType://text/html resCharset://utf-8
# 配合路由规则
www.example.com host://backend.local resHeaders://{proxy-headers} resCors://*
# 配合过滤器
www.example.com resCors://* includeFilter://m:OPTIONS

  1. 头部覆盖:设置已存在的头部会覆盖原值
  2. CORS 预检resCors 会自动处理 OPTIONS 预检请求
  3. Cookie 安全:生产环境建议使用 httpOnlysecure 属性
  4. 缓存控制cache://0 会同时设置 no-cache, no-store, must-revalidate