我正在尝试了解HTTP pipelining和HTTP keep-alive连接,以及试图在这两个主题和服务器发送事件技术之间建立联系。
据我所知,HTTP keep-alive连接是在HTTP 1.1中使用TCP的默认方式,一旦建立TCP连接,就可以使用该连接依次发送多个HTTP请求。HTTP pipelining是客户端在使用同一TCP连接时,在未收到先前请求的响应的情况下向服务器发送请求的能力,通常不作为浏览器的默认方式。
我的问题如下:
1)如果可以使用一个TCP连接依次发送多个请求到服务器 - 客户端如何区分响应?我猜客户端使用服务器按FIFO顺序发送响应?
2)为什么不幂等的请求,例如POST请求不应该进行pipelining(根据维基百科)?
3)Web服务器的限制如何?可能打开的TCP连接数量是否有限制?如果是,那么如果某些客户端保持keep-alive连接,则其他客户端无法建立连接,这可能会导致问题,对吗?
4)服务器发送事件正在使用keep-alive连接,但据我所知,SSE并没有使用pipelining。相反,它们设法处理一个请求的多个响应,或者当下一个带有事件的响应到达时,它们只是发送另一个请求。哪种猜测是正确的?
5)一个TCP连接意味着一个套接字吗?一个套接字意味着一个TCP连接吗?关闭/打开套接字意味着关闭/打开TCP连接吗?
据我所知,HTTP keep-alive连接是在HTTP 1.1中使用TCP的默认方式,一旦建立TCP连接,就可以使用该连接依次发送多个HTTP请求。HTTP pipelining是客户端在使用同一TCP连接时,在未收到先前请求的响应的情况下向服务器发送请求的能力,通常不作为浏览器的默认方式。
我的问题如下:
1)如果可以使用一个TCP连接依次发送多个请求到服务器 - 客户端如何区分响应?我猜客户端使用服务器按FIFO顺序发送响应?
2)为什么不幂等的请求,例如POST请求不应该进行pipelining(根据维基百科)?
3)Web服务器的限制如何?可能打开的TCP连接数量是否有限制?如果是,那么如果某些客户端保持keep-alive连接,则其他客户端无法建立连接,这可能会导致问题,对吗?
4)服务器发送事件正在使用keep-alive连接,但据我所知,SSE并没有使用pipelining。相反,它们设法处理一个请求的多个响应,或者当下一个带有事件的响应到达时,它们只是发送另一个请求。哪种猜测是正确的?
5)一个TCP连接意味着一个套接字吗?一个套接字意味着一个TCP连接吗?关闭/打开套接字意味着关闭/打开TCP连接吗?