这可能是一个愚蠢的问题:
- HTTP 是否曾经使用过用户数据报协议?
例如:
如果使用 HTTP 流式传输 MP3 或视频,它是否在内部使用 UDP 进行传输?
来自RFC 2616:
HTTP 通信通常通过 TCP/IP 连接进行。默认端口是 TCP 80,但也可以使用其他端口。这并不排除 HTTP 在 Internet 或其他网络上的任何其他协议之上实现。HTTP 只假定可靠的传输;可以使用任何提供此类保证的协议;HTTP/1.1 请求和响应结构到相关协议的传输数据单元的映射超出了本规范的范围。
因此,尽管没有明确说明,但未使用 UDP,因为它不是“可靠传输”。
编辑- 最近,QUIC 协议(更严格地说是一种伪传输或会话层协议)确实使用 UDP 来承载 HTTP/2.0 流量,并且 Google 的大部分流量已经使用该协议。它目前正朝着标准化的方向发展,如HTTP/3。
通常,没有。
流很少在 HTTP 本身上使用,HTTP 很少在 UDP 上运行。但是,请参见RTP。
对于您的示例(在评论中),您没有显示资源的协议。如果该协议是 HTTP,那么我不会将访问称为“流式传输”;即使它在某种意义上是因为它通过网络连续发送(可能很大)资源。通常,资源会在播放之前保存到本地磁盘,因此网络传输不是通常所说的“流式传输”。
不过,正如评论者所指出的那样,确实可以通过 HTTP 进行流式传输,并且这是由一些人完成的。
也许只是一些琐事,但 UPnP 将使用 UDP 上的 HTTP 格式消息进行设备发现。
当然,它不一定必须通过 TCP 传输。我在 UDP 之上实现了 HTTP,用于卫星电视广播行业。
是的,HTTP 作为一种应用协议,可以通过 UDP 传输协议进行传输。以下是一些使用 UDP 和底层协议来传输 HTTP 数据并将其流式传输给最终用户的服务:
本文包含有关 UDP 流传输及其可靠超集 RUDP:可靠 UDP (RUDP):下一个大流传输协议?
如果您正在流式传输不一定通过 HTTP 的 mp3 或视频,事实上,如果是这样的话,我会感到惊讶。它可能是 TCP 上的另一种协议,但我看不出为什么不能通过 UDP 流式传输。
如果你这样做,你必须考虑到你的数据是否会到达另一端,但我可以认为你知道 UDP。
要回答您的问题,不,HTTP 不使用 UDP。不过,对于您所说的,mp3/视频流可以通过 UDP 发生,我认为永远不应该通过 HTTP 发生。
也许QUIC会在这个话题上有所改变
QUIC(Quick UDP Internet Connections,发音为 quick)是 Google 开发并于 2013 年实施的实验性传输层网络协议。QUIC 通过用户数据报协议 (UDP) 支持两个端点之间的一组多路复用连接,旨在提供安全保护等效于 TLS/SSL,同时减少了连接和传输延迟,以及每个方向的带宽估计以避免拥塞。QUIC 的主要目标是优化当前使用 TCP 的面向连接的 Web 应用程序。
我认为有些答案遗漏了重要的一点。UDP 和 TCP 之间的选择不应基于数据的类型(例如,音频或视频)或应用程序是否在传输完成之前开始播放(“流式传输”),而应基于是否是实时的。实时数据(根据定义)对延迟敏感,因此通常最好通过 RTP/UDP(基于 UDP 的实时协议)发送。
延迟不是来自文件的存储数据的问题,即使它是音频和/或视频,所以它可能最好通过 TCP 发送,以便可以纠正任何数据包丢失。发送方可以提前读取并保持网络管道满,接收方也可以使用大量播放缓冲,因此它不会被偶尔的 TCP 重新传输或暂时的网络减速而中断。限制情况是在播放开始之前传输整个记录。这消除了播放停止的任何风险,但通常是不切实际的。
实时数据的 TCP 问题不在于重传,而是过度缓冲,因为 TCP 试图尽可能有效地使用管道而不考虑延迟。UDP 保留了应用程序包的边界并且没有内部存储,因此它不会引入任何延迟。
答案:是的
原因:参见 OSI 模型。
解释:
HTTP 是一种应用层协议,它可以封装在使用 UDP 的协议中,提供比 TCP 更快的可靠通信。服务器守护进程和客户端显然需要支持这个新协议。Quake 2 协议证明 UDP 可以在 TCP 上使用,为确保流量控制的结构化通信系统(例如块 ID)提供基础。
尝试使用 node-httpp 在 UDP 上运行 HTTP:
http over udp 被一些 torrent 跟踪器实现使用(并且所有主要客户端的 supporteb)
理论上是的,可以将 UDP 用于 http,但这可能会有问题。例如,在您的示例中,正在流式传输 mp3 或视频,将会出现排序问题,并且由于 UDP 不是面向连接的,因此某些位可能会丢失,因此没有重传机制。
UDP 是流式传输的最佳协议,因为它不需要 TCP 等丢失的包。如果它不提出要求,流程会更快,而且没有任何缓冲。
甚至流延迟也小于 TCP。这是因为 TCP(作为一种更安全的协议)要求丢失的包,覆盖现有的包。
因此,TCP 是一种过于先进的协议,无法用于流式传输。
HTTP/3(又名 QUIC)使用 UDP 而不是 TCP。