Как GMail реализует Comet? - PullRequest
14 голосов
/ 20 марта 2010

С помощью 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 с составным 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 он использует forera-hidden-iframe; 2) в Firefox он использует forever-XHR без заголовка multipart / x-mixed-replace. Клиент ответит в состоянии (readyState == 3) ИЛИ (readyState == 4). То есть как в интерактивном состоянии, так и в завершенном состоянии.

1 Ответ

15 голосов
/ 20 марта 2010

за эту статью ,

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

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

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

...