Closed maojinhua closed 4 months ago
Geegle Chrome can send request after server shut down. Safari browser or Postman can not send request after server shut down.
I've tracked this to UpgradeableConnection::graceful_shutdown
in hyper-util
doing nothing when the connection is still in the UpgradeableConnStateProj::ReadVersion
state, i.e. the client hasn't sent the first HTTP request line.
I didn't find anything useful to do there either but maybe the function could signal to the caller that nothing has been read yet so it is safe to just drop the connection?
Alternatively we could take the io
inside and close the TCP connection but I fail to see how that can be easily done.
What the browser seems to be doing is it opens a spare connection and leaves it lying around without sending anything on it. This prevents the axum
example to finish because it waits for this connection. The example even includes a timeout layer but since the connection never gets to the state where a tower service is called, it's completely ignored.
This can also be simulated with simple nc localhost 3000
and leaving this connection open.
Hm, I thought we fixed that as part 1.0.
This is ultimately a duplicate of #1885 so that one can be closed now.
Probably, #2294 can be also closed.
Version axum 0.7.4 tower-http 0.5 hyper 1.1.0 googel chrome 121.0.6167.184
Platform macOs Big Sur 11.5.1
Description After clone axum source code, run the following command
When the server is up, do the follows in Geegle Chrome:
1.open the serving page http://127.0.0.1:3000/ in browser (this is a must step to reproduce the problem) 2.go back to your terminal and press ctrl+c to stop the server 3.and you see that the server is hanging up but not stop even after a long time 4.After closing Google Chrome, the server shuts down immediately.
this is the log. I found that when Google Chrome initiates a request, it creates two connections. After the request is completed, only one connection is closed, but the other connection remains active。
The following is the request log sent using Safari browser or Postman. You can see that the server shuts down normally, and there is only one connection initiated for each request sent by the browser.
How can I ensure that Google Chrome also doesn't encounter such an issue? It seems like this problem could lead to the server being unable to shut down for extended periods, which appears to be a bug.