文档中心 >Google PageSpeed

启用Keep-Alive

概览

启用HTTP Keep-Alive或HTTP持久连接允许同一个TCP连接发送和接收多个HTTP请求,从而减少了延迟后续请求。

详细说明

当客户端浏览器请求网页时,IIS 将返回一个带超文本传输协议 (HTTP) 头的响应。 HTTP 响应头是一些名称和值对,其中包含有关请求页面的信息。 这包括 HTTP 版本、日期和内容类型。

您可以创建自定义头,以便在响应中向客户端传递特殊的信息。 例如,您可以创建一个名为“authors”的自定义头,并在其中包含内容作者的名称。 此外,您也可以创建 Content-Language 头来描述网页正文所使用的自然语言,同时提供一些语言-国家/地区值,例如 en-US(美国英语)、en-CA(加拿大英语)以及 en-GB(英国英语)。

如果在 Web 服务器级别创建了自定义 HTTP 响应头,则除非在子级覆盖该头,否则所有网站、Web 应用程序、虚拟目录以及文件都将继承该头。 同理,Web 应用程序和虚拟目录将继承网站级别的头,而文件则会继承 Web 应用程序或虚拟目录级别的头。 您可以删除继承的头以防止其在响应中传递,也可以在以后需要时还原该头。

启用Keep-Alive响应头通过使客户端/服务器连接在处理多个发送到服务器的请求期间一直保持打开状态,提高了 Web 服务器的性能。当客户端发出多个对网页内容的请求时,打开的连接将可以提高性能,因为服务器可以更快地为每个请求返回内容。 否则,服务器必须为每个请求打开一个新连接。 默认情况下,在 IIS 7 中启用了保持 HTTP 连接响应头。

备注:当您使用集成安全性或基于连接的身份验证服务(如集成 Windows 身份验证)时,必须启用Keep-Alive响应头。

怎样启用Keep-Alive

由于Keep-Alive是默认启用的,如果你的页面不使用它,那意味着你的Web服务器被配置为关闭连接或您的虚拟主机提供商已将其禁用。但你仍然可以改变它。

为了启用Keep-Alive,必须在你的请求里添加一个HTTP标头。如果您没有看到启用Keep-Alive,它可能是因为你正在请求一个页面或资源的HTTP头为:“connection: close”。这将禁用Keep-Alive和告诉服务器只要它完成加载一个文件就关闭连接。如果我们改变为“connection: keep-alive”,它将保持连接打开,因此所有文件都可以在关闭连接前被检索。

通过.htaccess 更改HTTP头

Keep-Alive是由通过您的HTTP头明确要求启用它的。这样做将覆盖任何更高的设置。如果您没有访问Web服务器的配置文件,您可以使用.htaccess文件自行添加HTTP标头。 (请知道.htaccess文件的任何改变可以搞乱很多东西,在你更改任何设置之前你应该知道这一点,除非你非常熟悉.htaccess)

<ifModule mod_headers.c> Header set Connection keep-alive </ifModule>

添加这个到你的.htaccess文件将会添加Keep-Alive头都你的请求里,这将覆盖很多web服务器或者主机限制。

Apache启用Keep-Alive

如果你能够访问你的Apache配置文件,你就能够在那里启用Keep-Alive,这个应用单元显示如下:

#
# KeepAlive: 是否允许连接持久(每连接多于一个请求 ).
# 设置 "Off" 禁止.
#
KeepAlive On

#
# MaxKeepAliveRequests:一个连接允许的最多请求数量, 设置 0 允许无限多.
# 建议你不要设置这个数字太高,以获得最佳性能.
#
MaxKeepAliveRequests 100

#
# KeepAliveTimeout: 同一客户同一连接下一次请求的等待时间(s)
#
KeepAliveTimeout 100

Nginx启用Keep-Alive

Keep-Alive问题可以通过HttpCoreModule来解决。有一个具体的指导,你应该看出来的......“keepalive_disable”。如果你看到这个,在删除之前一定要知道为什么它要禁用Keep-Alive。

Litespeed启用Keep-Alive

Litespeed启用Keep-Alive是默认的,但你的服务器可能会使用所谓的“智能keep-alive”。这是一个Litespeed的内部设置,是专门针对高容量的网站的。此设置会导致pagespeed工具显示keep-alive被禁用。

“智能keep-alive”会要求初始文件(HTML文件)在HTTP标头关闭连接。然后,它会要求所有其它文件(CSS,JS,图像等)启用keep-alive。这使得更多的用户当有许多并发请求的时候能够一次连接。

提示(仅限于Litespeed服务器):除非你确实是一个高流量的网站,你可以(并且可能应该)在配置里禁用智能keep-alive,一旦你这样做,所有连接将使用keep-alive。

Win2003启用Keep-Alive(IIS6)

Win2003的Keep-Alive是默认启用的,你可以在IIS里设置启用或禁用。

操作方法为:

1、打开IIS管理器。

2、右键点击要设置的网站,选择“属性”后进入设置界面。

3、切换到“网站”标签,勾选“保持HTTP连接”,连接超时使用默认的120秒。

如何启用Keep-Alive响应头(IIS7)

您可以通过以下方法执行此过程:使用用户界面 (UI)、在命令行窗口中运行 Appcmd.exe 命令、直接编辑配置文件或编写 WMI 脚本。

用户界面

使用 UI

1.打开 IIS 管理器,然后导航至您要管理的级别。 有关如何打开 IIS 管理器的信息,请参阅 打开 IIS 管理器 (IIS 7)。 有关如何在 UI 的各个位置间进行导航的信息,请参阅 在 IIS 管理器中导航 (IIS 7)

2.在“功能视图”中,双击“HTTP 响应头”。

3.在“HTTP 响应头”页的“操作”窗格中,单击“设置常用标头”。

4.在“设置常用 HTTP 响应头”对话框中,选中“保持 HTTP 连接”复选框,然后单击“确定”。

命令行

若要启用Keep-Alive标头,请使用下面的语法:

appcmd set config /section:httpProtocol /allowKeepAlive:true | false

默认情况下已启用Keep-Alive标头,但您可以通过将 allowKeepAlive 设置为 false 禁用它。 例如,若要禁用Keep-Alive标头,请在命令提示符处键入以下命令,然后按 Enter:

appcmd set config /section:httpProtocol /allowKeepAlive:false

有关 Appcmd.exe 的详细信息,请参阅 Appcmd.exe (IIS 7)

配置

本主题中的过程会影响以下配置元素:

<httpProtocol> 配置元素的 allowKeepAlive 属性

有关 IIS 7 配置的详细信息,请参阅 MSDN 上的 IIS 7.0:IIS 设置架构(可能为英文页面)。

WMI

请使用以下 WMI 类、方法或属性执行此过程:

•HTTPProtocolSection.AllowKeepAlive 属性

有关 WMI 和 IIS 的详细信息,请参阅 IIS 7 中的 Windows Management Instrumentation (WMI)。 有关与此过程关联的类、方法或属性的更多信息,请参阅 MSDN 网站上的 IIS WMI 提供程序参考(可能为英文页面)。