什么时候在XMLHttpRequest中发生TCP握手?

时间:2019-05-31 17:33:42

标签: javascript tcp network-programming xmlhttprequest handshake

XMLHttpRequest接口提供了open()send()方法。

在以下示例代码中:

var xhr = new XMLHttpRequest();
xhr.open('GET', '/server', true);

xhr.onload = function () {
  // Request finished. Do processing here.
};

xhr.send('string');

在调用send()open()时是否发生TCP握手?

2 个答案:

答案 0 :(得分:1)

只有HTTP版本低于1.1的请求的生存期及其基础连接才直接相关。

HTTP请求的生存期独立于HTTP 1.1以来其基础连接的生存期。许多请求可以通过单个连接流水线化。

XMLHttpRequest.open是一种方便用户的抽象方法,但在后台,如果浏览器已经有可用的套接字连接到主机,则可以重用它们,这意味着TCP握手发生了一段时间之前,除了通过连接传递的第一个请求之外,所有请求均独立存在。

答案 1 :(得分:0)

使用tcpdump进行的一些简短测试验证了评论中所怀疑的内容。调用open()时根本不进行网络呼叫。调用send()时,将传输所有网络信息。

此外,也不保证send()也会执行握手。 XMLHttpRequest有时会重用先前请求的持久连接,因此不需要新的握手。