Tôi đang cố thiết lập kết nối HTTP liên tục từ ứng dụng Silverlight đến trang PHP (nghĩa là không tạo kết nối TCP mới cho mỗi yêu cầu HTTP) được máy chủ Apache lưu trữ."Connection: Keep-Alive" trong phản hồi của máy chủ
Để kết thúc này, tôi cần máy chủ web gửi phản hồi HTTP của mình với tiêu đề "Kết nối" được đặt thành "Keep-alive". Phía máy khách, dường như không có vấn đề gì vì API mạng do Silverlight cung cấp về cơ bản là trình bao bọc của capabilies mạng trình duyệt, từ những gì tôi đã đọc: vì vậy nếu trình duyệt hỗ trợ HTTP 1.1 và Connection: Keep-Alive theo mặc định cho các yêu cầu của nó, nó ổn. Độ dài nội dung cũng được xác định rõ, để máy chủ biết khi nào , nó phải gửi phản hồi. Tuy nhiên, phản hồi của máy chủ với yêu cầu PHP đặt "Connection:" có hệ thống thành "close", do đó kết thúc kết nối và ngăn chặn kết nối liên tục.
Tôi đã thử một số việc để giải quyết vấn đề này: Các phương thức khác nhau (GET và POST), đưa ra một cách rõ ràng "Kết nối: tiếp tục sống" với mã PHP sau ở đầu tập lệnh của tôi:
header("Connection: Keep-alive");
Sau đó thêm tiêu đề dự kiến vào phản hồi, điều này là tốt, nhưng thêm "Kết nối: đóng" vẫn được thêm vào sau trong tiêu đề phản hồi.
Đây có phải là tính năng của PHP hoặc Apache thực thi "đóng" (vì mục đích bảo mật hoặc hiệu suất, tôi đoán) hoặc tôi chỉ thiếu một thứ gì đó ở đây?
Xin cảm ơn trước.
P.S. : Bằng cách sniffing packet, tôi đã nhận thấy rằng không có nhiều trang web sử dụng "Keep-alive" và kết nối TCP được thiết lập lại. Không Keepalive hành vi mặc định và ưa thích theo HTTP 1.1?
Đó có thể là apache, chứ không phải PHP - theo hiểu biết tốt nhất của tôi, PHP không kiểm soát được điều đó. Bạn có thể xác minh bằng cách cố gắng yêu cầu một tệp tĩnh thông qua cùng một kết nối. Chỉ thị Apache: http://httpd.apache.org/docs/2.2/mod/core.html#keepalive –