# Таблица транспортов и их возможностей
Здесь мы подведём итог раздела, сравним транспорты и их возможности.
[cut]
## Способы опроса сервера
Основные способы опроса сервера:
- **Частые опросы** -- регулярно к серверу отправляется запрос за данными. Сервер тут же отвечает на него, возвращая данные, если они есть. Если нет -- получается, что запрос был зря.
Этот способ очень лёгок в реализации, но приводит к большому количеству лишних запросов, поэтому мы его далее не рассматриваем.
- **Длинные опросы** -- к серверу отправляется запрос за данными. Сервер не отвечает на него, пока данные не появятся. Когда данные появились -- ответ с ними отправляется в браузер, и тот тут же делает новый запрос.
Способ хорош, пока сообщений не слишком много. В идеальном случае соединение почти всё время висит открытым, лишь иногда сервер отвечает на него, доставляя данные в браузер.
Также удобен в реализации, но даёт большое количество висящий соединений на сервере. Не все сервера хорошо поддерживают это. Например, `Apache` будет есть очень много памяти.
- **Потоковое соединение** -- открыто соединение к серверу, и через него непрерывно поступают данные.
## Таблица транспортов
Основные характеристики всех транспортов, которые мы обсуждали в деталях, собраны в этой таблице.
Они были детально рассмотрены в предыдущих главах раздела.
|
`XMLHttpRequest` |
`IFRAME` |
`SCRIPT` |
`EventSource` |
`WebSocket` |
Кросс-доменность |
да, кроме IE9-x1 |
даi1 |
да |
да |
да |
Методы |
Любые |
GET / POST |
GET |
GET |
Свой протокол |
COMET |
Длинные опросыx2 |
Непрерывное соединение |
Длинные опросы |
Непрерывное соединение |
Непрерывное соединение в обе стороны |
Поддержка |
Все браузеры, ограничения в IE9-x3 |
Все браузеры |
Все браузеры |
Кроме IE |
IE 10, FF11, Chrome 16, Safari 6, Opera 12.5w1 |
Пояснения:
- `XMLHttpRequest`
-
- В IE8-9 поддерживаются кросс-доменные GET/POST запросы с ограничениями через `XDomainRequest`.
- Можно говорить об ограниченной поддержке непрерывного соединения через `onprogress`, но это событие вызывается не чаще чем в `50ms` и не гарантирует получение полного пакета данных. Например, сервер может записать "Привет!", а событие вызовется один раз, когда браузер получил "При". Поэтому наладить обмен пакетами сообщений с его помощью затруднительно.
- Многие возможности современного стандарта включены в IE лишь с версии 10.
- `IFRAME`
-
- Во всех современных браузерах и IE8 кросс-доменность обеспечивает `postMessage`. В более старых браузерах возможны решения через `window.name` и хэш.
- `WebSocket`
-
- Имеется в виду поддержка окончательной редакции протокола [RFC 6455](http://tools.ietf.org/html/rfc6455), описанной в разделе [](/websockets). Более старые браузеры могут поддерживать черновики протокола. IE9- не поддерживает `WebSocket`.
Существует также нестандартный транспорт, не рассмотренный здесь:
- XMLHttpRequest с флагом `multipart`, только для Firefox.
При указании свойства `xhr.multipart = true` и специального multipart-формата ответа сервера, Firefox инициирует `onload` при получении очередной части ответа. Ответ может состоять из любого количества частей, досылаемых по инициативе сервера. Мы не рассматривали его, так как Firefox поддерживает другие, более кросс-браузерные и стандартные транспорты.