就我而言,Ajax 提供了一种解决方法,可以让 HTTP 协议的行为类似于面向连接的行为。但是为什么一开始 HTTP 协议没有被设计为面向连接的呢?
6 回答
因为它旨在用于连接没有意义的事情。
它被设计为超文本传输协议,这意味着它的职责只是允许发送“请给我文档 X”和“这里是文档 X,如你所愿”形式的消息。
这样的协议应该使用持久连接做什么?
和简单。
回想起来可能不是一件坏事,因为这意味着 HTTP 很简单,这意味着它可以很容易地用于简单的事情。您可以通过在其之上构建层来将它用于需要状态的更难/更复杂的东西。
正是这种简单性使 HTTP 被广泛采用并具有吸引力。如果它不简单,那么它可能只是另一个复杂的协议,除非他们不得不使用,否则没有人使用。如果你不相信我,你能告诉我为什么你不使用 RPC 来编写你的 ajax 应用程序并使用 X11 来进行显示/渲染吗?:D
请记住,HTTP 最初的设计目的是实现像读/写信息存储这样的 wiki,而不是在线商店、银行、文字处理器等。我记得读过 Tim Berniers-Lee 的采访,他真的很高兴 wiki 获得了广泛的接受,因为(解释)这就是他打算如何让网络工作的方式。实际上,这在更广泛的 Web 上并没有发生,并且大多数站点都禁用了旨在启用此功能的 HTTP PUT 方法。
AJAX 不是面向连接的解决方法。这是为了确保基于用户交互,您只想在客户端更新一部分内容,而不是再次从服务器获取完整标记。它不会在您的浏览器和 Web 服务器之间建立来回连接。
如果每台服务器与每个客户端都有实时连接,那么互联网规模将被限制在数百万用户范围内。
HTTP 最初并且仍然是无连接的。AJAX 只是利用现代浏览器的 JavaScript 功能将 XML(或通常是 JSON)发送到服务器,而无需重新加载页面。
如前所述,主要原因是可扩展性。为网站的每个查看者保持活动连接将非常耗费资源。此外,事实是 HTTP 的最初创建者并没有设想任何需要维护连接的系统 - HTTP 的想法只是向请求发送文本响应然后完成。
出于可扩展性的原因。保持连接会消耗资源。
我认为原因很简单——当 http 被创建时:
1) 大多数/所有页面都是静态的 2) 由于互联网上几乎没有商业存在,因此假设链接很可能不会指向不同的站点。
所以,静态页面 + 非本地内容 = 无连接协议。