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

What is the relationship between HTTP connection and a request?

在配置 nginx 时,我发现了两个模块:ngx_http_limit_conn_module and ngx_http_limit_req_module 一种用于限制每个定义的密钥的连接,一种用于限制请求。

我的问题是两者之间的关系(和区别)是什么 一个 HTTP 连接和一个请求。 貌似多个HTTP请求可以使用一个普通的HTTP连接,请问这是什么原理?

基本上建立连接以使用它发出请求。因此,例如,给定密钥的端点可能每小时接受来自给定 IP 地址的 5 个连接。但这并不意味着只能发出 5 个请求,而是更多 - 如果在请求后连接没有关闭(从 HTTP 1.1 开始,它默认保持活动状态)。

例如端点接受来自给定 IP 地址的 5 个连接和 10 个请求。如果为每个请求建立连接,总共只能发出 5 个请求。如果连接保持活动状态,则单个客户端可以发出所有请求。如果有 5 个客户端,每个都建立一个连接并保持连接,大约有 2 个请求。这可以由每个客户提出——但是如果速度足够快,一个人可以提出所有请求。

HTTP 连接 - 客户端和服务器自我介绍。

HTTP 请求 - 客户端向服务器请求一些东西。

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

请求是一种功能执行:“为我做点什么,然后 return 结果返回给我”——这是客户端通过服务器正在侦听的通道发出的,“连接”。可以把它想象成给餐馆打 phone 电话。当餐厅拿起 phone 时,您就建立了“连接”- 现在可以通过同一连接发出多个请求。如果餐厅有多条 phone 线路接听电话,则可以同时处理多个客户电话。这是您的“连接池”——在任何时间点,您同时打开的连接数(最大值)只能与连接池的大小一样多。但是,请求的数量会有所不同。有的client可能发出3次请求,然后挂断,而有的client可能发出10次请求才挂断。

连接池的大小决定了并发性 - 在任何时间点您可以同时与多少个客户端通话?这些对话的长度将视用例而定。