Как GMail реализует Comet?

С помощью HttpWatch я попытался выяснить, как GMail реализует Comet.

Я вхожу в GMail с двумя учетными записями, одна в IE, а другая в Firefox. Общение в GTalk в GMail с волшебными словами вроде "WASSUP". Затем я выхожу из обеих учетных записей GMail, фильтрую любой http-контент без строки «WASSUP». Результат показывает, какой HTTP-запрос является потоковым каналом. (Примечание: мне нужно выйти из системы. В противном случае нескончаемый HTTP не будет отображать содержимое в HttpWatch.)

Результат интересный. URL-адрес для потокового канала выглядит так:

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

Нет ничего удивительного в том, что GMail выполняет Comet в IE с IFRAME. Содержимое HTTP начинается с «<html><body>».

Первоначально я догадывался, что GMail выполняет Comet в Firefox с помощью multipart 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, но это не сработает для Comet без multipart / x-mixed-replace, верно?

Есть ли еще способ выяснить, как GMail реализует Comet?

Обновление. После дальнейшего исследования я считаю, что GMail реализует Comet следующим образом: 1) в IE используется iframe, скрытый навсегда; 2) в Firefox он использует forever-XHR без заголовка multipart / x-mixed-replace. Клиент ответит в conditon (readyState == 3) OR (readyState == 4). То есть как в интерактивном, так и в завершенном состоянии.


person Morgan Cheng    schedule 20.03.2010    source источник


Ответы (1)


Согласно этой статье,

Итак, какое решение использует Google Gmail?

Решение действительно простое, понятное и очень портативное! Gmail запросил бесконечную html-страницу, содержащую потоки фрагментов Javascript. Попробуйте, это очень мощно. Итак, у нас будет на стороне клиента файл js, который обрабатывает ответы, и еще один бесконечный html, содержащий потоки Javascript.

Остальная часть статьи содержит гораздо более подробные сведения, включая исследование альтернатив, а также конкретную версию, выбранную GMail.

person Alex Martelli    schedule 20.03.2010
comment
Это хорошая статья. Но это все еще не объясняет, почему GMail выбирает JSON в качестве ответа в Firefox. - person Morgan Cheng; 20.03.2010
comment
@Morgan, JSON - действительно хороший способ упаковки данных, особенно, хотя и не исключительно для использования Javascript - cfr ajaxian.com/archives/json-vs-xml-the-debate и (особенно) множество ссылок оттуда. С фрагментированным кодированием передачи он отлично работает ... по крайней мере, в прилично совместимых со стандартами браузерах ;-). - person Alex Martelli; 20.03.2010
comment
Привет, попробовал использовать waybackmachine для статьи, потому что статья не работает. Можно еще ссылку поставить? Спасибо!! - person loveNoHate; 14.12.2014
comment
Не уверен, что вы имеете в виду под статьей не работает - просто зашли на сайт ajaxian.com/ archives / json-vs-xml-the-debug, и он тут же. - person Alex Martelli; 16.12.2014
comment
Я думаю, что @DOCASAREL имеет в виду ссылку в ответе. - person tshepang; 18.04.2015