考虑一个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规范?我已阅读RFC 7230和RFC 7231但未能找到相关指南。有similar questions,但没有令人满意的答案。