Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax HTTP同步性质_Ajax_Http_Synchronous - Fatal编程技术网

Ajax HTTP同步性质

Ajax HTTP同步性质,ajax,http,synchronous,Ajax,Http,Synchronous,我读过HTTP是一种同步协议。客户端发送请求并等待响应。客户端在发送下一个请求之前已等待第一个响应。Ajax使用HTTP协议,但与之相反,它是异步的。我也读到了 异步请求阻塞客户机,直到操作从中完成。我很困惑,我的问题是: 1.谈到HTTP协议时,同步的定义是什么? 2.同步是否与阻塞相关联?异步意味着,您执行HTTP请求,但不等待答案到达。当它到来时,你会处理好它,并在其间自由地做其他事情。意思是:您没有阻止应用程序执行任何其他操作 另一方面,同步意味着,在执行任何其他操作之前,先执行请求,然

我读过HTTP是一种同步协议。客户端发送请求并等待响应。客户端在发送下一个请求之前已等待第一个响应。Ajax使用HTTP协议,但与之相反,它是异步的。我也读到了 异步请求阻塞客户机,直到操作从中完成。我很困惑,我的问题是:
1.谈到HTTP协议时,同步的定义是什么?

2.同步是否与阻塞相关联?

异步意味着,您执行HTTP请求,但不等待答案到达。当它到来时,你会处理好它,并在其间自由地做其他事情。意思是:您没有阻止应用程序执行任何其他操作


另一方面,同步意味着,在执行任何其他操作之前,先执行请求,然后等待答复。意思是:您正在阻止应用程序执行任何其他操作。

HTTP作为协议是同步的。您发送请求,等待响应。与其他协议不同,在其他协议中,您可以通过同一连接快速连续发送数据,而无需等待对以前数据的响应。请注意,这实际上更符合这些原则

话虽如此,您可以通过单独的连接并行发送多个独立的HTTP请求。HTTP请求没有“全局”锁,它只是每个打开的连接的一个HTTP请求/响应。(同样,HTTP/2弥补了这一限制。)


现在,从Javascript应用程序的角度来看,HTTP请求是异步的。也就是说,Javascript将向服务器发送HTTP请求,其响应将在稍后到达。与此同时,Javascript可以继续处理其他事情,当HTTP响应出现时,它将继续处理这些事情。这就是异步Javascript执行。Javascript可以选择等待HTTP响应返回,同时阻止所有其他内容;但这是非常糟糕的,因为HTTP响应与您在此期间可以完成的所有其他事情(如保持UI的响应性)相比可能需要更长的时间。

非常感谢@deceze,所以我可以强制使用一个HTTP连接来完成所有请求(在上一个响应到达之后)从理论上讲,如果您一个接一个地执行请求,那么浏览器可能会重用现有的TCP连接(如果存在)。不过,这仍然比并行处理多个请求慢得多。在应用程序代码中,根本不需要担心这一点;浏览器将管理一次可以/将要执行的并行连接数。非常感谢,回答得很好