微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何阻止 ReverseProxy 代理请求

如何解决如何阻止 ReverseProxy 代理请求

有没有办法阻止 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。