[ 
https://issues.apache.org/jira/browse/HTTPCORE-786?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18023225#comment-18023225
 ] 

Roy Hashimoto commented on HTTPCORE-786:
----------------------------------------

[Wikipedia|https://en.wikipedia.org/wiki/HTTP/2_Server_Push] says that Chrome 
and Firefox don't support server push either, so not sure what the discrepancy 
is.

> H2 server closes connection on some clients
> -------------------------------------------
>
>                 Key: HTTPCORE-786
>                 URL: https://issues.apache.org/jira/browse/HTTPCORE-786
>             Project: HttpComponents HttpCore
>          Issue Type: Bug
>          Components: HttpCore
>    Affects Versions: 5.3.6
>            Reporter: Roy Hashimoto
>            Priority: Major
>         Attachments: chrome-ok.log, curl-fail.log, firefox-ok.log, 
> safari-fail.log
>
>
> I am seeing curl 7.88.1 and 8.7.1 and Safari 18.6 report a dropped connection 
> from my httpcore5-h2 server. My Intellij project is 
> [here|[https://github.com/rhashimoto/httpcore5-reset-repro/tree/master],] 
> with the Kotlin code 
> [here|[https://github.com/rhashimoto/httpcore5-reset-repro/blob/master/src/main/kotlin/Main.kt].]
>  This is a HTTPS server that allows HTTP2. It  returns the plain text "Hello, 
> World" for every request.
> Here is sample curl output:
> {{$ curl -kv https://localhost:8443/}}
> {{*   Trying 127.0.0.1:8443...}}
> {{* Connected to localhost (127.0.0.1) port 8443 (#0)}}
> {{* ALPN: offers h2,http/1.1}}
> {{* TLSv1.3 (OUT), TLS handshake, Client hello (1):}}
> {{* TLSv1.3 (IN), TLS handshake, Server hello (2):}}
> {{* TLSv1.2 (IN), TLS handshake, Certificate (11):}}
> {{* TLSv1.2 (IN), TLS handshake, Server key exchange (12):}}
> {{* TLSv1.2 (IN), TLS handshake, Server finished (14):}}
> {{* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):}}
> {{* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):}}
> {{* TLSv1.2 (OUT), TLS handshake, Finished (20):}}
> {{* TLSv1.2 (IN), TLS handshake, Finished (20):}}
> {{* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256}}
> {{* ALPN: server accepted h2}}
> {{* Server certificate:}}
> {{*  subject: CN=localhost}}
> {{*  start date: Sep 18 22:47:40 2025 GMT}}
> {{*  expire date: Sep 16 22:47:40 2035 GMT}}
> {{*  issuer: CN=localhost}}
> {{*  SSL certificate verify result: self-signed certificate (18), continuing 
> anyway.}}
> {{* using HTTP/2}}
> {{* h2h3 [:method: GET]}}
> {{* h2h3 [:path: /]}}
> {{* h2h3 [:scheme: https]}}
> {{* h2h3 [:authority: localhost:8443]}}
> {{* h2h3 [user-agent: curl/7.88.1]}}
> {{* h2h3 [accept: */*]}}
> {{* Using Stream ID: 1 (easy handle 0x56250ad2cce0)}}
> {{> GET / HTTP/2}}
> {{> Host: localhost:8443}}
> {{> user-agent: curl/7.88.1}}
> {{> accept: */*}}
> {{> }}
> {{* Empty reply from server}}
> {{* Closing connection 0}}
> {{curl: (52) Empty reply from server}}
> So curl is saying the server returns nothing. Similarly, Safari says "Safari 
> can't open the page...because the server unexpectedly dropped the 
> connection." However, both Chrome and Firefox display "Hello, World" as 
> expected.
> Four logs are attached, one for each client, showing httpcore5 debugging 
> info. I notice that both of the failing clients report something similar:
> {{2025-09-26 21:40:55 [server-dispatch-1] DEBUG org.apache.hc.core5.http.wire 
> - << ..1.............  00 00 31 07 00 00 00 00 00 00 00 00 00 00 00 00}}
> {{2025-09-26 21:40:55 [server-dispatch-1] DEBUG org.apache.hc.core5.http.wire 
> - << .SETTINGS: serve  01 53 45 54 54 49 4e 47 53 3a 20 73 65 72 76 65}}
> {{2025-09-26 21:40:55 [server-dispatch-1] DEBUG org.apache.hc.core5.http.wire 
> - << r attempted to e  72 20 61 74 74 65 6d 70 74 65 64 20 74 6f 20 65}}
> {{2025-09-26 21:40:55 [server-dispatch-1] DEBUG org.apache.hc.core5.http.wire 
> - << nable push        6e 61 62 6c 65 20 70 75 73 68}}
> {{2025-09-26 21:40:55 [server-dispatch-1] DEBUG 
> org.apache.hc.core5.http2.frame - a-0000000000 << stream 0 frame: GOAWAY 
> (0x7); flags: (0x0); length: 49}}
> {{2025-09-26 21:40:55 [server-dispatch-1] DEBUG 
> org.apache.hc.core5.http2.frame.payload - a-0000000000 << Last stream 0}}
> {{2025-09-26 21:40:55 [server-dispatch-1] DEBUG 
> org.apache.hc.core5.http2.frame.payload - a-0000000000 << Code 
> PROTOCOL_ERROR}}
> {{2025-09-26 21:40:55 [server-dispatch-1] DEBUG 
> org.apache.hc.core5.http2.frame.payload - a-0000000000 << SETTINGS: server 
> attempted to enable push}}
> {{2025-09-26 21:40:55 [server-dispatch-1] DEBUG 
> org.apache.hc.core5.reactor.ssl.SSLIOSession - 
> a-0000000000[ACTIVE][rw:r][ACTIVE][rw][NOT_HANDSHAKING][87][58][0] event set 
> [w]}}
> {{2025-09-26 21:40:55 [server-dispatch-1] DEBUG 
> org.apache.hc.core5.reactor.ssl.SSLIOSession - 
> a-0000000000[ACTIVE][rw:r][ACTIVE][rw][NOT_HANDSHAKING][87][58][0] 0 bytes 
> read}}
> {{2025-09-26 21:40:55 [server-dispatch-1] DEBUG 
> org.apache.hc.core5.http.connection - 
> a-0000000000[ACTIVE][rw:r][ACTIVE][rw][NOT_HANDSHAKING][0][0][0] output 
> ready}}
> {{2025-09-26 21:40:55 [server-dispatch-1] DEBUG 
> org.apache.hc.core5.reactor.ssl.SSLIOSession - 
> a-0000000000[ACTIVE][rw:r][ACTIVE][rw][NOT_HANDSHAKING][0][0][0] shutdown 
> GRACEFUL}}
> {{2025-09-26 21:40:55 [server-dispatch-1] DEBUG 
> org.apache.hc.core5.http.connection - 
> a-0000000000[ACTIVE][rw:rw][CLOSING][rw][NOT_HANDSHAKING][outbound 
> done][][0][0][31] input ready}}
> {{2025-09-26 21:40:55 [server-dispatch-1] ERROR 
> org.apache.hc.core5.http.connection - 
> a-0000000000[ACTIVE][rw:rw][CLOSING][rw][NOT_HANDSHAKING][outbound 
> done][][0][0][31] Connection reset}}
> {{java.net.SocketException: Connection reset}}
> {{ at 
> java.base/sun.nio.ch.SocketChannelImpl.throwConnectionReset(SocketChannelImpl.java:399)}}
> {{ at 
> java.base/sun.nio.ch.SocketChannelImpl.implRead(SocketChannelImpl.java:431)}}
> {{ at 
> java.base/sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:489)}}
> {{ at org.apache.hc.core5.reactor.IOSessionImpl.read(IOSessionImpl.java:206)}}
> {{ at 
> org.apache.hc.core5.reactor.ssl.SSLIOSession.receiveEncryptedData(SSLIOSession.java:586)}}
> {{ at 
> org.apache.hc.core5.reactor.ssl.SSLIOSession.access$000(SSLIOSession.java:74)}}
> {{ at 
> org.apache.hc.core5.reactor.ssl.SSLIOSession$1.inputReady(SSLIOSession.java:202)}}
> {{ at 
> org.apache.hc.core5.reactor.InternalDataChannel.onIOEvent(InternalDataChannel.java:139)}}
> {{ at 
> org.apache.hc.core5.reactor.InternalChannel.handleIOEvent(InternalChannel.java:51)}}
> {{ at 
> org.apache.hc.core5.reactor.SingleCoreIOReactor.processEvents(SingleCoreIOReactor.java:176)}}
> {{ at 
> org.apache.hc.core5.reactor.SingleCoreIOReactor.doExecute(SingleCoreIOReactor.java:125)}}
> {{ at 
> org.apache.hc.core5.reactor.AbstractSingleCoreIOReactor.execute(AbstractSingleCoreIOReactor.java:92)}}
> {{ at 
> org.apache.hc.core5.reactor.IOReactorWorker.run(IOReactorWorker.java:44)}}
> {{ at java.base/java.lang.Thread.run(Thread.java:1447)}}
> {{2025-09-26 21:40:55 [server-dispatch-1] DEBUG 
> org.apache.hc.core5.reactor.ssl.SSLIOSession - 
> a-0000000000[CLOSED][][CLOSING][rw][NOT_HANDSHAKING][outbound 
> done][][0][0][31] shutdown GRACEFUL}}
> {{2025-09-26 21:40:55 [server-dispatch-1] DEBUG 
> org.apache.hc.core5.http.connection - a-0000000000[CLOSED][] disconnected}}
> I don't have the expertise to debug at this level but it looks to me that 
> curl (in this case) is aborting because the server is trying to enable server 
> push.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to