bryancall commented on issue #13334:
URL: 
https://github.com/apache/trafficserver/issues/13334#issuecomment-4835455089

   Thanks, the detailed capture made this reproducible. I tracked it down: the 
origin (deepwiki, on Vercel) is sending a `103 Early Hints` interim response 
before the final `200` on the HTTP/2 connection from ATS to the origin. Apache 
Traffic Server's origin-side HTTP/2 code currently does not handle 1xx interim 
responses correctly. It merges the interim headers and the final response 
headers together, which produces a duplicate `:status` pseudo-header and trips 
the HTTP/2 header validation. ATS then resets the stream and reports it as 
"Server closed connection while reading response header," even though the 
origin never closed the connection (your packet capture confirms that, no FIN 
or RST).
   
   One detail worth noting: the `103 Early Hints` only appears when the request 
carries the usual browser navigation headers (the `sec-fetch-*` set, 
`accept-encoding` including `zstd`, and so on). A plain request does not 
trigger it, which is why it shows up from a real browser through the proxy but 
not from simple command-line tools.
   
   Workaround until this is fixed: remove `h2` from 
`proxy.config.ssl.client.alpn_protocols` (leaving `http/1.1`). ATS will then 
speak HTTP/1.1 to the origin, where this does not occur. I confirmed that makes 
the same request succeed.
   
   I have a fix for the HTTP/2 origin path and I am preparing a pull request 
with a test. I will link it here.
   


-- 
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