代码之家  ›  专栏  ›  技术社区  ›  Morgan Cheng

GMail如何实现Comet?

  •  14
  • Morgan Cheng  · 技术社区  · 16 年前

    我用两个帐户登录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;

    1 回复  |  直到 16 年前
        1
  •  15
  •   Alex Martelli    16 年前

    this article ,

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

    解决办法很简单, 直截了当,非常便携! 无休止的html页面,包含 Javascript部分的流。给予 客户端将有一个js文件 处理响应,以及 另一个包含

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

    推荐文章