Một ứng dụng PHP đăng dữ liệu XML với curl; không có gì lạ mắt, đầu ra trông như thế nào (c/p, nhưng số nhận dạng và mật khẩu đã thay đổi):
Máy chủ: nước ngoài.host.example
Ủy quyền: Basic dGVzdDpnZWhlaW0=
Tác nhân người dùng: ourhost HTTP-connector/1.0
Chấp nhận: */*
Người giới thiệu: https://our.host.example/
Loại nội dung: văn bản/xml
Độ dài nội dung: 9218
Kỳ vọng: 100-tiếp tục
[9218 byte dữ liệu XML]
Điều này được thực hiện trên một vài máy chủ nguồn S1...Sn và được đăng lên một vài máy chủ đích T1...Tn. Một tuần trước máy chủ S1 đã được nâng cấp từ Debian/buster lên Debian/bullseye; phần mềm PHP tạo cũng đã được nâng cấp, nhưng tôi không biết về bất kỳ thay đổi nào trong lĩnh vực này (và các yêu cầu được tạo trông giống hệt nhau). Chính xác là vì bản nâng cấp này, hai máy chủ đích (không liên quan) T1 và T2 từ chối yêu cầu của chúng tôi với mã phản hồi 400. Tất cả các máy chủ đích khác đều hoạt động tốt và T1/T2 hoạt động tốt, nếu được kết nối từ các máy chủ nguồn khác (với cấp độ sửa đổi cũ).
Hệ quả: Lỗi là ở phía chúng ta. Nhưng ở đâu?
Lưu ý bên lề: bỏ tiêu đề Mong đợi không thay đổi bất cứ điều gì.
Thông tin bổ sung: Trong khi T1 chỉ phản hồi với mã phản hồi 400, thì T2 lịch sự và bao gồm một thông báo trạng thái như:
[our.ip.address]:60760 có yêu cầu chưa hoàn thành: Độ dài ước tính là 3994 byte, đã nhận được 3899 byte
Thật không may, gợi ý này không đủ để khai sáng cho tôi (và những người liên hệ ở đó cũng không có đủ kiến thức để làm điều đó), nhưng nó đã dẫn tôi đến điều sau
Giải pháp thay thế: Nếu tôi chặn tiêu đề Độ dài nội dung, quá trình truyền sẽ hoạt động
Điều này tốt hơn là không có gì, nhưng không thỏa mãn - tôi muốn vấn đề được giải quyết; vì vậy tôi đã kiểm tra hai lần và ba lần số trong tiêu đề Độ dài nội dung (vì đây là nguồn lỗi duy nhất mà tôi có thể nghĩ ra cho đến nay); nó có vẻ ổn, và phép tính chính xác tương tự được sử dụng trên các máy chủ S2...Sn vẫn đang hoạt động. Và: độ dài nội dung cộng với tiêu đề ước tính (tất nhiên điều này sẽ khác một chút do máy chủ, ủy quyền và người giới thiệu khác) không phải là độ dài ước tính cũng như độ dài nhận được, mà nằm ở đâu đó ở giữa. Các phản hồi cho đến nay đã cung cấp các con số sau:
Ước lượng |
Nhận |
Sự khác biệt |
4322 |
4228 |
94 |
3972 |
3877 |
95 |
3994 |
3899 |
95 |
6928 |
6768 |
160 |
Thật không may, điều này không phải là hằng số và cũng không rung lên bất kỳ hồi chuông nào.
Tôi đặt một vài thẻ vì Apache (2.4.52), OpenSSL (1.1.1k), curl (7.74.0) và PHP
(7.4.25) đã được nâng cấp cùng với máy chủ mặc dù tôi không thấy bất kỳ ảnh hưởng nào có thể xảy ra. Nhưng tôi không có bất kỳ ý tưởng nào khác, vì vậy tôi không muốn loại trừ điều này.
Bất kỳ ý tưởng được chào đón.