.NET Socket 和 NetworkStream 都提供 Read 方法,当没有可用数据时,该方法会阻塞。问题在于,如果客户端不知道消息的大小,则无法可靠地了解服务器何时完成发送消息。
我的问题是 - 更高级别的库(如 HTTP 级别的 WebRequest)使用什么原则来停止从套接字读取并向客户端呈现完整消息,而不诉诸任何类型的读取超时?似乎 HTTP 协议(protocol)不提供任何“EOF” token ......
最佳答案
HTTP 1.1 通过使用两种机制之一来管理这一点。 content-length在 header 中发送,或 chunked transfer encoding用来。分 block 传输编码是 HTTP 1.1 相对于 HTTP 1.0 的一大优势,在没有发送内容长度的情况下,无法可靠地检测到传输结束,从而导致传输问题与有效负载的实际结束之间存在歧义.在某些情况下(例如 HTTP 上的音频流),没有可能指示传输结束的内容长度或其他编码,但在这种情况下,它对客户端来说并不重要。
关于.net - 知道何时停止从 HTTP 级别的 .NET 套接字读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5109214/