如何阻止 ReverseProxy 代理请求
How to stop ReverseProxy from proxying request
有什么方法可以防止 httputil.ReverseProxy
向目标服务器发送传入请求吗?例如,如果我有缓存并且我可以仅使用本地数据响应客户端。或者验证后,我想return一个错误给客户端。
您应该能够使用缓存包装 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{},
}
}
A httputil.ReverseProxy
有一个导出方法,ServeHTTP(rw http.ResponseWriter, req *http.Request)
which makes it implement the net/http.Handler
接口。
所以基本上在你现在使用普通 httputil.ReverseProxy
实例的地方,而不是使用你的自定义类型的实例,它也实现了 net/http.Handler
,保留指向 net/http.Handler
实例的指针=10=],然后自己处理请求或调用 ReverseProxy
实例的 ServeHTTP
。
有什么方法可以防止 httputil.ReverseProxy
向目标服务器发送传入请求吗?例如,如果我有缓存并且我可以仅使用本地数据响应客户端。或者验证后,我想return一个错误给客户端。
您应该能够使用缓存包装 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{},
}
}
A httputil.ReverseProxy
有一个导出方法,ServeHTTP(rw http.ResponseWriter, req *http.Request)
which makes it implement the net/http.Handler
接口。
所以基本上在你现在使用普通 httputil.ReverseProxy
实例的地方,而不是使用你的自定义类型的实例,它也实现了 net/http.Handler
,保留指向 net/http.Handler
实例的指针=10=],然后自己处理请求或调用 ReverseProxy
实例的 ServeHTTP
。