GMail如何实现Comet?

GMail如何实现Comet?,gmail,comet,httpwatch,Gmail,Comet,Httpwatch,在HttpWatch的帮助下,我试图弄明白GMail是如何实现Comet的 我用两个帐户登录GMail,一个在IE上,另一个在Firefox上。在GMail中用GTalk聊天,并使用一些神奇的词语,如“WASSUP”。然后,我注销两个GMail帐户,过滤没有“WASSUP”字符串的任何http内容。结果显示哪个HTTP请求是流通道。(注意:我必须注销。否则,永无止境的HTTP将不会在HttpWatch中显示内容。) 结果很有趣。流通道的URL如下所示: 毫不奇怪,GMail会在IE中使用IFR

在HttpWatch的帮助下,我试图弄明白GMail是如何实现Comet的

我用两个帐户登录GMail,一个在IE上,另一个在Firefox上。在GMail中用GTalk聊天,并使用一些神奇的词语,如“WASSUP”。然后,我注销两个GMail帐户,过滤没有“WASSUP”字符串的任何http内容。结果显示哪个HTTP请求是流通道。(注意:我必须注销。否则,永无止境的HTTP将不会在HttpWatch中显示内容。)

结果很有趣。流通道的URL如下所示:

毫不奇怪,GMail会在IE中使用IFRAME进行Comet。Http内容以“
”开头

最初,我猜测GMail确实在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的响应,但如果没有multipart/x-mixed-replace,这对Comet不起作用,对吗

有没有其他方法可以解释GMail是如何实现Comet的

更新: 经过进一步调查,我相信GMail是这样实现Comet的: 1) 在IE中,它使用一个永远隐藏的iframe; 2) 在Firefox中,它使用永久XHR,而不使用multipart/x-mixed-replace头。客户端将在条件(readyState==3)或(readyState==4)下响应。也就是说,在交互状态和完成状态下

那么谷歌使用的解决方案是什么呢 Gmail

解决办法非常简单, 直截了当,非常便携! Gmail所做的就是请求 包含 Javascript部分的流。给予 这是一个尝试,它非常强大。所以,我们 客户端将有一个js文件 处理响应,以及 另一个包含 Javascript流


这篇文章的其余部分将更加详细,包括对替代方案的探索以及GMail选择的具体方案。

这是一篇好文章。但是,它仍然没有解释为什么GMail在Firefox中选择JSON作为响应。@Morgan,JSON确实是一种很好的数据打包方式,特别是在不完全用于Javascript的情况下——cfr和(特别是)其中的许多链接。使用分块传输编码,它可以很好地工作。。。至少在符合标准的浏览器中;-)。嗨,我试过Wayback机器看这篇文章,因为这篇文章写下来了。你能提供另一个链接吗?谢谢我不确定你所说的“文章被删除了”是什么意思——刚刚访问过,它就在那里。我认为@DOCASAREL指的是答案中的链接。