I saw this limitation some time ago. Great idea IMHO! On Tue, Aug 23, 2022 at 9:12 AM Zexuan Luo <spacewan...@apache.org> wrote:
> Background > > Currently, response-rewrite plugin only supports set / delete headers. > The limitation makes some operations impossible. For example, we can't > add a Set-Cookie header in APISIX as it may override the Set-Cookie > header from the upstream. > Therefore, we need a way to add a header without overriding the existing > one. > > Solution > > We can enrich the headers field and add the operation name to it. Here > is the new configuration schema: > > headers = { > description = "new headers for response", > anyOf = { > { > type = "object", > minProperties = 1, > patternProperties = { > ["^[^:]+$"] = { > oneOf = { > {type = "string"}, > {type = "number"}, > } > } > }, > }, > { > properties = { > add = { > type = "array", > minItems = 1, > items = { > type = "string", > -- "Set-Cookie: <cookie-name>=<cookie-value>; > Max-Age=<number>" > pattern = "^[^:]+:[^:]+$" > } > }, > set = { > type = "object", > minProperties = 1, > patternProperties = { > ["^[^:]+$"] = { > oneOf = { > {type = "string"}, > {type = "number"}, > } > } > }, > }, > remove = { > type = "array", > minItems = 1, > items = { > type = "string", > -- "Set-Cookie" > pattern = "^[^:]+$" > } > }, > } > } > } > }, > > set means rewriting the headers, > remove means removing the headers, > addmeans appending the new headers. > For set and add, the header format is "name: value", while for remove, > the format is "name". > We use array to represent multiple headers, so the same header can be > used multiple times in the add. For example, > > add = { > "Cache-Control: no-cache", > "Cache-Control: max-age=0, must-revalidate" > } > > The previous configuration can be migrated as part of the new > configuration. > The execution order among those operations are ["add", "set", "remove"]. > > Inspired by: > > https://istio.io/latest/docs/reference/config/networking/virtual-service/#Headers-HeaderOperations > https://docs.konghq.com/hub/kong-inc/response-transformer/ >