Skip to content

Commit 46fb70f

Browse files
wangjq4214trim21
authored andcommitted
πŸ› bug: fix proxy overwrote the wrong scheme (gofiber#2004)
* πŸ› bug: fix proxy overwrote the wrong scheme * βœ… fix: fix io not exist in go1.14
1 parent 231ffc6 commit 46fb70f

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

β€Žmiddleware/proxy/proxy.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -123,11 +123,13 @@ func Do(c *fiber.Ctx, addr string) error {
123123
res := c.Response()
124124
originalURL := utils.CopyString(c.OriginalURL())
125125
defer req.SetRequestURI(originalURL)
126-
req.SetRequestURI(addr)
126+
127+
copiedURL := utils.CopyString(addr)
128+
req.SetRequestURI(copiedURL)
127129
// NOTE: if req.isTLS is true, SetRequestURI keeps the scheme as https.
128130
// issue reference:
129131
// https://github.com/gofiber/fiber/issues/1762
130-
if scheme := getScheme(utils.UnsafeBytes(addr)); len(scheme) > 0 {
132+
if scheme := getScheme(utils.UnsafeBytes(copiedURL)); len(scheme) > 0 {
131133
req.URI().SetSchemeBytes(scheme)
132134
}
133135

β€Žmiddleware/proxy/proxy_test.go

+28
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"crypto/tls"
55
"io/ioutil"
66
"net"
7+
"net/http"
78
"net/http/httptest"
89
"strings"
910
"testing"
@@ -362,3 +363,30 @@ func Test_Proxy_Do_RestoreOriginalURL(t *testing.T) {
362363
utils.AssertEqual(t, nil, err1)
363364
utils.AssertEqual(t, nil, err2)
364365
}
366+
367+
func Test_Proxy_Do_HTTP_Prefix_URL(t *testing.T) {
368+
t.Parallel()
369+
370+
_, addr := createProxyTestServer(func(c *fiber.Ctx) error {
371+
return c.SendString("hello world")
372+
}, t)
373+
374+
app := fiber.New(fiber.Config{DisableStartupMessage: true})
375+
app.Get("/*", func(c *fiber.Ctx) error {
376+
path := c.OriginalURL()
377+
url := strings.TrimPrefix(path, "/")
378+
379+
utils.AssertEqual(t, "http://"+addr, url)
380+
if err := Do(c, url); err != nil {
381+
return err
382+
}
383+
c.Response().Header.Del(fiber.HeaderServer)
384+
return nil
385+
})
386+
387+
resp, err := app.Test(httptest.NewRequest(http.MethodGet, "/http://"+addr, nil))
388+
utils.AssertEqual(t, nil, err)
389+
s, err := ioutil.ReadAll(resp.Body)
390+
utils.AssertEqual(t, nil, err)
391+
utils.AssertEqual(t, "hello world", string(s))
392+
}

0 commit comments

Comments
Β (0)