Apache功能 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1、虚拟主机 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
在一个机器上运行多个Web站点的机制,实现方式有三 种: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(1)Web服务中配置多个 IP。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
物理地址有限,Web站点数量远超过 IP地址的数目。会使Web站点的 发展受到限制。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(2)基于端口的实现。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
需要显示的给出请求的端口。对使用者来说不方便。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(3)通过HTTP请求头中的HOST域对请求进行区分。对HTTP1.1协议,该域必备。只有HTTP1.1协议才可以支持这 种基于“ HOST域“的协议。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
而且通过对mod_vhost_alias模块,可使得类似的主机配置非常容易,减轻管理员负担。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2、内容协商 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(1)服务器端驱动的内容协商 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
由服务器端决定发送到客户端的文档版本。大多数情况下,由服务器猜测最合适的版本发送给客户端。为改善服务器猜测,客户端可包含Accept、 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Accept-Language、Accept-Encoding。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
缺点如下: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1、服务器不可能准确判断出对于一个给定的用户什 么是“最佳”的 协商。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2、客户端在一个请求中描述自己能力的效率很低,如果描述能力 强,会 对用户的隐私造成泄漏。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3、服务器端驱动的协商使得初始服务器的实现及对请求生成应答的算法变得 复 杂。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4、服务器端驱动的协商可能会限制一个公共缓存的能力,使其对多个用户的请求使用同样的应答。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(2)客户端驱动的内容协商 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
客户端驱动的协商由浏览器端完成。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3、持续连接 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
HTTP/1.0版本中,对 每个 单一的 HTTP 请求,客户端与服务器端之间都必须建立一次 TCP 连接。但对于包含大量元素的多媒体数据对 每个文件的 请求 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
打开与关闭显然对服务器是一 种浪 费。因此引入的持续连接。所谓持续连接,就是某个连接在打开后不立即关闭,而是继续使用,后续的数据传输都 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
基于该连接。为了使用持续连接,客户端与服务器端之间会使用“Connection:keep-alive”请求域。默认情况下连接就是持续连接,除非进行了特殊指 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
定。如果某一方不愿意使用持续连接,只需要设置“Connection:close”,如果某一方收到该域,会在当前请求处理完毕后关闭当前请求。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Apache中提供了配置指令,允许限制同一连接上的处理请求数目,以及处理超时的时间,一旦超过处理时间,所有的连接将关闭。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4、缓存 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
缓存设计目标就是在很多情况下降低发送请求的必要性,以及在很多其他情况下降低发送完整应答的必要性。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
降低发送请法度的必要性,会减少很多操作需要的网络回合数量,使用过期机制来实现这一目的。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
降低发送完整应答的必要性减少了网络带宽需求,通过验证机制达到这一目的。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
HTTP/1.1中非常有用的缓存字段 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Expires:声明了一个网页或 URL地址不再被 浏览器缓存的时间。超过这个时间浏览器应联系原始服务器。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Cache-Control | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
可声明多种元素。…………………………………………………… | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Last-Modified | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Last-Modified和Etag是条件请求相关的两个字段。当一个验证请求询问服务器页面是否已经更改,在 HTTP 头里会带上“ Etag”和“If Modify Since” 头。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
服务器根据这些信息判断是否更新了信息,未更新返回304,若更新了返回200和更新的页面内容,并带回新的“Etag”和“LastModified”。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Etag | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
如果一秒钟内对一个文件进行两次更改,则Last-Modified就会不正确。因此,HTTP/1.1利用Entity Tag头提供更严格的验证。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
默认的,Apache会对所有的静态、动态文件的响应头添加Etag字段。在Apache的httpd.conf文件中可通过FileETag指令配置该选项。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Apache1.3.22以前,Etag值 对文件的索引节( Inode)、大小(Size)和最后修改 时间( Mtime) 进行 Hash后得到。在 负载平衡的服务器环境下, | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
同一个文件会有不同的Etag或文件修改日期,浏览 每次都会重新下 载。设置“ FileETag None”可使响 应头不再包含 Etag字段。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
5、访问控制和安全 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
认证(Authentication)、授权(Authorization)及账户确认(Accounting)。三者称为AAA模块。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
访问控制:服务器会基于用户不能控制的请求特性进行限制访问。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
认证:对用户名及密码的验证。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
授权:Apache通过解析全局及本地的配置文件.htaccess来决定用户的授权身份。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
6、动态内容生成 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
通过其他模块将服务器端的脚本解释返回HTML。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
例如:PHP、Perl、Java Serverlets …… | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||