summaryrefslogtreecommitdiff
path: root/internal/proxy/forward.go
blob: 7e40d8e8d7c28787b0ec3d7a9dc560f6178681d6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package proxy

import (
	"fmt"
	"net/http"

	internalhttp "github.com/shiv/internal/http"
)

func forward(req *http.Request, client *http.Client) (*http.Response, error) {
	out, err := http.NewRequestWithContext(req.Context(), req.Method, req.URL.String(), req.Body)
	if err != nil {
		return nil, fmt.Errorf("forward: build request: %w", err)
	}
	for k, vals := range req.Header {
		if internalhttp.HopByHop[k] {
			continue
		}
		out.Header[k] = vals
	}
	internalhttp.StripRequestCacheHeaders(out.Header)

	resp, err := client.Do(out)
	if err != nil {
		return nil, fmt.Errorf("forward: upstream request: %w", err)
	}
	internalhttp.StripResponseCacheHeaders(resp.Header)
	return resp, nil
}