【问题标题】:supporting persistent HTTP connections in my proxy server在我的代理服务器中支持持久的 HTTP 连接
【发布时间】:2009-04-16 12:18:44
【问题描述】:
我正在用 C++ 实现一个 HTTP 缓存代理服务器。我已经完成了大部分工作,但我卡在了一个点上。
我正在做的是使用套接字创建每个线程来处理每次来自浏览器的请求。我解析请求,检查它在缓存中的可用性,如果没有找到,则将其转发到结束 www 服务器。在这两种情况下,我都会在连接的套接字上写入收到的响应。现在的问题是,除非我关闭套接字,否则浏览器不会假定传输已完成并无限期地等待。
这样我就不能将一个套接字用于多个连接,换句话说,我不能支持持久连接。
任何帮助将不胜感激..
谢谢,
【问题讨论】:
标签:
networking
sockets
proxy
【解决方案1】:
您将哪些标头发送回客户端?
你应该包括:
Content-Length: ...
Keep-Alive: timeout=..., max=...
Connection: Keep-Alive
特别是,Content-Length 标头对于持久连接至关重要,以便客户端知道要读取多少数据。见section 8.1.2.1 of RFC 2616。
或者,如果你想告诉客户端断开连接,发送:
Connection: close
【解决方案2】:
现在的问题是,除非我关闭套接字,否则浏览器不会假定
传输完成并无限期等待。
没错。 HTTP 1.1 默认使用 Keep-Alive。
这样我不能将一个套接字用于多个连接,换句话说我不能
支持持久连接。
我不确定我是否理解你,因为你拥有的持久连接是持久连接。