bneradt opened a new issue, #9115:
URL: https://github.com/apache/trafficserver/issues/9115

   While adding test coverage for #9085, I noticed that we have issues handling 
multiplexed HTTP/2 DATA frames on the client side as we handle translating the 
transactions toward the origin. I forced the client to send DATA continuation 
frames by reducing the stream window to 10 bytes. The client (Proxy Verifier) 
multiplexes three transactions per this window. The client and ATS handle this 
fine. Toward the origin, I notice that ATS sends the first request headers and 
the first 10 byte body as a chunked body. This 10 byte body corresponds to the 
first DATA frame content. The problem is that ATS does not continue to stream 
this first request until chunk termination. Instead, ATS then sends the headers 
for the second request. This is, naturally, not acceptable for HTTP/1 since 
there is no concept of multiplexing like that for HTTP/1.
   
   I have an AuTest that reproduces this. I'll attach to this issue:
   
   1. The AuTest.
   2. The Proxy Verifier replay file used by the test to generate the HTTP 
traffic.
   3. A tcpdump I captured while running the test. Port 2007 is client-side 
HTTP/2, port 2002 is the client side HTTP/1.1 traffic.
   4. A TLS keylog file to decrypt the tcpdump on the client side (the origin 
side is plaintext HTTP/1.1).
   
   Looking at the pcap file:
   * Note that the transaction has an initial GET request for path 
`/zero-request`. Ignore this.
   * Frame 55 contains the headers for the first relevant POST request. 
Wireshark doesn't parse it because the stream is ultimately corrupted per the 
bug recorded in this issue.
   * Frame 57 contains the 10 byte chunk for the first request. It correctly 
has no chunk terminator because further bytes should be forthcoming.
   * Frame 61 incorrectly contains the header bytes for the second POST 
request. This is malformed HTTP/1.1 as an HTTP/1.1 parser would be expecting 
more chunk bytes, not header bytes of another request.
   
   
   
[tls_session_keys.txt](https://github.com/apache/trafficserver/files/9679637/tls_session_keys.txt)
   
[h2_to_h1_malformed.pcap.gz](https://github.com/apache/trafficserver/files/9679643/h2_to_h1_malformed.pcap.gz)
   
[http2_flow_control.replay.yaml.gz](https://github.com/apache/trafficserver/files/9679648/http2_flow_control.replay.yaml.gz)
   
[http2_flow_control.test.py.gz](https://github.com/apache/trafficserver/files/9679649/http2_flow_control.test.py.gz)
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to