0

在 HTTP/1.1(持久连接)中,提示客户端发送下一个 HTTP 请求的“信号”是什么?除了 Content-Length 还有什么别的吗?

我正在尝试构建一个简单的网关,它将跨文件桥接 TCP 流量。我有两个应用程序:

  • “服务器”打开一个套接字并等待连接。建立连接后,它将从输出文件中获得的所有内容转发,同时将输入文件中的所有内容转发回套接字
  • “客户端”等待上述输出文件中的内容并与服务器建立连接,向其发送数据并将接收到的数据写回上述输入文件。

换句话说:我通过套接字获得的所有内容都通过文件重定向到另一个套接字,反之亦然。

AFAIK 这应该是完全透明的,但持久连接不能按预期工作。

我正在使用 Firefox 进行测试——FF 发送了两个 GET 并收到了两个响应。但是它只是坐在那里等待,就好像它还没有收到所有数据一样...... 5秒后(服务器以“Keep-Alive:timeout = 5”响应,所以这适合)其中一方关闭连接并重新建立它并继续发送几个文件,当它再次卡住时。

我用 WireShark 听过,但没有发现任何不寻常的地方。知道发生了什么吗?

更新:下面是 WireShark 日志的截图。它表明在 TCP 连接关闭后(注意时间),HTTP 连接发送得太晚了。从我的日志来看,它是立即发送的。知道为什么会出现这种差异吗?我应该以某种方式“冲洗”插座吗?我正在使用 Python。

WireShark 日志

4

2 回答 2

1

它是 Content-Length 或 Chunked-Encoding(或者如果连接关闭),它“向”客户端“发送”数据的长度/结束。

接收到 HTTP 数据后,浏览器会保持 tcp/ip 连接打开一段时间,以允许通过同一 tcp/ip 连接向同一服务器发出进一步的请求。

于 2011-08-09T11:16:04.320 回答
1

没有“信号”。客户端在准备好时发送下一个请求。

但是它只是坐在那里等待,就好像它还没有收到所有数据一样

所以它可能还没有收到所有的数据。你是在它进来的时候把它写出来吗?并刷新任何缓冲区?

于 2011-08-09T11:44:42.020 回答