in pkg/common/http/manager.go [196:237]
func (hcm *HttpConnectionManager) buildTargetResponse(c *pch.HttpContext) {
if c.LocalReply() {
return
}
switch res := c.SourceResp.(type) {
case *stdHttp.Response:
//Merge header
remoteHeader := res.Header
for k := range remoteHeader {
c.AddHeader(k, remoteHeader.Get(k))
}
//status code
c.StatusCode(res.StatusCode)
if http.IsSSEStream(res) {
c.TargetResp = &client.StreamResponse{Stream: res.Body}
} else {
body, err := io.ReadAll(res.Body)
if err != nil {
panic(err)
}
//close body
_ = res.Body.Close()
c.TargetResp = &client.UnaryResponse{Data: body}
}
case []byte:
c.StatusCode(stdHttp.StatusOK)
if json.Valid(res) {
c.AddHeader(constant.HeaderKeyContextType, constant.HeaderValueApplicationJson)
} else {
c.AddHeader(constant.HeaderKeyContextType, constant.HeaderValueTextPlain)
}
c.TargetResp = &client.UnaryResponse{Data: res}
default:
//dubbo go generic invoke
response := util.NewDubboResponse(res, false)
c.StatusCode(stdHttp.StatusOK)
c.AddHeader(constant.HeaderKeyContextType, constant.HeaderValueJsonUtf8)
c.TargetResp = response
}
}