Là máy chủ HTTP 1.1, tôi trả lời yêu cầu GET với 200 mã trạng thái OK, sau đó bắt đầu gửi dữ liệu đến máy khách. Trong lần gửi này, lỗi xảy ra và tôi không thể hoàn thành.HTTP: lỗi trong khi trả lời sau 200 mã trạng thái OK
Tôi không thể gửi mã trạng thái mới làm mã trạng thái cuối cùng đã được gửi.
Tôi nên hành xử như thế nào để cho khách hàng biết đã xảy ra lỗi và tôi không thể tiếp tục yêu cầu HTTP này?
Tôi có thể nghĩ chỉ có một giải pháp: đóng socket, nhưng nó không hoàn hảo: nó phá vỡ tính năng tiếp tục, và không có giải thích rõ ràng về lỗi được đưa ra cho khách hàng.
Chuẩn HTTP dường như giả sử rằng máy chủ đã biết chính xác nội dung cần trả lời trước khi bắt đầu trả lời. Nhưng điều này không phải luôn luôn như vậy. Ví dụ: Tôi trả về một tệp rất lớn (vài GB) từ đĩa và tôi nhận được lỗi IO tại một số điểm trong khi đọc tệp. Ví dụ tương tự với một bãi chứa DB lớn.
Tôi không thể xây dựng toàn bộ phản hồi của mình trong bộ nhớ, sau đó gửi nó.
Tiêu chuẩn HTTP 1.1 giúp sử dụng như vậy với mã hóa chuyển đoạn: Tôi thậm chí không cần biết kích thước cuối cùng trước khi bắt đầu gửi trả lời. Vì vậy, việc sử dụng này không bị loại trừ khỏi HTTP 1.1.
Có một tiêu đề Content-Length, khách hàng nên biết những gì số lượng dữ liệu nó là vụ phải nhận. Không thể nghĩ ra bất kỳ cách nào khác, nhưng tôi thừa nhận tôi không bao giờ kiểm tra xem có xảy ra sự cố sau khi tệp được truyền đi hay không, không có tiêu đề http "kết thúc truyền" nào mà tôi đã biết. Tôi sẽ đặt cược máy chủ không quan tâm anyway, đó là kinh doanh của khách hàng HTTP để xác minh, sau khi tất cả nó là khách hàng yêu cầu tài nguyên ban đầu. –
_know_ bạn có nội dung trước khi gửi '200'. Có, bộ đệm tiêu thụ nhiều tài nguyên hơn (chủ yếu là bộ nhớ), nhưng sửa những thứ này. Và nhiều 'GB' hét lên với tôi' http' có thể là phương tiện giao thông không phù hợp .... – Wrikken
@Piotr Wadas: Tiêu đề Nội dung Độ dài không thể trả lại nếu chúng tôi không biết kích thước trả lời trước. Mã hóa chuyển chunked tồn tại cho mục đích cụ thể đó, nhưng dường như không cung cấp một cách để nói "có một lỗi bây giờ". – user1409932