I find the root cause (1) client : send post with data(HEADER frame without END_STREAM flag and DATA frame with END_STREAM flag) (2) server config location { return 200 "simple return"; } (3) Once the Nginx receives the HEADER frame, it call http rewrite module to process request and then the call ngx_http_finalize_connection->ngx_http_v2_close_stream to close stream beby mrpre - Other discussion
I find an weird action of Nginx that it send WINDOWS_UPDATE frame by using a closed stream_id (see wp.pcap). The client which using hyper(python) will throw exception.by mrpre - Other discussion