为什么 go http.util 代理总是附加一个尾部斜杠?我从中返回什么标题?

问题描述 投票:0回答:0

我正在尝试设置一个简单的代理,并且我有一些 Web 应用程序需要在其中查找特定文件:

proxy := httptest.NewServer(&httputil.ReverseProxy{
    Rewrite: func(rp *httputil.ProxyRequest) {
        rp.SetXForwarded()
        rp.SetURL(url)
        rp.Out.Header = r.Header
        rp.Out.URL.Path = path
    },
})

基本上,我从 url.Parse 构建的“url”在打印出来时看起来是正确的,但它总是在代理中添加尾部斜杠。因此,获取 .js 文件后,它会访问我的 Web 服务器并尝试使用 .js/ 代替。我显然可以添加逻辑并解决这个问题(我在上面只是删除了一个名为“path”的变量中的尾部斜杠),但感觉我遗漏了什么。也许网络浏览器正在添加尾部斜线?

此外,我必须将内容类型标头添加到响应中,否则不会加载 javascript 文件,因为 MIME 类型是文本/纯文本。我应该添加其他标题吗?我认为代理会更充实一点,更少手动。我尝试使用“NewSingleHostReverseProxy”,但似乎无法修改路径(查看导演,但感觉不直观)。

这里的任何指导表示赞赏。添加删除尾部斜杠的逻辑显而易见且简单,但感觉就像我在与图书馆作斗争,还不如自己动手做。


这里有一个open MR没有合并,但是听起来好像有争论: https://github.com/golang/go/issues/50337

我正在尝试为后端和前端应用程序制作反向代理。我想找到一个简单的解决方案,可以有效地为文件服务器执行此操作并准确设置标头。

go http reverse-proxy
© www.soinside.com 2019 - 2024. All rights reserved.