ด้วยความช่วยเหลือของ HttpWatch ฉันพยายามคิดว่า GMail ใช้งาน Comet อย่างไร
ฉันเข้าสู่ระบบ GMail ด้วยสองบัญชี บัญชีหนึ่งใน IE และอีกบัญชีใน Firefox แชทใน GTalk ใน GMail ด้วยคำวิเศษเช่น "WASSUP" จากนั้น ฉันออกจากระบบบัญชี GMail ทั้งสองบัญชี กรองเนื้อหา http ใดๆ โดยไม่มีสตริง "WASSUP" ผลลัพธ์แสดงว่าคำขอ HTTP ใดเป็นช่องทางการสตรีม (หมายเหตุ: ฉันต้องออกจากระบบ ไม่เช่นนั้น HTTP ที่ไม่มีวันสิ้นสุดจะไม่แสดงเนื้อหาใน HttpWatch)
ผลลัพธ์ที่ได้ก็น่าสนใจ URL สำหรับช่องสตรีมมีลักษณะดังนี้:
ไม่น่าแปลกใจเลยที่ GMail ทำ Comet ใน IE ด้วย IFRAME เนื้อหา Http ขึ้นต้นด้วย "<html><body>
"
เดิมทีฉันเดาว่า GMail ทำ Comet ใน Firefox ด้วย XmlHttpRequest หลายส่วน ฉันประหลาดใจที่ส่วนหัวการตอบกลับไม่มีส่วนหัว "multipart/x-mixed-replace" ส่วนหัวของคำตอบมีดังนี้:
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Date: Sat, 20 Mar 2010 01:52:39 GMT
X-Frame-Options: ALLOWALL
Transfer-Encoding: chunked
X-Content-Type-Options: nosniff
Server: GSE
X-XSS-Protection: 0
น่าเสียดายที่ HttpWatch ไม่ได้บอกว่าคำขอ HTTP มาจาก XmlHttpRequest หรือไม่ เนื้อหาไม่ใช่ HTML แต่เป็น JSON ดูเหมือนว่าจะเป็นการตอบสนองต่อ XHR แต่นั่นจะไม่ทำงานสำหรับ Comet หากไม่มี multipart/x-mixed-replace ใช่ไหม
มีวิธีอื่นใดที่จะทราบว่า GMail นำ Comet ไปใช้อย่างไร
อัปเดต: หลังจากการตรวจสอบเพิ่มเติม ฉันเชื่อว่า GMail ใช้ Comet ในลักษณะนี้: 1) ใน IE จะใช้ iframe ที่ซ่อนอยู่ตลอดไป; 2) ใน Firefox จะใช้ตลอดไป-XHR โดยไม่มีส่วนหัว multipart/x-mixed-replace ลูกค้าจะตอบสนองตามเงื่อนไข (readyState == 3) หรือ (readyState == 4) นั่นคือทั้งในสถานะโต้ตอบและสถานะสมบูรณ์