2010-01-11 57 views
7

“keep-alive”在HTTP中存在。有人说应该使用它,但我无法得出任何结论。 所以请提供您的输入/答案/意见,所以我可以得到一些理由,HTTP的keep-alive如何在AJAX应用程序中扮演角色

  1. 它做什么?
  2. 应该和不应该完成的情景?
  3. 它如何使AJAX应用程序更好?
  4. 风险的DO和DONT的,如果有的话?

    谢谢大家的意见。

回答

12

首先,如果您的服务器连接使用HTTP/1.1,那么您很可能已经使用“keep-alive”。

这是什么?逻辑上HTTP是一种无连接协议。每个对服务器的请求/响应都会创建一个新的连接,执行其业务并删除连接。但是在HTTP/1.1中,默认行为是保持连接打开以供后续对服务器的请求使用。 “keep-alive”头被添加到HTTP/1.0中以允许选择此行为,在HTTP/1.1中,服务器需要通过关闭连接本身和/或发送“连接关闭”头来退出响应。

为什么它有益?创建连接尤其是需要认证的连接可能需要一些时间。通过重新使用现有连接,安装和认证工作量大大减少。

它如何让你的AJAX应用程序更好?你可能已经从中受益了。

有什么风险?当通过共享设备建立连接时,可能代表客户端与服务器建立连接,其他客户端可能会重新使用该连接,但是这也可以让其他客户端使用服务器具有的连接为不同的用户进行身份验证。

+0

它“能够为其他客户使用服务器已经验证了不同用户的连接” - 我不明白,一个。 HTTP是无状态的,因此多个客户端是否使用相同的TCP连接肯定无关紧要? – 2010-01-11 13:35:18

+0

HTTP是“逻辑上”无状态的,但连接不是。在大多数情况下,连接是匿名的,并且不具有任何意义的状态。然而,身份验证通常是在连接级别完成的(例如IIS上的NTLM),一旦建立连接,多个请求将共享连接的相同身份验证状态。 – AnthonyWJones 2010-01-11 13:58:50

+0

**多个请求将共享连接的相同身份验证状态**并不意味着**使其他客户端可以使用服务器针对不同用户**进行身份验证的连接,假设不同的用户是不同的进程。连接是特定于进程的,并在操作系统级别保护。另一个进程不能**共享**已经针对不同进程进行身份验证的相同连接。 – averasko 2014-12-21 16:59:56

1
  1. 它使TCP套接字客户端开放的,所以你还没有重新建立连接来发送另一个HTTP请求;
  2. Keep-alive在一行中有很多请求时提高http性能。但是,如果请求很少(如果在某段时间内没有来自客户端的更多请求,则服务器通常会关闭连接),但不应该使用它。
  3. 好吧,如果你的AJAX应用向服务器发送了很多请求,keep-alive会提高它的性能。
  4. 服务器端存在套接字耗尽的风险,所以服务器有权中断保持连接的连接。
1

真的可以归结为性能和资源问题。

使用高(er)保持活动可减少请求的延迟。如果您在通过SSL进行连接时需要额外的握手来建立连接,则这尤其成为一个问题。

OTOH,这将意味着有额外的服务器processes.threads坐等闲,等待后续请求或保持活动到期。这可能会占用内存,因此会降低服务器的速度。

所以你真的需要玩弄一下,看看浏览器性能与服务器负载的关系。

认证(基于基本/摘要/会话)不相关 - 它是被认证的请求 - 不是套接字连接。

请注意,上次我做了一次全新的Apache安装,它的默认设置为5秒,以保持活跃状态​​。对于非Ajax站点来说这是非常漫长的。

C.

相关问题