V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
yuedingwangji
V2EX  ›  NGINX

nginx 一个 tcp 连接可以有包含多少个 http 请求?

  •  
  •   yuedingwangji · 2017-10-14 18:54:37 +08:00 · 7037 次点击
    这是一个创建于 2630 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天突然想到这个问题,有没有 v 友帮忙解答下

    17 条回复    2020-01-17 10:37:45 +08:00
    Mitt
        1
    Mitt  
       2017-10-14 19:11:10 +08:00
    http/1.1
    http/2
    wcsjtu
        2
    wcsjtu  
       2017-10-14 21:29:44 +08:00
    取决你连接什么时候断开。。。。。。
    还有 http 管道化~ 一个 tcp 包发送多个 request
    shellus
        3
    shellus  
       2017-10-15 01:23:35 +08:00
    你好,http1.1 的 tcp 连接复用,不能并行。所以,也没有数量限制,你可以在一个 tcp 连接上进行无数次 http 请求。
    http2 的 tcp 多路复用,并行多少个 http 请求是客户端决定的。基本上,不管多少个请求,都会只使用一个 tcp 连接。
    crayygy
        4
    crayygy  
       2017-10-15 07:36:02 +08:00 via iPhone
    keep-alive
    yuedingwangji
        5
    yuedingwangji  
    OP
       2017-10-15 10:57:49 +08:00
    @Mitt 2 个有什么区别呢?
    yuedingwangji
        6
    yuedingwangji  
    OP
       2017-10-15 10:58:45 +08:00
    @shellus 意思是 http 1.1 和 2 一个 TCP 链接都能包含无数个请求?
    wcsjtu
        7
    wcsjtu  
       2017-10-15 11:45:33 +08:00
    。。。。。。。你这题目问得就不科学啊~
    自己用 wireshark 抓包看看,follow 一个 tcpstream, 看看在四次挥手前,发了多少 http 包
    ryd994
        8
    ryd994  
       2017-10-15 13:00:51 +08:00
    @shellus nginx 可以设置 keepalive_requests 限制一次连接走多少个请求

    @yuedingwangji http2 可以并行请求,http1.1 只能串行
    yuedingwangji
        9
    yuedingwangji  
    OP
       2017-10-15 17:36:28 +08:00
    @wcsjtu 发送多少包跟发送多少请求有关系么, 一个请求万一比较大,分好几个包发送呢
    iceheart
        10
    iceheart  
       2017-10-15 20:49:45 +08:00 via Android   ❤️ 1
    http1.1 支持 pipelining,就是上行是 request 队列,下行是 response 队列,第一个应答对应第一个请求,第二个应答对应第二个请求...依此类推。所以,理论上支持的请求数是没有限制的。
    http2 的协议与 rtmp 类似,通过在数据包里添加流 id 字段,在一条连接里可以并发提供多条流。由于数据包是流的载体,所以不同的流互不相干,也就不存在 pipelining 里的响应顺序依赖的问题,后请求的可以先返回。
    当然也不会有请求数限制了
    yuedingwangji
        11
    yuedingwangji  
    OP
       2017-10-16 00:06:29 +08:00
    @iceheart 如何理解一个 tcp 流? 一次完整的 tcp 请求就是一个流 是么
    iceheart
        12
    iceheart  
       2017-10-16 01:09:13 +08:00 via Android
    流的理解,举个不恰当的例子,一条水管,水从这边进从那边出。这边进多少那边就出多少。水对应的是数据,进出顺序不变;tcp 对应的是管子。tcp 是双向收发数据,对应应该是两条管子,一条出去的流,一条进来的流。
    这是 tcp 的数据流。
    http2 在这个流上再从新定义数据包,为每个包分配流 id,相当于在上层又做了一层抽象,所以 http2 的流就是一条连接有多个了
    wcsjtu
        13
    wcsjtu  
       2017-10-16 11:29:32 +08:00
    @yuedingwangji 所以你问的是一个 tcp 包,还是一个 tcp 连接? tcp 包的话, 看你 http payloads 了; tcp 连接的话,看你连接啥时候断开啊~

    而且 http pipe 限制条件很多, 要求正确的 content-length, 还必须是幂等请求~
    lizon
        14
    lizon  
       2017-10-16 14:42:07 +08:00
    我建议你先搞清楚网络的传输层和应用层
    yuedingwangji
        15
    yuedingwangji  
    OP
       2017-10-16 22:43:30 +08:00
    @lizon 我怎么搞不清楚网络传输层和应用层了,请指点
    yuedingwangji
        16
    yuedingwangji  
    OP
       2017-10-16 22:45:16 +08:00
    @wcsjtu 一个 tcp 链接就是指 链接建立到链接断开的时间 是么?
    shellus
        17
    shellus  
       2020-01-17 10:37:45 +08:00
    @ryd994 不设置的话默认是无限吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1071 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:20 · PVG 03:20 · LAX 11:20 · JFK 14:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.