xmlhttprequest在请求处理后是否保持连接打开?

Ala*_*loo 5 javascript php ajax codeigniter xmlhttprequest

我做了一个简单的ajax ......

请求和响应标头都包含Connection: Keep-Alive

我凝视了一下,发现客户端因此与服务器保持持久连接.这支持流水线操作,客户端可以在不等待每个响应的情况下发送多个请求.

所以我有一些问题:

  1. xmlhttprequest实际上在哪里打开与服务器的连接?
  2. 创建许多xmlhttprequest对象是打开它们自己的连接还是使用流水线将它发送到同一个连接上?
  3. 我想处理同时请求..我可以排队请求(存储参数)..并在onreadystate提供函数来处理它..即调用递归请求的函数?或者它根本不是一个好主意?
  4. 连接什么时候关闭..在什么阶段?

其他信息: 我不想使用jquery或任何其他图书馆的ajax.You可以提出.我可以检查它们是如何工作的.我正在使用javascrip和php(codeigniter框架).我希望能够处理多个请求(2)..和队列请求,达到限制时.

提前致谢 :)

小智 2

XMLHttpRequest 是一个对象,它允许您从服务器请求和接收数据而无需刷新页面。它使用HTTPHTTPS请求。它与请求和接收 HTML 页面基本相同。您可以同步或异步打开它们。

XMLHttpRequest.open( Method, URL, Asynchronous, UserName, Password )
Run Code Online (Sandbox Code Playgroud)

这里,MethodHTTP要使用的请求方法。请参阅http://www.w3.org/TR/XMLHttpRequest/#the-open()-method

我想处理同时请求..我可以将请求排队(存储参数)..并在onreadystate中提供函数来处理它..即递归调用发出请求的函数吗?或者这根本不是一个好主意?

我将创建一个 XMLHttpRequests 数组并处理数据并从 array 中删除 XMLHttpRequest onreadystatechange。请记住,您将收到混合顺序的异步响应,或者可能根本收不到响应。

连接何时关闭……在什么阶段?

收到数据后立即关闭。请注意,这keep-alive是为了保持会话处于活动状态,而不是连接。

  • @Ertug >“请注意,保持活动状态是为了保持会话活动,而不是连接。” 不真实。这一切都是为了保持 (TCP) 连接处于活动状态。不存在“会话”这样的东西。 (23认同)
  • @pavel_karoukin 从技术上讲我不得不不同意。TCP 是一种基于 IP 的传输机制(第 4 层),可提供可靠的连接。建立新的 TCP 连接会带来开销,因此您希望尽可能保持其打开状态。会话将存在于 TCP 连接(第 5 层)之上,并且通常不适用于 HTTP 请求,因为 HTTP 通常在应用程序层(第 7 层)上运行。因此,“keep_alive”就是在可能的情况下保持连接处于活动状态。只是 HTTP 请求被关闭。 (3认同)