1 HTTP服务器的简介

来源:互联网 发布:部落冲突恢复药水数据 编辑:程序博客网 时间:2024/05/09 13:22

1.1 HTTP服务器的简介

1. HTTP服务器的工作原理

正常情况下,http服务器会在某一个端口(80、443)进行监听(LISTEN),收到client端发送来的请求后根据HTTP协议进行响应。

client端请求网页-------->HTTP服务器响应的过程:

(1) client —>浏览器输入URL

(2) 把URL解析成HTTP服务器的IP:借助/etc/resolv.conf 中的DNS把URL解析成HTTP对应的IP(可能是负载均衡设备的IP,此时HTTP服务器有多台,有一个负载均衡设备进行负  载分配,并指定一个负载比较小的HTTP服务器响应当前client请求)  

(3) client 通过三次握手与(2)中解析的IP服务器建立TCP/IP联机   (先建立链接,然后发送请求数据)

(4) client 端把浏览器中URL的其他信息 http://www.alimama.com/union/promotion/merchandisePromotionList.htm  GET /union/promotion/merchandisePromotionList.htm HTTP/1.1 等信息发送给HTTP服务器

(5) HTTP服务器收到client请求后,根据 httpd.conf DocumentRoot的配置 找到 union/promotion/merchandisePromotionList.htm的文档,并把文档内容发送给客户端,并返回给客户端200(正常响应client的请求内容);如果client请求的文档需要client登录或这个其他


能直接发送client请求的内容,而是发送另外一个其他的页面内容(比如用户登录页面),同时返回用户30*并在HTTP服务器的access_log日志中记录%>s是30*  表示改变了返回用户的文档;如果HTTP服务器没有找到 client请求的文档,怎返回给client404(网页不存在),会返回httpd.conf 指定的错误提示网页。

(6) HTTP发送完数据后会关闭此次TCP/IP链接,client浏览器收到文档后在IE浏览器就行展示。

 

2. www文档

HTTP服务器上面的文档是以树状结构进行组织的,与传统的层次化文件系统相比,文档树也有一个根,以及一些包含若干子目录和文件的目录;如上面的URL,merchandisePromotionList.htm 的文档在 union/promotion 目录中。但是,web文档树并不能反映web文档的组织结构,web文档并不是简单的树形结构,因为web文档是由若干个开发小组开发的,他们有自己的工作区和存储区,当一个系统非常大时,web文档很多,使得这些文档只保存在一个文件系统下甚至一台计算机上都太大,web服务器并发量比较大和网站系统很大时要把系统文档分布在很多台机器上面(成千上万台服务器)

www文档有3中组织形式:

(1) 所有文档在同一台服务器(小的网站系统)

(2) 所有文档在同一台服务器,但有多台相同的服务器,用来实现负载均衡

(3) 一个大型网站系统是由很多子系统组成的,不同子系统的文档分布在不同的服务器,这样需要哪一个子系统的文档就到此台服务器去获取;服务器集群

 

1.2 Apache的功能

1. 支持虚拟主机

虚拟主机(VirtualHost)是apache的一项功能,用来帮助完成多个域名映射到一台服务器;也就是一台Web服务器提供多个web功能,提供多个网页;一般在线网站都是一台或几台服务器支撑一个网站系统,但是如果这个系统因为某种原因会临时加一个小系统,一段时间会此系统也会取消就不能从新加服务器了(淘宝网上双11的活动网页只用1天就下线),这时就要用到虚拟主机了;具体实现方法有3种:

(1) 基于IP的virtualHost:

同一台web服务器设置多个IP地址,web服务器提供n个web系统,就设置n个IP地址,这样不同的 URL 对应自己的IP地址,client与此台web服务器建立TCP/IP链接后,会到httpd配置文件中找 此URL对应IP的VirtualHost主机,web服务器返回此虚拟主机下面的DocumentRoot 指定目录的index.html 文档数据

实例:假设 有一台服务器web 设置两个IP(安装两个网卡,或这一个网卡绑定两个IP),IP是:172.20.17.55和172.20.17.56,对应的主机名分别为www.server1.com和www.server2.com;现在设置两个虚拟主机:

第一台 VirtualHost

<VirtualHost 172.20.17.55>DocumentRoot /www/server1ServerName www.server1.com.......</VirtualHost>
 
第二台VirtualHost
<VirtualHost 172.20.17.56>DocumentRoot /www/server2ServerName www.server2.com.......</VirtualHost>

此时,clietn在IE中输入  http://172.20.17.55/  就会链接到web服务器;web服务器会返回第一个虚拟机 DocumentRoot指定目录的文件; 就发送给client 的内容是 此台web服务器的 /www/server1 里面的首页 index.html

在IE 输入 http://172.20.17.56/ 可以获取 /www/server2里面的index.html内容

(2) 基于port的虚拟机

多个virtualhost是同一个IP地址,同一个域名(ServeName),用端口的不同来获取不同的文档

第一台VirtualHost

<VirtualHost 8010>DocumentRoot /www/server1ServerName www.test.com.......</VirtualHost>

第二台VirtualHost

<VirtualHost 8011>DocumentRoot /www/server2ServerName www.test.com.......</VirtualHost>这样client 在IE中输入 http://www.test.com:8010  就会得到 /www/server1 里面的文档 一般是index.html

这样client 在IE中输入 http://www.test.com:8011   就会得到 /www/server2 里面的文档 一般是index.html

(3) 基于域名的虚拟主机(现在最常用的方式)

原理就是不同的VirtualHost设置不同的ServerName,而ServerName又是访问此服务器的URL,这样client根据自己的URL与虚拟主机配置中ServerName进行匹配,如果匹配成功就返回此虚拟主机指定目录里面的文件。

第二台VirtualHost

<VirtualHost *>ServerName www.server.comDocumentRoot /www/server1.......</VirtualHost>

第二台VirtualHost

<VirtualHost *>ServerName huodong.server.comDocumentRoot /www/server2.......</VirtualHost>

2. 内容协商:

apache中对同一个文档可能会保存多个不同的版本,比如英文版、中文版等,这时client请求此文档时,跟web服务器进行协商到底是发哪一个版本!

一般有两种方式实现协商:服务器推动内容协商和客户端推动内容协商;而我们一般采用的是客户端推动内容协商。

3. 持续链接(不理解)

在HTTP/1.0 版本中,对每一个HTTP请求,client与server端都建立一次TCP连接;在HTTP初期,web页面都是HTML文档在这种情况下,对一个请求一个TCP连接是合理的;但是现在一个web页面包含flash、视频、图片等,对一个大型web站点主索引页,如果把整个文档下载到client需要建立很多次TCP连接(??);所以在HTTP/1.1中,实现了在一次TCP连接中相应多个HTTP请求,传送多个文件(httpd.conf keepalive设置)

4. 缓存

HTTP/1.1 通常用于分布式信息系统中,在这些系统中,可以通过采用缓存应答的方式改善系统的性能,HTTP/1.1 协议缓存设置的目标是在很多情况下减少发送文档的必要性,就是如果clietn请求的web页面在client缓存中存在,并且是最新的就不用在从server端发送,直接使用缓存中就ok

HTTP/1.1 实现缓存的字段:

(1) Expires:声明了一个网页或URL地址在浏览器缓存中存放的时间;一旦超过了Expires设置的时间,client再请求此页面时就必须想web服务器进行HTTP请求并建立TCP连接,server把clietn请求的文档发送到client,在未来的一段Expires时间,此文档会保存在client浏览器的缓存中。

(2) Cache-Control:缓存控制字段

cache—control 字段可以声明多种元素,例如 no-cache must-revalidate max-age=0等,分别是设置页面被缓存的最大时限,如何被缓存的,如何被转换到另一个不同的媒介

(3) Last-Modified: 是条件请求(conditional Request)的相关字段之一(另一个是 ETag)

Last-Modifed 是用来设置缓存中最后更改的时间的;client想web服务器发送HTTP请求(包含缓存中请求页面的Last-Modifed),这时二者会建立一个TCP连接,此时把web服务器中此文当的最新修改时间和client请求中的Last-Modified 对比,如果二者相同则把浏览器会调用缓存中的此页面;如果不相同,则server会把新的页面发送到client,并保存在缓存中。

(4) ETag:因为Last-Modifed 最小的时间单位是1秒,所以如果在一秒中对文档进行了2次修改,则二者的Last-Modifed是相同的,此时就需要ETag了。

5. 访问控制和安全

web站点存在一些私有文件,我们必须确保这些文件在绝对的控制范围之内,比如passwd,通过认证、授权和访问控制(也就是我们通常说的AAA安全机制)来确保安全。

(1) 访问控制:就是web服务器进行访问控制,比如IP指定,除了允许的IP 其他的IP不能访问web服务器

(2) 认证:用户名和密码

(3) 授权:web服务器有些文档是对某一些特定用户开放的,所以用户想要访问这些文档,必须获得授权

6. 动态页面的生成

随着web页面的发展,从单纯的HTML组成的静态页面发展到还有脚本的动态页面,最早的是CGI脚本,在client请求http服务器时,会调用apache里面处理脚本的模块进行除了CGI脚本,把动态页面改成静态页面,然后发送HTML文档给client。

以后,脚本就发展到 javascript perl 等