I saw this limitation some time ago. Great idea IMHO!
On Tue, Aug 23, 2022 at 9:12 AM Zexuan Luo <[email protected]> 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/
>