什么是http?

    http是一种超文本传输协议(hyper text tranfer protocol),工作在应用层.超文本就是拥有超级链接的文本(html hyper text mark language 超文本标记语言),最开始的超文本传输协议只是为了方便文件检索的工具,并没有各种其他的东西.

这里我们主要介绍http协议实现的工具httpd(apache)

基础概念:

URL(Uniform Resource Locator):资源标识,用于描述服务器上某特定资源的位置;

   一次完整的http请求的处理过程:

(1) 建立或处理连接:接收请求或拒绝请求;

(2) 接收请求:接收客户端发来的具体请求报文;

(3) 处理请求:对请求报文进行解析;

(4) 访问资源:通过存储IO获取用户请求的资源; 

(5) 构建响应报文:

(6) 发送响应报文 :

(7) 记录于日志中:

并发响应模型:

单进程I/O模型:串行响应;

多进程I/O模型:同时启动多个进程,每个进程响应一个请求;

复用的I/O模型:一个进程响应多个请求;

 多线程模型:一个进程生成多个线程,每个线程响应一个请求;

 事件驱动:一个进程直接响应多个请求; 

复用的多进程I/O结构:启动m个进程,每个进程生成n个线程,每个线程响应一个请求;

路径映射:就是把一个文件的指定路径当作一个程序或者系统的根来使用.

    Web的资源映射类型:

        (a):DocumentRoot

        (b):alias

        (c):虚拟主机的docroot    

        (d):用户的docroot

        ...

http请求处理中的连接方式:一个web页面有多个资源组成,比如图片、文字、超级链接。每一个资源都要单独请求。为了加快本地客户端会启动多个线程,让服务器并发来响应一个客户端的多个同时的请求,但在服务器端会识别成多个独立的请求,只不过是来自于同一个ip地址。当客户端开启线程由服务器响应时,加载完成以后,由于tcp协议是有三次握手四次断开的,如果断开则请求下一个资源是则必须再次握手,造成很大的资源浪费。所以必须指定是否保持链接一次性请求多个资源。如果一个客户端只请求了一个资源则会占用服务器的线程数。所以会出现以下情况:

    保持连接:长连接,keepalive

    非保持连接:短连接, 

    为了限制两者的关系必须从 [时间][数量] 做限制

http协议的实现

    常见的基本http协议服务器:

       httpd(apache)

       nginx

       lighttpd

application server:动态服务器技术;

 lis,tomcat,jetty。resin,。。。

weblogic,websphere,jobss,glassfish...

       httpd:

    httpd的特点:

        高度模块化设计:core(内核)+modules(模块)

     DSO:Dynamic Shared Objects(动态共享对象,支持动态装载和卸载)

                模块的好处在于可以节约内存 和减少bug的可能性

   MPM:多路处理模块  multlpath processing modules (并发响应模型)2.2版本以前不支持动态妆卸载2.4支持动态装卸载

     常用功能模块:

     prefork:一个主进程和多个子进程;主进程负责控制子进程,创建套接字,接受请求派发给子进程;     

          子进程:负责响应用户请求

   worker:多进程多线程模型;一个线程响应一个请求

           主进程:同上

           子进程:负责管理线程

            线程:处理并响应请求

    event;事件驱动模型,多进程模型,每个进程响应多个请求;

            主进程:同上

             子进程:处理并响应请求

注意:

    http-2.2:event为测试模型(CentOS6默认安装MPM不支持动态DSO机制);

    http—2.4为正式(CentOS7默认)

    httpd版本:

       httpd-1.3:官方已停止维护:

       httpd-2.0

       httpd-2.2

       httpd-2.4

httpd的功能特性:

CGI:common gateway interface;(通用网络接口)

虚拟主机:IP, PORT, HOSTNAME (基于ip.端口.主机名)

反向代理 

负载均衡:bytraffic, bybusiness, byrequest

路径别名 

丰富的用户认证机制

basic: 

digest: 

支持第三方模块

...