Tin tức

Nhóm Images của Cloudflare Phát Hiện Lỗi Race Condition trong Thư Viện HTTP hyper

Phân tích sâu về cách nhóm Images của Cloudflare truy tìm lỗi race condition trong thư viện HTTP hyper gây ra phản hồi bị cắt ngắn cho các ảnh lớn, được sửa chỉ với bốn dòng mã.

July 2, 2026· 2 min read· Nguồn: The Cloudflare Blog
Nhóm Images của Cloudflare Phát Hiện Lỗi Race Condition trong Thư Viện HTTP hyper

Dịch vụ Images của Cloudflare, được xây dựng bằng Rust trên Workers, sử dụng thư viện HTTP hyper để xử lý các kết nối máy khách. Khi nhóm tái cấu trúc binding Images vào tháng 12 năm 2025 để sử dụng socket Unix cục bộ thay vì định tuyến qua dịch vụ trung gian, họ bắt đầu thấy các lỗi gián đoạn cho các biến đổi ảnh lớn hơn. Phản hồi trả về với trạng thái 200 và header Content-Length hứa hẹn hàng megabyte, nhưng phần thân bị cắt ngắn — đôi khi chỉ khoảng 200 KB trong phản hồi 3.3 MB đến được.

Lỗi này là một race condition trong logic xả phản hồi của hyper. Khi reader ở đầu kia của socket chậm hơn writer (dù chỉ vài mili giây), bộ đệm nội bộ của hyper sẽ đầy lên, và nó cần đợi bộ đệm gửi đi của socket được xả. Trong các điều kiện đồng thời thích hợp, hyper sẽ thực hiện shutdown trên socket trước khi tất cả dữ liệu được xả, làm cắt ngắn phản hồi.

Nhóm đã dành sáu tuần để gỡ lỗi. Họ xây dựng một bản tái tạo có thể kích hoạt lỗi theo yêu cầu, loại trừ các timeout, kiểm tra qua các phiên bản hyper từ 0.14 đến 1.8 (lỗi xuất hiện ở tất cả), và xác nhận runtime Workers không có lỗi. Theo dõi phân tán đã thu hẹp vấn đề vào đường dẫn binding qua dịch vụ Images.

Sửa lỗi rất nhỏ: bốn dòng mã trong hyper để đảm bảo rằng shutdown chỉ được gọi sau khi tất cả dữ liệu đã được xả vào socket. Cloudflare đã đóng góp bản sửa lỗi lên upstream.

Đây là một ví dụ tuyệt vời về cách ngay cả các thư viện đã được kiểm chứng như hyper cũng có thể có các lỗi đồng thời tinh vi chỉ xuất hiện trong các điều kiện sản xuất cụ thể — và cách gỡ lỗi cẩn thận, có phương pháp có thể cô lập chúng.