Con l'aiuto di HttpWatch, ho cercato di capire come GMail implementa Comet.In che modo GMail implementa Comet?
Accedo a GMail con due account, uno in IE e l'altro in Firefox. Chiacchierando in GTalk in GMail con alcune parole magiche come "WASSUP". Quindi, disconnetto entrambi gli account GMail, filtra qualsiasi contenuto http senza la stringa "WASSUP". Il risultato mostra quale richiesta HTTP è il canale di streaming. (Nota: devo disconnettere, altrimenti HTTP senza fine non mostrerebbe il contenuto in HttpWatch.)
Il risultato è interessante. L'URL per il canale torrente è come:
Non è una sorpresa che GMail fare Comet in IE con IFRAME. Il contenuto di Http inizia con "<html><body>
".
Originariamente, ho indovinato che GMail fa Comet in Firefox con multipart XmlHttpRequest. Con mia sorpresa, l'intestazione della risposta non ha l'intestazione "multipart/x-mixed-replace". Le intestazioni di risposta sono le seguenti:
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
Purtroppo, il HttpWatch non dice se una richiesta HTTP è da XmlHttpRequest o meno. Il contenuto non è HTML ma JSON. Sembra una risposta per XHR, ma non funzionerebbe per Comet senza multipart/x-mixed-replace, giusto?
C'è un altro modo per capire come GMail implementa Comet?
Aggiornamento: Dopo ulteriori indagini, credo GMail implementa Comet in questo modo: 1) in IE, è utilizzare un sempre-nascosto-iframe; 2) in Firefox, usa per sempre XHR senza intestazione multipart/x-mixed-replace. Il client risponderà in conditon (readyState == 3) O (readyState == 4). Cioè, sia nello stato interattivo che nello stato completo.
È un buon articolo. Ma, ancora non spiega perché GMail sceglie JSON come risposta in Firefox. –
@Morgan, JSON è un buon modo per confezionare i dati, specialmente se non esclusivamente per l'uso di Javascript - cfr http://ajaxian.com/archives/json-vs-xml-the-debate e (specialmente) i molti link da esso. Con la codifica di trasferimento chunked, funziona bene ... almeno nei browser conformi agli standard decenti ;-). –
Ciao, ho provato il metodo di ritorno per l'articolo perché l'articolo non è disponibile. Puoi consegnare un altro link? Grazie!! – loveNoHate