gpt4 book ai didi

gmail - GMail 如何实现 Comet?

转载 作者:行者123 更新时间:2023-12-03 22:24:26 25 4
gpt4 key购买 nike

在 HttpWatch 的帮助下,我试图弄清楚 GMail 是如何实现 Comet 的。

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

结果很有趣。流 channel 的 URL 是这样的:

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



GMail 用 IFRAME 在 IE 中做 Comet 也就不足为奇了。 Http 内容以“ <html><body>”开头。

最初,我猜测 GMail 在 Firefox 中使用多部分 XmlHttpRequest 执行 Comet。令我惊讶的是,响应 header 没有“multipart/x-mixed-replace” header 。响应头如下:
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中,它使用forever-XHR而没有multipart/x-mixed-replace header 。客户端将以条件 (readyState == 3) 或 (readyState == 4) 进行响应。即,在交互状态和完成状态。

最佳答案

this article ,

So what is the solution used by Google Gmail?

The solution is really simple, straight forward and very portable! What Gmail did is requesting an endless html page that contains streams of Javascript portions. Give it a try, It’s very powerful. So, we will have on the client side a js file that processes the responses, and another endless html that contains the Javascript Streams.



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

关于gmail - GMail 如何实现 Comet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2481696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com