【问题标题】:What is the relationship between HTTP connection and a request?HTTP连接和请求之间有什么关系?
【发布时间】:2022-02-22 12:04:41
【问题描述】:

在配置我的 nginx 时,我发现了两个模块:ngx_http_limit_conn_modulengx_http_limit_req_module 一种用于限制每个已定义键的连接,另一种用于限制请求。

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

【问题讨论】:

    标签: http nginx httprequest httpconnection


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢。因为连接可以保持活跃。我想知道建立的连接何时破坏?我猜在 nginx 或 linux 中是否有类似 max_establish_connection 之类的设置,并且当建立的连接数超过某些连接被破坏时?或者,只有 connection_survival_time 这样的简单设置?哪个是正确的?
    • 最新版本默认通过连接保持活动状态,除非发送Connection: Close 标头。不知道它是如何在 nginx 中配置的,但猜测该设置和/或其他设置也存在某种超时。 keepalive_disable 是这些设置之一。
    • @FingerLiu,如果您觉得我的回答有用,请采纳。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-19
        • 1970-01-01
        • 2013-10-30
        • 2015-01-02
        相关资源
        最近更新 更多