HTTP server: Persistent connection on HTTP/1.0 hangs, when using streaming response body
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 3/5
- Tempo estimado
- 1-2 dias
- Facilidade para iniciantes
- 76/100
Direção de pesquisa
Start at src/Io/StreamingServer.php around line 308 and reproduce the issue with the provided streaming ThroughStream example and curl --http1.0 request. Trace how an HTTP/1.0 response with an unknown body size handles Connection: keep-alive; done means the response is transmitted and the connection closes instead of hanging.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Assuming the response body is streaming and its size is unknown, when a request such as this is received:
GET / HTTP/1.0
Connection: keep-alive
ReactPHP produces a response without a Content-Length header, such as this:
HTTP/1.0 200 OK
Connection: keep-alive
<data>
and doesn't close the connection, which then just hangs until timeout, because for the client there is no way of telling, when the response data is finished transmitting.
Steps to reproduce:
$server = new React\Http\HttpServer(function () {
$stream = new ThroughStream();
Loop::futureTick(function () use ($stream) {
$stream->write("foo\n");
$stream->end();
});
return new Response(200, body: $stream);
});
$socket = new React\Socket\SocketServer("0.0.0.0:80");
$server->listen($socket);
curl -v --http1.0 -H "connection: keep-alive" localhost:80
Tested on v1.11.0 and 3.x-dev (4e1b4f369eea9428ac38b8851e113ce5ad47cbee).
Since it's HTTP/1.0, Transfer-Encoding: chunked cannot be used. I believe the only good way to handle this situation is to ignore the requested Connection: keep-alive and just close the connection after the response is transmitted. I think this should be a valid behavior - server is not required to strictly obey the keep-alive request header.
The relevant code is here: https://github.com/reactphp/http/blob/1.x/src/Io/StreamingServer.php#L308
- Linguagem predominante
- PHP
- Estrelas
- 781
- Forks
- 166
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Guia de contribuição
Nenhum guia de contribuição indexado para este repositório
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de reactphp/http
-
bug
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 35/100
-
Roadmap to reactphp/http v3 Abertamaintenance
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 20/100
-
new feature
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 48/100
-
help wanted new feature
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 25/100
-
new feature
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 35/100
Todas as issues de reactphp/http
Issues semelhantes
-
Admissions heading updates Abertaa11y admissions.uiowa.edu needs grooming SiteImprove best practice
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100
-
Save States Menu Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
pluginsGLPI/datainjection#673 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
octobercms/october#6130 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
getgrav/grav-plugin-form#656 ·