Dengan bantuan HttpWatch, saya mencoba mencari tahu bagaimana GMail mengimplementasikan Comet.
Saya login ke GMail dengan dua akun, satu di IE dan satu lagi di Firefox. Ngobrol di GTalk di GMail dengan beberapa kata ajaib seperti "WASSUP". Lalu, saya logout kedua akun GMail, memfilter konten http apa pun tanpa string "WASSUP". Hasilnya menunjukkan permintaan HTTP mana yang merupakan saluran streaming. (Catatan: Saya harus keluar. Jika tidak, HTTP yang tidak pernah berakhir tidak akan menampilkan konten di HttpWatch.)
Hasilnya menarik. URL untuk saluran streaming seperti:
Tidak mengherankan jika GMail melakukan Comet di IE dengan IFRAME. Konten Http dimulai dengan "<html><body>
".
Awalnya, saya menduga GMail melakukan Comet di Firefox dengan XmlHttpRequest multi-bagian. Yang mengejutkan saya, header respons tidak memiliki header "multipart/x-mixed-replace". Header responsnya adalah sebagai berikut:
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
Sayangnya, HttpWatch tidak mengetahui apakah permintaan HTTP berasal dari XmlHttpRequest atau tidak. Kontennya bukan HTML tetapi JSON. Sepertinya respons untuk XHR, tetapi itu tidak akan berfungsi untuk Comet tanpa multipart/x-mixed-replace, bukan?
Apakah ada cara lain untuk mengetahui bagaimana GMail mengimplementasikan Comet?
Pembaruan: Setelah penyelidikan lebih lanjut, saya yakin GMail mengimplementasikan Comet dengan cara ini: 1) di IE, ia menggunakan iframe yang disembunyikan selamanya; 2) di Firefox, menggunakan forever-XHR tanpa header multipart/x-mixed-replace. Klien akan merespons dalam kondisi (readyState == 3) ATAU (readyState == 4). Artinya, dalam keadaan interaktif dan keadaan lengkap.