Tôi có một chương trình nhỏ gửi yêu cầu http và nhận phản hồi bằng giao thức TCP.Nhận phản hồi của yêu cầu http mà không có độ dài nội dung?
Định dạng yêu cầu của tôi;
GET/HTTP/1.0
Host: somewebsite.com
{two new line}
Tôi đọc dòng phản hồi theo dòng từ socket (sử dụng NetworkStream và StreamReader in C#) cho đến khi tôi tìm tiêu đề có độ dài nội dung. Tôi lưu trữ độ dài, sau đó tiếp tục đọc cho đến khi tìm thấy một dòng trống. Sau đó tạo một bộ đệm với độ dài và nhận phần còn lại của phản hồi.
Nhưng một số phản hồi không có tiêu đề có độ dài nội dung. Vì vậy, cách tiếp cận của tôi không thành công. Nếu tôi không biết tôi sẽ nhận được bao nhiêu byte, khi nào tôi nên dừng lại?
Điều đó rất gây hiểu lầm. Nếu phản hồi có trường tiêu đề nội dung có độ dài và không sử dụng mã hóa chunked, đó là thông tin * only * bạn có. Nếu bạn nhận được ít nội dung hơn, nội dung sẽ bị coi là bị cắt bớt. Nếu bạn nhận được nhiều nội dung hơn, serer bị hỏng hoặc bạn đang xem phản hồi tiếp theo. –
Tôi đang khiêm tốn yêu cầu giải thích cách đọc phản ứng tiếp theo có thể xảy ra trên một ổ cắm duy nhất, khi khách hàng không hoàn thành việc phân tích cú pháp hiện tại, vì vậy rất khó gửi yêu cầu tiếp theo. Tôi có thể hiểu được điều tốt hơn. Nếu không, tôi không thấy bất kỳ sự bất đồng đáng kể nào về vấn đề này. Bạn sẽ làm gì khi bạn đọc đến độ dài nội dung được khai báo và socket đọc cho bạn biết còn 2 byte nữa không? Trong thực tế, nói rằng "máy chủ bị hỏng ngu ngốc, tôi sẽ không nói chuyện với bạn nữa" là không áp dụng thường xuyên như các lập trình viên tốt muốn. –
vtmarvin: khách hàng có thể sử dụng pipelining. –