HTTP server: Persistent connection on HTTP/1.0 hangs, when using streaming response body
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức phù hợp với người mới
- 76/100
Hướng nghiên cứu
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.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
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
- Ngôn ngữ chính
- PHP
- Star
- 781
- Fork
- 166
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của reactphp/http
-
bug
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 35/100
-
Roadmap to reactphp/http v3 Đang mởmaintenance
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 20/100
-
new feature
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
-
help wanted new feature
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 25/100
-
new feature
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
Tất cả issue của reactphp/http
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
getgrav/grav-plugin-api#45 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
RSS-Bridge/rss-bridge#5098 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
phingofficial/phing#2025 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
silverstripe/developer-docs#911 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 74/100