HTTP服务器什么时候开始返回数据?

时间:2015-01-04 07:41:54

标签: http networking

在客户端和服务器之间建立连接后,客户端开始发送HTTP请求。这包含一行看起来像GET / HTTP/1.1后跟几行标题的行。我的问题是,Web服务器如何知道何时开始返回数据?客户端是否以某种方式关闭其连接端以指示已完成请求并准备开始接收响应?服务器是否只知道标题末尾的“\ r \ n \ r \ n”字符串后面?这完全是另类吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

您需要阅读HTTP 1.1规范。服务必须先阅读整个请求才能制定并发送响应。至少有两种方法可以知道请求的结束位置:

  1. Content-length标题
  2. 分块传输编码。

答案 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