首页 > 解决方案 > 如何阻止 ReverseProxy 代理请求

问题描述

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

标签: httpgoreverse-proxy

解决方案


您应该能够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{},
    }
}

推荐阅读