我读到HTTP是一种同步协议。客户端发送请求并等待响应。在发送下一个请求之前,客户端必须等待第一个响应。Ajax使用HTTP协议,但与此相反是异步的。我还读到,同步请求会阻塞客户端,直到操作完成来自这里。我感到困惑,我的问题是:
- 当谈论HTTP协议时,同步的定义是什么?
- 同步是否与阻塞相关?
我读到HTTP是一种同步协议。客户端发送请求并等待响应。在发送下一个请求之前,客户端必须等待第一个响应。Ajax使用HTTP协议,但与此相反是异步的。我还读到,同步请求会阻塞客户端,直到操作完成来自这里。我感到困惑,我的问题是:
作为一种协议,HTTP是同步的。你发送一个请求,就必须等待响应。与其他协议不同的是,在其他协议中,你可以在同一连接上快速连续地发送数据,而无需等待先前数据的响应。请注意,HTTP/2 实际上更符合这些要求。
话虽如此,你可以通过单独的连接并行发送多个独立的 HTTP 请求。对于 HTTP 请求,没有“全局”锁定,每个打开的连接只有一个 HTTP 请求/响应 。 (此外,HTTP/2 可以解决这个限制。)
现在,从 Javascript 应用程序的角度来看,HTTP 请求是异步的。这意味着,Javascript 将 HTTP 请求发送到服务器,其响应将在 稍后的某个时间 到达。同时,Javascript 可以继续处理其他事情,当 HTTP 响应到达时,它将继续处理该响应。这就是 异步 Javascript 执行。 Javascript 可以 等待 HTTP 响应返回,在此期间阻塞 其他所有操作;但那样做很糟糕,因为相对于在此期间完成的所有其他任务(例如保持 UI 响应),HTTP 响应可能需要相对较长的时间。
异步意味着,您发出HTTP请求,但不会等待答案到达。当它到达时,您将处理它,并且可以在此期间自由地做其他事情。这意味着:您不会阻塞应用程序的任何其他操作。
同步则恰恰相反,您发送请求并等待答案,然后再执行其他操作。这意味着:您阻塞了应用程序的其他操作。