diff --git a/transport/http2_client.go b/transport/http2_client.go
index <HASH>..<HASH> 100644
--- a/transport/http2_client.go
+++ b/transport/http2_client.go
@@ -542,6 +542,17 @@ func (t *http2Client) handleData(f *http2.DataFrame) {
 	data := make([]byte, size)
 	copy(data, f.Data())
 	s.write(recvMsg{data: data})
+
+	if f.FrameHeader.Flags.Has(http2.FlagDataEndStream) {
+		s.mu.Lock()
+		if (s.state == streamWriteDone) {
+			s.state = streamDone
+		} else {
+			s.state = streamReadDone
+		}
+		s.mu.Unlock()
+		s.write(recvMsg{err: io.EOF})
+	}
 }
 
 func (t *http2Client) handleRSTStream(f *http2.RSTStreamFrame) {
Honor END_STREAM flags in HTTP/2 Data frames.

Without this, "broken deployments" that do not send trailers after their
response will cause Go clients to hang indefinitely (until a client-side
timeout or server-side slowloris protection kills the connection).

See the diagram at <URL>