summaryrefslogtreecommitdiff
path: root/internal/proxy/forward.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/proxy/forward.go')
-rw-r--r--internal/proxy/forward.go29
1 files changed, 29 insertions, 0 deletions
diff --git a/internal/proxy/forward.go b/internal/proxy/forward.go
new file mode 100644
index 0000000..7e40d8e
--- /dev/null
+++ b/internal/proxy/forward.go
@@ -0,0 +1,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
+}