http - http非长连接模式有什么用

标签 http keep-alive persistent-connection

这似乎是一个微不足道的问题,但仍然......我对此感到困惑。

几乎在每个站点上,我都读到过 HTTP 持久或保持事件连接比非持久连接更好。 问题:那么,为什么非持久化甚至存在?

有人说,如果服务器正在为许多客户端提供服务,因为用户被剥夺了连接,那么持久性就会有缺点。 问题:所有流行的网站都为数百万客户端提供服务,这是否意味着它们不使用持久模式?

根据我的理解,我认为搜索引擎可能没有使用持久连接。

谁能请教我这个话题。

我的另一个疑问是关于 HTTP 请求。我读过,如果一个页面包含指向多个对象的链接,那么网络浏览器会发出那么多请求来获取所有这些对象(这就是使用持久连接的原因)。我的疑问是为什么所有对象都没有嵌入到页面中并作为一个对象发送?如果争论是它使页面变重并且对带宽不友好,那么浏览器无论如何都会打开并行连接以获取多个对象,这再次给网络带来相同的负载。

好的,我知道这不能用于类似图像搜索,但如果页面包含的对象很少,那么我们可以将它们嵌入到页面中并发送。

这些问题看似愚蠢,但我无能为力。我有疑问,我需要澄清一下,你可以提供帮助。 谢谢

最佳答案

original HTTP specification总是使用非持久连接; HTTP/1.1 added persistence因为它对于嵌入大量外部对象的网页效率更高(在编写 HTTP/1.0 时很少见。)

然而,即使 HTTP/1.1 允许持久连接,也有一些实现不支持它们,或者仍然只支持 HTTP/1.0。为此,HTTP/1.1 要求发送 Connection: keep-alive header 以启用此功能,并发送 Connection: close 以禁用它。

通过对数据进行 base64 编码并将其包含在 data: URL 中,可以将媒体直接包含在 HTML 中.通常不会这样做,因为它会降低您的网络浏览器的速度。使用标准 HTML 页面,浏览器可以开始呈现页面结构,而无需等待(相当大的)内联 data: 链接下载。

关于http - http非长连接模式有什么用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26022592/

相关文章:

angularjs - Angular http 拦截器响应 header

http - http请求和将http请求文本写入80端口上的tcp/ip套接字有什么区别

http - 如何使用 Wireshark 提取通过 SOCKS 的 HTTP 数据?

rest - CXF JAXRS 客户端不重用 TCP 连接

python - 请求之间的 Django 持久 API 连接

iOS - 始终保持与本地网络设备的网络套接字连接

file - Gorilla Golang Pathprefix 不提供文件

ruby - 在 ruby 法拉第中保持活力

php - 使用 PHP 无限循环持久连接到服务器