GMail如何实现Comet?
在HttpWatch的帮助下,我试图弄明白GMail是如何实现Comet的 我用两个帐户登录GMail,一个在IE上,另一个在Firefox上。在GMail中用GTalk聊天,并使用一些神奇的词语,如“WASSUP”。然后,我注销两个GMail帐户,过滤没有“WASSUP”字符串的任何http内容。结果显示哪个HTTP请求是流通道。(注意:我必须注销。否则,永无止境的HTTP将不会在HttpWatch中显示内容。) 结果很有趣。流通道的URL如下所示: 毫不奇怪,GMail会在IE中使用IFRAME进行Comet。Http内容以“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
”开头
最初,我猜测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指的是答案中的链接。