Avec l'aide de HttpWatch, j'ai essayé de comprendre comment GMail implémente Comet.Comment GMail implémente-t-il Comet?
Je me connecte à GMail avec deux comptes, un dans IE et l'autre dans Firefox. Discuter dans GTalk dans GMail avec quelques mots magiques comme "WASSUP". Ensuite, je déconnecte les deux comptes GMail, filtre tout contenu http sans chaîne "WASSUP". Le résultat montre quelle requête HTTP est le canal de diffusion. (Note: je dois me déconnecter, sinon le HTTP interminable n'afficherait pas le contenu dans HttpWatch.)
Le résultat est intéressant. L'URL pour le canal de flux est comme:
Il n'y a pas surprenant que GMail faire la comète dans IE avec IFRAME. Le contenu Http commence par "<html><body>
". À l'origine, je devinais que GMail fait Comet dans Firefox avec XmlHttpRequest en plusieurs parties. À ma grande surprise, l'en-tête de réponse n'a pas d'en-tête «multipart/x-mixed-replace». Les en-têtes de réponse sont les suivantes:
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
Malheureusement, le HttpWatch ne dit pas si une requête HTTP est de XMLHttpRequest ou non. Le contenu n'est pas HTML mais JSON. Il ressemble à une réponse pour XHR, mais cela ne fonctionnerait pas pour Comet sans multipart/x-mixed-replace, non?
Existe-t-il d'autres façons de comprendre comment GMail implémente Comet?
Mise à jour: Après une enquête plus poussée, je crois que GMail implémente Comet ainsi: 1) dans Internet Explorer, il utilise une iframe cachée pour toujours; 2) dans Firefox, il utilise forever-XHR sans en-tête multipart/x-mixed-replace. Le client va répondre en condition (readyState == 3) OU (readyState == 4). C'est-à-dire à la fois dans un état interactif et dans un état complet.
C'est un bon article. Mais, cela n'explique toujours pas pourquoi GMail a choisi JSON comme réponse dans Firefox. –
@Morgan, JSON est une façon agréable d'empaqueter des données, en particulier mais pas exclusivement pour l'utilisation de Javascript - cfr http://ajaxian.com/archives/json-vs-xml-the-debate et (esp.) Les nombreux liens de là. Avec le codage par transfert en bloc, cela fonctionne bien ... au moins dans les navigateurs décemment conformes à la norme ;-). –
Salut, essayé waybackmachine pour l'article parce que l'article est en panne. Pouvez-vous livrer un autre lien? Merci!! – loveNoHate