发送请求后,HTTP客户端使用的套接字如何正确关闭?还是必须保持开放(双向)直至收到完整回复?如果是这样,请求体的结束如何由服务器确定?HTTP:发送请求后写入的关闭套接字?
根据http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.4,关闭套接字不是请求的选项。这对我来说听起来并不合理 - 如果客户端在关闭其一半的套接字后不尝试传输任何东西,为什么半关闭的TCP连接对服务器来说是个问题?客户端仍然可以接收数据。
在我看来,关闭套接字的写入部分将是让服务器知道请求已完成的一种非常实用的方法。 http://docs.python.org/howto/sockets.html#disconnecting甚至具体提到该用例。
如果这确实是错误的做法,那么有什么选择?我是否总是必须发送“Content-length”或使用分块传输来使服务器正确地找到请求的结尾?这对身体未知长度的请求如何工作?
因此,它是强制性使用分块传输编码或发送一个“Content-Length”标头的请求身体的所有请求?我知道这将是一个明智的做法,但实际上是在标准中的某处指定的吗? – lxgr 2012-01-13 21:28:24
如果请求具有正文,则必须包含足够的信息以供服务器确定正文的大小。阅读RFC 2616第4.3节(消息体)和4.4(消息长度)。 – 2012-01-13 21:55:15