Kết nối mở ra. Các tiêu đề yêu cầu đi ra. Tệp dường như không di chuyển. Một cách giải thích là máy khách đang chờ phản hồi cho Expect: 100-continue trước khi gửi phần thân.

Cơ chế này cho phép người nhận từ chối yêu cầu dựa trên tiêu đề trước khi một lần tải lên có thể lớn được gửi đi. Trình tự thành công thông thường là:

request headers → 100 Continue → request body → final response

100 là thông tin: nó cho phép máy khách tiếp tục, nhưng không có nghĩa là tệp đã được lưu hoặc thao tác ứng dụng đã thành công. Một Git push trả về HTTP 417 là một trường hợp cụ thể của kỳ vọng không được đáp ứng.

Xác định phản hồi mà máy khách đã nhận

Quan sátĐiều cần điều tra
100 ContinueMáy khách có thể tiếp tục với phần thân
Từ chối cuối cùng trước phần thânThao tác bị từ chối ở giai đoạn tiêu đề
Không có phản hồi tạm thời như mong đợiChính sách chờ của máy khách và cách xử lý trên đường đi đó

curl có một cài đặt chờ expect-continue riêng. Nếu thời gian chờ đó của libcurl hết mà không có phản hồi mong đợi, nó vẫn gửi phần thân; việc hết hạn không tự động là toàn bộ quá trình truyền thất bại. Cài đặt này tách biệt với thời gian cho phép cho toàn bộ quá trình truyền. Tăng thời gian sau có thể để lại khoảng tạm dừng ban đầu đó mà không được giải thích.

Cũng cần xác định cuộc trò chuyện HTTP nào mang Expect. Với CONNECT thông thường đến một đích HTTPS, trao đổi tải lên của trang web nằm bên trong TLS; proxy chuyển tiếp không chỉ đơn giản kiểm tra tiêu đề kỳ vọng bên trong. Đường chặn bắt hoặc chuyển tiếp văn bản thuần túy thì khác.

Loại bỏ kỳ vọng có thể là một lựa chọn tương thích có chủ đích, nhưng nó có nghĩa là máy khách có thể bắt đầu gửi một phần thân lớn trước khi biết về một sự từ chối sớm. Hãy so sánh hành vi đó với yêu cầu thực tế. Đừng mô tả một giải pháp lịch sử cho proxy cũ như một chỉ dẫn phổ quát để loại bỏ tiêu đề khỏi mọi lần tải lên.

Bài viết liên quan