如何阻止 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