Fix v2ray http transport server read request

This commit is contained in:
世界 2023-04-11 10:30:10 +08:00
parent bb63429079
commit cf778eda4f
No known key found for this signature in database
GPG key ID: CD109927C34A63C4

View file

@ -102,12 +102,20 @@ func (s *Server) ServeHTTP(writer http.ResponseWriter, request *http.Request) {
} }
} }
writer.WriteHeader(http.StatusOK)
writer.(http.Flusher).Flush()
var metadata M.Metadata var metadata M.Metadata
metadata.Source = sHttp.SourceAddress(request) metadata.Source = sHttp.SourceAddress(request)
if h, ok := writer.(http.Hijacker); ok { if h, ok := writer.(http.Hijacker); ok {
var requestBody *buf.Buffer
if contentLength := int(request.ContentLength); contentLength > 0 {
requestBody = buf.NewSize(contentLength)
_, err := requestBody.ReadFullFrom(request.Body, contentLength)
if err != nil {
s.fallbackRequest(request.Context(), writer, request, 0, E.Cause(err, "read request"))
return
}
}
writer.WriteHeader(http.StatusOK)
writer.(http.Flusher).Flush()
conn, reader, err := h.Hijack() conn, reader, err := h.Hijack()
if err != nil { if err != nil {
s.fallbackRequest(request.Context(), writer, request, 0, E.Cause(err, "hijack conn")) s.fallbackRequest(request.Context(), writer, request, 0, E.Cause(err, "hijack conn"))
@ -122,8 +130,12 @@ func (s *Server) ServeHTTP(writer http.ResponseWriter, request *http.Request) {
} }
conn = bufio.NewCachedConn(conn, cache) conn = bufio.NewCachedConn(conn, cache)
} }
if requestBody != nil {
conn = bufio.NewCachedConn(conn, requestBody)
}
s.handler.NewConnection(request.Context(), conn, metadata) s.handler.NewConnection(request.Context(), conn, metadata)
} else { } else {
writer.WriteHeader(http.StatusOK)
conn := NewHTTP2Wrapper(&ServerHTTPConn{ conn := NewHTTP2Wrapper(&ServerHTTPConn{
NewHTTPConn(request.Body, writer), NewHTTPConn(request.Body, writer),
writer.(http.Flusher), writer.(http.Flusher),