diff --git a/backend/proxy/proxy.go b/backend/proxy/proxy.go index dfeb20c..0efbbe9 100644 --- a/backend/proxy/proxy.go +++ b/backend/proxy/proxy.go @@ -3658,8 +3658,19 @@ func (m *ProxyHandler) createResponseFromRule(rule service.ProxyServiceResponseR Request: req, } - // set headers + // set headers with support for {{.Origin}} interpolation + requestOrigin := req.Header.Get("Origin") for name, value := range rule.Headers { + // support {{.Origin}} placeholder to echo back the request's origin header + // this is useful for cors when credentials mode is 'include' and wildcard '*' is not allowed + if strings.Contains(value, "{{.Origin}}") { + if requestOrigin != "" { + value = strings.ReplaceAll(value, "{{.Origin}}", requestOrigin) + } else { + // if no origin header present, skip this header + continue + } + } resp.Header.Set(name, value) } diff --git a/frontend/src/lib/components/proxy/ProxyConfigBuilder.svelte b/frontend/src/lib/components/proxy/ProxyConfigBuilder.svelte index 959fb1d..168d51e 100644 --- a/frontend/src/lib/components/proxy/ProxyConfigBuilder.svelte +++ b/frontend/src/lib/components/proxy/ProxyConfigBuilder.svelte @@ -2114,18 +2114,21 @@ {/each} {/if} + Use {'{{.Origin}}'} to echo the request's Origin header
@@ -2884,13 +2887,16 @@ {/each}
{/if} + Use {'{{.Origin}}'} to echo the request's Origin header