在 Go 中将 HTTP 请求复制到多个服务器
从一个服务器版本转换到另一个服务器版本时,可能需要复制传入的 HTTP 请求到两个版本以实现无缝切换。然而,直接修改请求的天真的方法会遇到错误。
要解决这个问题,解决方案在于创建一个新的 HTTP 请求并从传入请求中复制必要的部分。这涉及到:
下面是一个代码示例:
func handler(w http.ResponseWriter, req *http.Request) { body, err := ioutil.ReadAll(req.Body) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } req.Body = ioutil.NopCloser(bytes.NewReader(body)) url := fmt.Sprintf("%s://%s%s", proxyScheme, proxyHost, req.RequestURI) proxyReq, err := http.NewRequest(req.Method, url, bytes.NewReader(body)) proxyReq.Header = make(http.Header) for h, val := range req.Header { proxyReq.Header[h] = val } resp, err := httpClient.Do(proxyReq) if err != nil { http.Error(w, err.Error(), http.StatusBadGateway) return } defer resp.Body.Close() // legacy code }
此方法可确保旧服务器版本和新服务器版本都接收重复的请求,而无需修改原始请求。
以上是如何在 Go 中将 HTTP 请求复制到多个服务器以实现无缝服务器转换?的详细内容。更多信息请关注PHP中文网其他相关文章!