什么是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:
www.netcraft.com(互联网上一个统计web网站使用的软件的网站)
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:
支持第三方模块
...