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握手?
答案 0 :(得分:1)
只有HTTP版本低于1.1的请求的生存期及其基础连接才直接相关。
HTTP请求的生存期独立于HTTP 1.1以来其基础连接的生存期。许多请求可以通过单个连接流水线化。
XMLHttpRequest.open
是一种方便用户的抽象方法,但在后台,如果浏览器已经有可用的套接字连接到主机,则可以重用它们,这意味着TCP握手发生了一段时间之前,除了通过连接传递的第一个请求之外,所有请求均独立存在。
答案 1 :(得分:0)
使用tcpdump
进行的一些简短测试验证了评论中所怀疑的内容。调用open()
时根本不进行网络呼叫。调用send()
时,将传输所有网络信息。
此外,也不保证send()
也会执行握手。 XMLHttpRequest
有时会重用先前请求的持久连接,因此不需要新的握手。