The goal: When I open localhost:9000/xml
page in the browser I would like to see xml content (which is large). I use gRPC server with grpc-gateway as a proxy.
To send my xml file I use server-side stream and send google.api.HttpBody
message with text/xml
content-type. Below is a part of my server code for streaming xml:
reader := bytes.NewReader(data) // "data" is a large xml file
buffer := make([]byte, 1024)
for {
n, err := reader.Read(buffer)
if err == io.EOF {
break
}
if err != nil {
return status.Error(codes.Internal, "")
}
if err := stream.Send(&httpbody.HttpBody{
ContentType: "text/xml",
Data: buffer[:n],
}); err != nil {
return status.Error(codes.Internal, "")
}
}
Unfortunately when I open localhost:9000/xml
in the browser I see that my xml response is broken. Every 1025 byte starts on a new line, for example:
...
...
<loc>https://example.com/books/1</l
oc>
...
...
How can I stream a large xml content and not break it?