HTTP 同步性质

HKI*_*KIT 7 ajax http synchronous

我读到 HTTP 是一个同步协议。客户端发送请求并等待响应。客户端在发送下一个请求之前等待第一个响应。Ajax 使用 HTTP 协议,但相比之下是异步的。我还读到,同步请求会阻止客户端,直到操作从此处完成。我很困惑,我的问题是:

  1. 在谈论 HTTP 协议时,同步的定义是什么?
  2. 同步与阻塞有联系吗?

dec*_*eze 9

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

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

现在,从 Javascript 应用程序的角度来看,HTTP 请求是异步的。这意味着,Javascript 会将 HTTP 请求发送到服务器,其响应将在稍后到达。与此同时,Javascript 可以继续处理其他事情,当 HTTP 响应到来时,它将继续处理其他事情。这就是异步 Javascript 执行。JavaScript 可以选择等待,直到 HTTP 响应返回,同时阻止其他一切;但这非常糟糕,因为与您同时可以完成的所有其他事情(例如保持 UI 响应)相比,HTTP 响应可能需要相对永恒的时间。