HTTP 同步性质

HTTP Synchronous nature

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

  1. 谈到HTTP协议时同步的定义是什么?
  2. 同步是否与阻塞相关联?

异步的意思是,你发出一个 HTTP 请求,但你不会等到答案到达。当它到达时,您将处理它,并且可以在两者之间自由地做其他事情。意思是:你没有阻止你的应用程序做任何其他事情。

另一方面,同步意味着,您发出请求并等待答案,然后再做任何其他事情。意思是:你正在阻止你的应用程序做任何其他事情。

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

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

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