HTTP 1.1 keep alive 客户端在传输静默 2 小时后未收到响应

问题描述 投票:0回答:0

最近我观察到使用http客户端的问题,客户端发送请求但从未听到服务器的响应。为了找原因,我做了:

  1. 让 tcpdump 在客户端和服务器端运行。
  2. 客户端发送一个请求(并收到响应)
  3. 等待2小时
  4. 客户端发送另一个请求(但没有收到任何响应)<-- this is the problem.

两次请求之间,两边的pcaps都显示没有人发送FIN。并且服务器没有收到第二个请求。我认为 HTTP1.1 keep alive 传输有问题。

根据我目前搜索到的内容:

  1. 有两个标题可能与问题有关 Http 标头
Connection: Keep-Alive
Keep-Alive: timeout=5, max=1000
  1. HTTP1.1不需要
    Connection: Keep-Alive
    ,这是默认操作
  2. Tcp keep-alive 发送探测,Linux 操作系统超时为 2 小时,我猜当时间到了,如果服务器没有收到探测它发送
    FIN
    给客户端,并关闭套接字。

然后我开始想:

  1. 哪一方发送“Keep-Alive: param”?
  2. 当client和server使用HTTP1.1时,client会发送TCP keep alive probe吗?
  3. 为了使用 HTTP1.1 keep alive,客户端必须设置
    Connection: Keep-Alive
    Keep-Alive: param
    ?
networking http-1.1
© www.soinside.com 2019 - 2024. All rights reserved.