在客户端和服务器之间建立连接后,客户端开始发送HTTP请求。这包含一行看起来像GET / HTTP/1.1
后跟几行标题的行。我的问题是,Web服务器如何知道何时开始返回数据?客户端是否以某种方式关闭其连接端以指示已完成请求并准备开始接收响应?服务器是否只知道标题末尾的“\ r \ n \ r \ n”字符串后面?这完全是另类吗?
谢谢!
答案 0 :(得分:1)
您需要阅读HTTP 1.1规范。服务必须先阅读整个请求才能制定并发送响应。至少有两种方法可以知道请求的结束位置:
Content-length
标题答案 1 :(得分:0)
您应该阅读HTTP 1.1 core specifications。
19.4.6传输编码简介
HTTP / 1.1引入了Transfer-Encoding标头字段(部分 14.41)。代理/网关必须先删除任何传输编码 通过符合MIME的协议转发消息。
解码" chunked"转移编码(第3.6节) 可以用伪代码表示为:
length := 0 read chunk-size, chunk-extension (if any) and CRLF while (chunk-size > 0) { read chunk-data and CRLF append chunk-data to entity-body length := length + chunk-size read chunk-size and CRLF } read entity-header while (entity-header not empty) { append entity-header to existing header fields read entity-header } Content-Length := length Remove "chunked" from Transfer-Encoding