问题描述
有没有办法阻止 httputil.ReverseProxy
向目标服务器发送传入请求?例如,如果我有一个缓存并且我可以仅使用本地数据响应客户端。或者验证后,我想返回一个错误给客户端。
解决方法
您应该能够使用缓存包装 http.DefaultTransport
,该缓存可以根据请求使用缓存或回退 http.DefaultTransport
。
package main
import (
"net/http"
"net/http/httputil"
)
var _ http.RoundTripper = &CachingTransport{}
type CachingTransport struct {
// put your cache here
}
func (c *CachingTransport) RoundTrip(request *http.Request) (*http.Response,error) {
// determine whether to use the cache and return,or use the default transport
return http.DefaultTransport.RoundTrip(request)
}
func main() {
_ = httputil.ReverseProxy{
Transport: &CachingTransport{},}
}
,
httputil.ReverseProxy
有一个导出方法 ServeHTTP(rw http.ResponseWriter,req *http.Request)
,这使它实现了 net/http.Handler
接口。
所以基本上在你现在使用普通 httputil.ReverseProxy
实例的地方,而是使用实现 net/http.Handler
的自定义类型的实例,保留指向 {{1} 实例的指针}},然后处理请求本身或调用该 httputil.ReverseProxy
实例的 ReverseProxy
。