diff --git a/cmd/imageproxy/main.go b/cmd/imageproxy/main.go index 2c9ce5d..7bf3f55 100644 --- a/cmd/imageproxy/main.go +++ b/cmd/imageproxy/main.go @@ -39,6 +39,7 @@ var referrers = flag.String("referrers", "", "comma separated list of allowed re var includeReferer = flag.Bool("includeReferer", false, "include referer header in remote requests") var followRedirects = flag.Bool("followRedirects", true, "follow redirects") var baseURL = flag.String("baseURL", "", "default base URL for relative remote URLs") +var passRequestHeaders = flag.String("passRequestHeaders", "", "comma separatetd list of request headers to pass to remote server") var cache tieredCache var signatureKeys signatureKeyList var scaleUp = flag.Bool("scaleUp", false, "allow images to scale beyond their original dimensions") @@ -70,6 +71,9 @@ func main() { if *contentTypes != "" { p.ContentTypes = strings.Split(*contentTypes, ",") } + if *passRequestHeaders != "" { + p.PassRequestHeaders = strings.Split(*passRequestHeaders, ",") + } p.SignatureKeys = signatureKeys if *baseURL != "" { var err error diff --git a/imageproxy.go b/imageproxy.go index 8a37a56..02c07e8 100644 --- a/imageproxy.go +++ b/imageproxy.go @@ -85,6 +85,10 @@ type Proxy struct { // The User-Agent used by imageproxy when requesting origin image UserAgent string + + // PassRequestHeaders identifies HTTP headers to pass from inbound + // requests to the proxied server. + PassRequestHeaders []string } // NewProxy constructs a new proxy. The provided http RoundTripper will be @@ -179,6 +183,9 @@ func (p *Proxy) serveImage(w http.ResponseWriter, r *http.Request) { // pass along the referer header from the original request copyHeader(actualReq.Header, r.Header, "referer") } + if len(p.PassRequestHeaders) != 0 { + copyHeader(actualReq.Header, r.Header, p.PassRequestHeaders...) + } if p.FollowRedirects { // FollowRedirects is true (default), ensure that the redirected host is allowed p.Client.CheckRedirect = func(newreq *http.Request, via []*http.Request) error {