HTTP连接和请求之间有什么关系?

11
当我在配置我的nginx时,我发现了两个模块:ngx_http_limit_conn_modulengx_http_limit_req_module,一个用于限制每个定义的键连接,另一个用于限制请求。
我的问题是HTTP连接和请求之间的关系(和区别)是什么?似乎多个HTTP请求可以使用一个共同的HTTP连接,这背后的原理是什么?
3个回答

9

HTTP连接 - 客户端和服务器互相介绍。

HTTP请求 - 客户端向服务器请求某些内容。

与服务器建立连接涉及TCP握手,基本上是在与服务器创建套接字连接。要发出HTTP请求,您应该已经与服务器建立了连接。如果您已经与服务器建立了连接,可以使用同一连接进行多个请求(默认情况下,HTTP/1.0每个连接一个请求,HTTP/1.1默认为保持活动状态)。由于大多数网页需要从服务器获取多个资源(例如,加载100张照片的屏幕),如果我们保持连接并使用同一连接请求这100张图片(无需经过连接建立过程100次),对服务器的负担较低。这就是为什么HTTP/1.0默认采用保持活动状态。


7
基本上,使用它建立连接来发出请求。例如,对于给定密钥的端点可能会接受来自给定IP地址的每小时5个连接。但这并不意味着只能进行5个请求,而是可以更多——如果在请求后未关闭连接(从HTTP 1.1开始,默认情况下保持活动状态)。
例如,一个端点接受来自给定IP地址的5个连接和10个请求。如果为每个请求建立连接,则总共只能进行5个请求。如果保持连接,则单个客户端可能进行所有请求。如果有5个客户端,每个客户端都建立并保持连接,则大约可以每个客户端进行2个请求,但是如果速度足够快,则可以全部由一个客户端发起所有请求。

非常感谢。由于连接可以保持活动状态,我想知道已建立的连接什么时候会被销毁?我猜在nginx或者linux中是否有像max_establish_connection这样的设置,当建立的连接数超过这个值时,一些连接将被销毁?还是只有一个简单的设置像connection_survival_time?哪个是正确的? - FingerLiu
最新版本默认通过连接保持活动状态,除非发送了“Connection: Close”头。不清楚在nginx中如何配置,但猜测可能有一种超时设置和/或其他设置。 “keepalive_disable”是其中之一的设置。 - Opal
@FingerLiu,如果您觉得我的回答有用,请接受它。 - Opal

2
一个请求是一个功能性的执行:“为我做点什么,并将结果返回给我” - 客户端通过服务器正在侦听的通道“连接”发出请求。可以将其视为打电话给餐厅。当餐厅接听电话时,您建立了一个已建立的“连接” - 现在可以在同一连接上放置多个请求。如果餐厅有多条电话线开放以接收电话,则可以处理多个同时的客户呼叫。这就是您的“连接池” - 在任何时候,您只能拥有与连接池大小相同的最大数量的同时打开的连接(最大值)。然而,请求的数量将会有所不同。某些客户端可能会发出3个请求,然后挂断,而另一些客户端可能会发出10个请求才挂断。
连接池的大小决定并发性 - 您可以在任何时候与多少个同时客户端进行交流?这些对话的长度将根据用例而定。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接