登录
首页 >  Golang >  Go问答

阻止ReverseProxy代理请求的方法

来源:stackoverflow

时间:2024-03-18 17:39:26 348浏览 收藏

通过使用自定义类型的实例,并保留指向 httputil.reverseproxy 实例的指针,可以阻止 httputil.ReverseProxy 向目标服务器发送传入请求。该自定义类型既实现 net/http.handler 接口,又包含指向 httputil.reverseproxy 实例的指针。开发人员可以选择处理请求本身,或调用该 reverseproxy 实例的 ServeHTTP 方法。此外,还可以使用缓存包装 http.defaulttransport,根据请求使用缓存或回退到 http.defaulttransport。

问题内容

是否有任何方法可以阻止 httputil.ReverseProxy 向目标服务器发送传入请求?例如,如果我有一个缓存,我可以仅使用本地数据响应客户端。或者验证后,我想返回一个错误给客户端。


正确答案


httputil.reverseproxy 有一个导出方法 ServeHTTP(rw http.ResponseWriter, req *http.Request),这使得它实现 net/http.Handler 接口。

所以基本上在您现在使用普通 httputil.reverseproxy 实例的地方,而是使用也实现 net/http.handler 的自定义类型的实例,保留指向 httputil.reverseproxy 实例的指针,并且要么处理请求本身,要么调用该 reverseproxy 实例的 servehttp

您应该能够使用缓存包装 http.defaulttransport,该缓存可以根据请求使用缓存,也可以回退到 http。默认传输

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{},
    }
}

今天关于《阻止ReverseProxy代理请求的方法》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>