Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
HTTP服务器在使用请求时能否生成响应?_Http_Specifications_Rfc - Fatal编程技术网

HTTP服务器在使用请求时能否生成响应?

HTTP服务器在使用请求时能否生成响应?,http,specifications,rfc,Http,Specifications,Rfc,考虑将请求主体反映到响应中的http服务器。在伪代码中: recv_req_headers() send_resp_headers() while have_req_body_data: chunk = recv_req_body_chunk() send_resp_body_chunk(chunk) 类似地,考虑在读取响应之前发送整个请求的HTTP客户端: send_req_headers() send_req_body() recv_resp_headers() recv_

考虑将请求主体反映到响应中的http服务器。在伪代码中:

recv_req_headers()
send_resp_headers()
while have_req_body_data:
    chunk = recv_req_body_chunk()
    send_resp_body_chunk(chunk)

类似地,考虑在读取响应之前发送整个请求的HTTP客户端:

send_req_headers()
send_req_body()
recv_resp_headers()
recv_resp_body()
现在,当这两个请求尝试通信时,它们会死锁,因为一旦发送缓冲区已满,服务器将停止使用请求。在这一点上,双方都被阻止试图向另一方发送数据


哪一方违反了HTTP规范?我已经通读了一遍,但在这两方面都找不到指导。有,但没有令人满意的答案。

为什么会僵持?客户端在收到响应之前发送整个请求。服务器得到一个完整的请求并能够发送一个完整的响应。服务器没有得到整个请求,而是读取数据块并将其重新发送给客户端。最终,发送缓冲区将填满,服务器将在
send_resp_chunk
中阻塞,然后客户端将在
send_req_body
中阻塞。只有当客户端将响应重新发送回服务器时,这才会死锁。否则,客户端只向服务器发送有限数量的数据,因此服务器将读取有限数量的数据块。否,因为传输中只能有有限数量的数据。如果请求的大小(比如)为1GB,那么在服务器没有读取连接的情况下,客户端无法发送整个请求。网络接收缓冲区的大小不是1GB。因此,一旦服务器的缓冲区已满,服务器可能只会发送413。这将终止连接并删除任何挂起的数据。这里没有违反规范的情况。双方都在做协议允许的事情,但数量很大。