GMail如何实施Comet?

时间:2010-03-20 02:39:58

标签: gmail comet httpwatch

在HttpWatch的帮助下,我试图找出GMail如何实现Comet。

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

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

  

https://mail/channel/bind?VER=8&at=xn3j33vcvk39lkfq .....

GMail在IE中使用IFRAME进行Comet并不奇怪。 Http内容以“<html><body>”开头。

最初,我猜测GMail在Firefox中使用多部分XmlHttpRequest进行Comet。令我惊讶的是,响应标头没有“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中,它使用forever-hidden-iframe; 2)在Firefox中,它使用forever-XHR而不使用multipart / x-mixed-replace标头。客户端将在条件(readyState == 3)OR(readyState == 4)中响应。也就是说,处于交互状态和完整状态。

1 个答案:

答案 0 :(得分:15)

this article

  

那么Google使用的解决方案是什么?   Gmail吗?

     

解决方案非常简单,   直截了当,非常便携!   Gmail做了什么请求   包含无限的html页面   Javascript部分的流。给   一试,它非常强大。所以,我们   将在客户端有一个js文件   处理响应,和   另一个包含的无限html   Javascript Streams。

本文的其余部分将详细介绍,包括对替代品的探索以及GMail选择的具体选择。