我用两个帐户登录GMail,一个在IE中,另一个在Firefox中。在GMail里用GMail聊天,用一些神奇的词,比如“WASSUP”。然后,我注销了两个GMail帐户,过滤掉没有“WASSUP”字符串的任何http内容。结果显示哪个HTTP请求是流媒体通道。(注:我必须注销。否则,永不结束的HTTP将不会在HttpWatch中显示内容。)
结果很有趣。流频道的URL如下所示:
https://mail/channel/bind?VER=8&at=xn3j33vcvk39lkfq
毫不奇怪,GMail在IE中使用IFRAME。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
有没有其他方法可以弄清楚GMail是如何实现Comet的?
更新:
经过进一步调查,我相信GMail是这样实现Comet的:
1) 在IE中,它使用一个永远隐藏的iframe;