custom-response插件

custom-response插件支持配置自定义的响应,包括自定义HTTP应答状态码、HTTP应答头,以及HTTP应答Body。可以用于Mock响应,也可以用于判断特定状态码后给出自定义应答,例如在触发网关限流策略时实现自定义响应。本文介绍如何配置custom-response插件。

插件类型

传输协议。

配置字段

名称

数据类型

填写要求

默认值

描述

status_code

number

选填。

200

自定义HTTP应答状态码。

headers

array of string

选填。

-

自定义HTTP应答头,Key和 Value 用=分隔。

body

string

选填。

-

自定义HTTP应答Body。

enable_on_status

array of number

选填。

-

匹配原始状态码,生成自定义响应,不填写时,不判断原始状态码。

配置示例

Mock应答场景

status_code: 200
headers:
- Content-Type=application/json
- Hello=World
body: "{\"hello\":\"world\"}"

根据该配置,请求将返回自定义应答如下。

HTTP/1.1 200 OK
Content-Type: application/json
Hello: World
Content-Length: 17

{"hello":"world"}

触发限流时自定义响应

enable_on_status: 
- 429
status_code: 302
headers:
- Location=https://example.com

触发网关限流时一般会返回429状态码,这时请求将返回自定义应答如下。

HTTP/1.1 302 Found
Location: https://example.com

从而实现基于浏览器302重定向机制,将限流后的用户引导到其他页面,比如可以是一个CDN上的静态页面。

如果希望触发限流时,正常返回其他应答,参考Mock应答场景配置相应的字段即可。

对特定路由或域名开启

route-aroute-b两个路由做如下插件配置:

body: "{\"hello\":\"world\"}"

*.example.comtest.com两个域名做如下插件配置:

  enable_on_status: 
  - 429
  status_code: 200
  headers:
  - Content-Type=application/json
  body: "{\"errmsg\": \"rate limited\"}"
说明
  • route-aroute-b即在创建网关路由时填写的路由名称,当匹配到这两个路由时,将使用此段配置。

  • *.example.comtest.com用于匹配请求的域名,当发现域名匹配时,将使用此段配置。

  • 配置的匹配生效顺序,将按照规则的排列顺序,匹配第一个规则后生效对应配置,后续规则将被忽略。