【发布时间】:2019-12-04 11:02:05
【问题描述】:
我有一个 Go 代理服务器,它将传入的请求代理到不同的 nginx 服务,其中部署了从 hugo 生成的一堆静态文件。 Go 代理服务器代码为:
func (w http.ResponseWriter, r *http.Request) {
proxy := httputil.NewSingleHostReverseProxy(target)
proxy.Transport = debug.Transport{} // Set some Debug TCP options here
proxy.ServeHTTP(w, r)
}
debug.Transport 的创建方式如下:
type Transport struct {
Transport http.RoundTripper
}
func (d Transport) RoundTrip(r *http.Request) (*http.Response, error) {
fmt.Println(r.Header)
d.Transport = &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}
return d.Transport.RoundTrip(r)
}
在调试传输中,我已经忽略了 TLS 配置的证书检查。
如果我直接访问提供 hugo 静态文件的 nginx url,那么静态文件就完美加载了。即使我从 nginx 之外的 nginx-ingress 访问,静态文件也可以正常提供。但是,当请求通过 Go 代理服务时,我收到一个错误:
Failed to find a valid digest in the 'integrity' attribute for resource 'https://<blah>/js/main.min.29b0315468c00226fa6f4556a9cebc0ac4fe1ce1457a01b22c0a06b329877383.js' with computed SHA-256 integrity 'Nk/s9htIgKJ5jeLFxUMWgIQGhxGZBKoEWtWEy2qYtJk='. The resource has been blocked.
知道如何跳过这些integerity 签入 Go http 代理吗?
【问题讨论】:
-
您在哪里看到该错误?在您的浏览器中?
-
假设此错误出现在您的浏览器中,这似乎很可能,不,没有办法禁用它。但无论如何你不应该需要或想要。正确的解决方案是确保您没有修改传输中的数据。完整性检查失败的事实意味着某些内容没有正确传输。
-
对于来自提供数据的 nginx 的响应,绝对没有做任何事情。整个代码就是我上面所做的。如果我直接在浏览器中访问 nginx url,没有响应,但是当它通过 golang 代理访问时,就会发生这种情况。
-
If I visit the nginx url directly in my browser, there is no "error" response我的意思是上面 -
你没有真正回答我的问题。但听起来我的假设是正确的:您的 Go 代理正在以某种方式修改有效负载。