HTTP使用UDP吗?

这可能是一个愚蠢的问题:

HTTP是否使用用户数据报协议? 例如,如果使用HTTP通过networkingstream式传输MP3或video,是否在内部使用UDP进行传输?

通常,没有。

stream式传输很less用于HTTP本身,HTTP很less运行在UDP上。 但是请参阅RTP 。

对于你的例子(在注释中),你没有显示资源的协议。 如果该协议是HTTP,那么我不会调用访问“stream”; 即使它在某种意义上是因为它是通过networking串行发送(可能是大的)资源。 通常情况下,资源将在回放之前保存到本地磁盘,因此networking传输通常不是“stream”的意思。

正如评论者所指出的那样,虽然可以通过HTTP实现stream式传输,而这是由一些人完成的。

从RFC 2616 :

HTTP通信通常通过TCP / IP连接进行。 默认端口是TCP 80,但也可以使用其他端口。 这并不排除HTTP在Internet上或其他networking上的任何其他协议的基础上实现。 HTTP只是假设一个可靠的传输; 任何提供这种保证的协议都可以使用; HTTP / 1.1请求和响应结构到所讨论协议的传输数据单元的映射超出了本规范的范围。

所以虽然没有明确的说,但UDP并没有被使用,因为它不是一个“可靠的传输”。

也许只是一些小问题,但是UPnP将通过UDP使用HTTP格式的消息来进行设备发现。

是的,作为应用程序协议的HTTP可以通过UDP传输协议传输。 以下是一些使用UDP和底层协议传输HTTP数据并将其传输到最终用户的服务:

  • XMPP的Jingle Raw UDP传输方法
  • 使用UDT的服务的数字—基于UDP的数据传输协议,它是UDP协议的超集。
  • 封装HTTP的传输层安全(TLS)协议以及上述的XMPP和其他应用协议确实在其传输层中使用了UDP; 这个实现被称为数据报传输层安全(DTLS)。
  • GNUTella中的推送通知是通过UDP传输发送的HTTP请求。

本文包含关于通过UDP进行stream式传输的更多细节及其可靠的超集RUDP: 可靠的UDP(RUDP):下一个大stream处理协议?

当然,它不一定要通过TCP传输。 我在UDP之上实现了HTTP,用于卫星电视广播行业。

也许用QUIC改变这个主题

QUIC(快速UDP互联网连接,快速发音)是由Google开发并于2013年实施的一种实验性传输层networking协议.QuIC支持在用户数据报协议(UDP)上的两个端点之间的一组多路复用连接,并且旨在提供安全保护相当于TLS / SSL,同时减less连接和传输延迟,并在每个方向进行带宽估计以避免拥塞。 QUIC的主要目标是优化当前使用TCP的面向连接的Web应用程序。

尝试使用node-httpp运行UDP over UDP:

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

如果你正在stream式传输一个不一定是HTTP的mp3或者video,实际上如果是这样的话,我会感到惊讶的。 这可能是TCP上的另一个协议,但是我看不出为什么你不能通过UDPstream。

如果你确实需要考虑到你的数据不能确定到达另一端,但我可以认为你知道UDP。

为了回答你的问题,不,HTTP不使用UDP。 对于你所谈论的,虽然,MP3 /videostream可能发生在UDP上,我认为不应该发生在HTTP上。

答案是肯定的

原因:请参阅OSI模型。

阐释:

HTTP是一种应用层协议,可以使用UDP协议进行封装,提供比TCP更快的可靠通信。 服务器守护进程和客户端显然需要支持这个新的协议。 Quake 2协议certificate,UDP可以通过TCP使用,为确保stream量控制的结构化通信系统(例如块ID)提供基础。

UDP是stream媒体的最佳协议,因为它不需要丢失像TCP这样的软件包。 如果它没有提出要求,那么stream程要快得多,没有任何缓冲。

即使stream延迟小于TCP。 这是因为TCP(作为一个更安全的协议)要求丢失的包,覆盖现有的包。

所以TCP是一个高级的协议,不能用于stream媒体。

某些洪stream跟踪器实现(和所有主要客户端的支持)使用http over udp,

理论上是有可能使用UDP的HTTP,但这可能是有问题的。 举例来说,在你的例子中,一个mp3或一个video正在stream式传输,将会出现sorting问题,而且有些位可能会丢失,因为UDP不是面向连接的,所以没有重传机制。