Chúng tôi có thể tạo lại kịch bản sau một cách đáng tin cậy:
- Tạo một trang HTML nhỏ thực hiện các yêu cầu AJAX đến máy chủ (sử dụng HTTP POST)
- Ngắt kết nối khỏi mạng và kết nối lại
- Theo dõi các gói mà IE tạo ra sau khi bị lỗi
Sau khi kết nối mạng không thành công, IE thực hiện yêu cầu AJAX tiếp theo nhưng chỉ gửi tiêu đề HTTP (không phải phần thân) khi thực hiện bài đăng HTTP. Điều này gây ra tất cả các loại vấn đề trên máy chủ vì nó chỉ là một yêu cầu một phần. Google vấn đề này với Bing và bạn sẽ thấy nhiều người phàn nàn về "lỗi máy chủ ngẫu nhiên" khi sử dụng AJAX hoặc lỗi AJAX không giải thích được.
Chúng tôi biết rằng IE (không giống như hầu hết các trình duyệt khác) luôn gửi một HTTP POST dưới dạng HAI gói TCP / IP. Tiêu đề và nội dung được gửi riêng biệt. Trong trường hợp trực tiếp sau khi bị lỗi, IE chỉ gửi tiêu đề . IE không bao giờ gửi tải trọng và cuối cùng máy chủ sẽ phản hồi bằng một Thời gian chờ.
Vì vậy, câu hỏi của tôi là - tại sao nó lại hoạt động theo cách này? Có vẻ như sai khi dựa trên thông số HTTP và các trình duyệt khác không hoạt động theo cách này. Nó chỉ đơn giản là một lỗi? Chắc chắn điều này tạo ra sự tàn phá trong bất kỳ ứng dụng Web dựa trên AJAX nghiêm trọng nào.
Tài liệu tham khảo:
Có một sự cố tương tự, được kích hoạt bởi thời gian chờ duy trì HTTP ngắn hơn 1 phút và được ghi lại ở đây: