HTTP использует UDP? - PullRequest
       52

HTTP использует UDP?

91 голосов
/ 27 ноября 2008

Это может быть глупый вопрос:

  • Использует ли HTTP когда-либо протокол пользовательских дейтаграмм?

Например:

Если потоковое MP3 или видео используется по HTTP, внутренне ли оно использует UDP для транспорта?

Ответы [ 14 ]

103 голосов
/ 27 ноября 2008

С RFC 2616 :

HTTP-связь обычно происходит через соединения TCP / IP. порт по умолчанию TCP 80, но другой порты могут быть использованы. Это не препятствовать реализации HTTP поверх любого другого протокола на Интернет или в других сетях. HTTP только предполагает надежный транспорт; любой протокол, который обеспечивает такой гарантии могут быть использованы; картирование HTTP / 1.1 запроса и ответа структуры на транспортных данных Единицы рассматриваемого протокола выходит за рамки этого спецификация.

Таким образом, хотя это явно не сказано, UDP не используется, потому что это не «надежный транспорт».

EDIT - совсем недавно протокол QUIC (точнее, псевдотранспорт или протокол уровня сеанса) использует UDP для переноса трафика HTTP / 2.0, и большая часть трафика Google уже использует этот протокол , Однако он еще не опубликован как RFC.

38 голосов
/ 27 ноября 2008

Как правило, нет.

Потоковая передача редко используется по самому HTTP, а HTTP редко запускается по UDP. Однако см. RTP .

В качестве примера (в комментарии) вы не показываете протокол для ресурса. Если бы этот протокол был HTTP, то я бы не назвал доступ «потоковым»; даже если это в каком-то смысле этого слова, так как он посылает (возможно, большой) ресурс последовательно по сети. Как правило, ресурс будет сохранен на локальный диск перед воспроизведением, поэтому передача по сети - это не то, что обычно подразумевается под потоковой передачей.

Как отметили комментаторы, однако, безусловно, возможно действительно передавать по HTTP, и это делают некоторые.

34 голосов
/ 27 ноября 2008

Может быть, немного пустяков, но UPnP будет использовать сообщения в формате HTTP через UDP для обнаружения устройства.

17 голосов
/ 09 февраля 2013

Да, HTTP, как протокол приложения, может передаваться по транспортному протоколу UDP. Вот некоторые из служб, которые используют UDP и базовый протокол для передачи данных HTTP и потоковой передачи их конечному пользователю:

  • Транспортный метод Jingle Raw UDP для XMPP
  • Номер для служб, использующих UDT --- протокол передачи данных на основе UDP, который является расширенным набором протокола UDP.
  • Протокол безопасности транспортного уровня (TLS), инкапсулирующий HTTP, а также упомянутые выше протоколы XMPP и другие прикладные протоколы, имеют реализацию, которая использует UDP на своем транспортном уровне; эта реализация называется защитой транспортного уровня дейтаграмм (DTLS).
  • Push-уведомления в GNUTella - это HTTP-запросы, отправляемые по UDP-транспорту.

Эта статья содержит дополнительные сведения о потоковой передаче по UDP и ее надежном расширенном наборе, RUDP: Надежный UDP (RUDP): следующий протокол большого потока?

17 голосов
/ 06 ноября 2012

Конечно, его не обязательно передавать по TCP. Я реализовал HTTP поверх UDP для использования в индустрии спутникового телевидения.

6 голосов
/ 30 апреля 2015

Может быть, некоторые изменения в этой теме с QUIC

QUIC (Быстрые интернет-соединения UDP, произносится быстро) - это экспериментальный сетевой протокол транспортного уровня, разработанный Google и реализованный в 2013 году. QUIC поддерживает набор мультиплексированных соединений между двумя конечными точками по протоколу пользовательских дейтаграмм (UDP) и предназначен обеспечить защиту безопасности, эквивалентную TLS / SSL, наряду с уменьшением задержки соединения и транспорта и оценкой пропускной способности в каждом направлении, чтобы избежать перегрузки. Основная цель QUIC - оптимизировать веб-приложения, ориентированные на соединение, в настоящее время использующие TCP.

3 голосов
/ 10 сентября 2015

Теоретически да, можно использовать UDP для http, но это может быть проблематично. Скажем, в вашем примере, например, потоковое воспроизведение mp3 или видео, возникнет проблема с упорядочением, и некоторые биты могут пропасть, так как UDP не ориентирован на соединение, нет механизма повторной передачи.

3 голосов
/ 28 октября 2012

Попробуйте запустить HTTP через UDP с помощью узла-httpp:

https://github.com/InstantWebP2P/node-httpp

3 голосов
/ 27 ноября 2008

Если вы транслируете mp3 или видео, которое не обязательно через HTTP, на самом деле я был бы удивлен, если бы это было. Вероятно, это будет другой протокол по TCP, но я не вижу причин, по которым вы не можете передавать по UDP.

Если вам нужно, вы должны принять во внимание, что нет уверенности в том, что ваши данные поступят на другой конец, но я могу считать, что вы знаете о UDP.

Чтобы ответить на ваш вопрос, нет, HTTP НЕ использует UDP. Что касается того, о чем вы говорите, потоковое воспроизведение mp3 / видео МОЖЕТ происходить по UDP, и, по моему мнению, никогда не должно происходить по HTTP.

2 голосов
/ 03 сентября 2018

Я думаю, что в некоторых ответах отсутствует важный момент. Выбор между UDP и TCP должен , а не , основываться на типе данных (например, аудио или видео) или на том, начинает ли приложение воспроизводить их до завершения передачи («потоковая передача»), но на том, в режиме реального времени . Данные в реальном времени (по определению) чувствительны к задержке, поэтому их лучше всего отправлять по RTP / UDP (протокол реального времени по UDP).

Задержка не является проблемой с сохраненными данными из файла, даже если это аудио и / или видео, поэтому, вероятно, лучше всего отправлять их по TCP, чтобы можно было исправить любые потери пакетов. Отправитель может читать вперед и поддерживать сетевой канал заполненным, а получатель также может использовать много буферов воспроизведения, чтобы он не прерывался случайной повторной передачей TCP или кратковременным замедлением работы сети. Ограничительным случаем является то, что вся запись передается до начала воспроизведения. Это исключает любой риск остановки воспроизведения, но часто нецелесообразно.

Проблема с TCP для данных в реальном времени не столько в повторных передачах, сколько в чрезмерной буферизации, поскольку TCP пытается использовать канал максимально эффективно, без учета задержки. UDP сохраняет границы пакетов приложений и не имеет внутренней памяти, поэтому не создает задержки.

...