一、http协议:超文本传输协议
应用层协议,使用TCP协议承载,端口号为80
http协议的功能:
MIME:多用途互联网邮件扩展,可以传输非纯文本文件
Cache:缓存机制
Method:GET,PUT,POST,DELETE,HEAD,TRACE,CONNECT,OPTIONS;
GET:请求获取指定的资源;
PUT:向指定的位置上传资源的最新版本;
POST:用于实现表单认证,在资源之后附加相关数据;
DELETE:请求服务器删除被明确标识的资源;
HEAD:与GET方法相同,都是向服务器申请获取资源,但HEAD方法仅向服务器请求响应消息的首部元信息;
TRACE:请求服务器回送收到的请求信息;用于测试或者故障诊断;
CONNECT:保留,留待将来使用;
OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项以及请求资源可以使用的方法;
keepalive:持续连接机制,也称持久连接,长连接
HTML:超文本标记语言,http协议主要传输的语言
http协议的工作模式:request/response模式;
一次完整的http事务:请求<-->响应;
一次完整的http通信,包括一次请求及对应于此次请求的响应;
二、web资源的使用
1.web资源:
一个html文档;
一张图片(jpg/jpeg,gif,png)
一个MP3片段
一个mpeg/mp4片段
一个PHP脚本
一个js脚本
一个css样式表
...
一次http请求,只能请求一个web资源,一个网站拥有多个web资源,请求加载网站时,若对于每一个web资源服务器都要使用一个进程建立TCP链接,会使服务器负担过大,必须要合理分配进程处理请求,才能使效率更高,服务器用来处理客户端请求的模型称作并发响应模型
2.并发响应模型:
单进程IO模型:仅有一个进程用于处理和响应客户端请求,每次只能处理和响应一个客户端,串行响应模型;
多进程IO模型:同时启动多个进程,每个进程只能处理和响应一个客户端请求;
复用的IO模型:进程可以同时处理并响应多个客户端的请求;
多线程的IO模型:每个进程可以生成多个线程,每个线程可以响应一个用户请求;
事件驱动的IO模型:每个进程直接处理并响应多个客户端的请求,其中采用事件通知机制;
复用的多进程IO模型:启动M个进程,且每个进程可以生成N个线程,每个线程可以处理并响应一个客户端的请求;M*N个客户端;
复用的事件驱动的IO模型:启动M个进程,每个进程都是基于事件驱动的方式直接处理并响应多个客户端的请求;
3.web服务器的一次完整的http请求的处理过程:
10建立TCP连接
2)接收请求:将客户端发送来的报文经过通信子网的解封之后,将其放置于用户空间中相应的应用程序所在的内存空间中;
3)分析处理请求:通过读取报文的http协议首部和body部分,获取客户端请求的资源的具体信息;
4)访问资源:通过特定的IO方式从磁盘等IO设备上加载客户端请求的资源;
5)构建响应报文:将加载的资源使用特定协议予以封装;
6)发送响应报文:
7)记录日志信息:
4.URI:Uniform Resource Indentifier,统一资源标识符;
在整个Web网络上可以的各种资源,如:HTML文档,图片,视频或音频片段,应用程序,压缩包,脚本等,都可以使用URI进行统一的唯一的标识;
URI一般包含三个部分:
1)资源的命名机制;
2)存放资源的主机名称;
3)资源自身名称;
URL:Uniform Resource Locator,统一资源定位符,URI的一个分支,用来定位资源的方法,使用URL可以找到一个定位的web资源;
URL是互联网上用来描述web资源的定位方式的一组具有特定格式的字符串;
URL一般有三个部分:
1)协议:资源的提供方式或访问方式;
可用的协议:https,http,ftp,ssh,mailto,gopher,...
2)主机标识:可以使用主机的FQDN,也可以使用IP地址;
3)资源存放的路径:相对于主机的存放路径;使用某种特定方式实现的映射路径,用于标识资源的具体位置;此路径是从根开始出发并标识的路径,根是web服务的根,而并不是文件系统的根;
URL通用标准格式:
[scheme://][Username:[email protected]]Server[:port][/PATH/TO/RESOURCE][?PARAMETERS=VALUE&&...][#FLAG]
5.web资源的分类:
静态资源:
服务器会根据客户端的请求直接将资源原封不动的响应给客户端的资源;
html文档
图片
视频片段,音频片段
纯文本
css
...
动态资源:
通常是由某种编程语言编写的程序文件,在服务器上经过某种特定方式执行之后生成相应的html页面,服务器将程序运行生成的html页面响应给客户端的资源;
服务器端动态资源:
php脚本
jsp程序
.NET程序
python脚本
ruby脚本
C/C++程序
客户端动态资源:
javascript脚本
Servlet
ActiveX
6.资源的路径映射:
在一个web资源的URL中,有该资源的路径字段,但该路径一般不是该资源在服务器主机内的实际路径,而是一种通过chroot机制映射出来的路径。
一个映射web根目录的指令:
DocumentRoot /var/www/html/
此时,/var/www/html就变成了web访问的根目录,通过以下URL可以访问/var/www/html/目录下的资源
http://server/a.html
web服务器的资源路径的映射方式:
1)DocumentRoot
2)Alias
3)VirtualHost DocumentRoot
4)用户的docroot
...
7.http协议请求处理的连接方式:
1)非持续连接:短连接
在建立好的一个TCP连接上,仅能传送一个http请报文以及一个与之匹配的响应报文;
适用场合:用于请求单个大资源的响应报文的传送;
2)持续连接:持久连接,长连接,keepalive;
可以允许客户端在一个TCP连接上发送不止一次的http请求报文,每一个资源响应报文都可以基于同一个TCP连接响应给客户端;
适用场合:用于多个小资源请求或从反向代理服务器向后端服务器请求的场景;可以避免后端服务器使用过多的进程来处理和响应客户端请求,在很大的程度上可以节省服务器的资源开销;
注意:到底选择使用哪类连接方式,由提供资源的服务器决定;
三、http协议的开源实现:
一些静态资源的解决方案:
httpd(Apache)
nginx(Engine X)
Tengine
lighttpd
一些动态资源的解决方案:应用程序服务器
JSP:
Tomcat
Weblogic
Websphere
Jboss
Glassfish
PHP:
php
php-fpm
Python:
python
.NET:
IIS
四、httpd命令
1.特性:
高度模块化,由核心和模块组成,所有功能都放在模块当中
DSO:动态共享对象,可以实现模块的动态装载和卸载
2.httpd的模块
1)静态模块:编译至核心中的模块,如果想要更换静态模块,则必须要换核心文件,并且只有在重启服务进程之后,才能生效;
2)动态模块:可以基于DSO方式动态装载卸载,仅需要重载配置文件即可生效
MPM:多道处理模块,用来设定httpd进程的并发响应模型,有三种:
prefork:多进程IO模型;
1)一个主进程,多个子进程;
2)主进程用于管理子进程,创建套接字,接收客户端请求,并将客户端请求派发给子进程处理;
3)子进程负责处理客户端请求及构建和发送响应报文;
4)一个子进程仅能处理和响应一个客户端的请求;
5)httpd默认的MPM模块;
worker:复用的多进程IO模型(多进程多线程)
1)一个主进程,多个子进程;
2)主进程用于管理子进程,创建套接字,接收客户端请求,并将客户端请求派发给子进程处理;
3)子进程负责管理其内部的各线程;
4)线程负责处理客户端请求及构建和发送响应报文;
5)一个线程仅能处理和响应一个客户端的请求;
event:复用的IO模型(事件驱动的多进程模型)
1)一个主进程,多个子进程;
2)主进程用于管理子进程,创建套接字,接收客户端请求,并将客户端请求派发给子进程处理;
3)子进程负责处理客户端请求及构建和发送响应报文;
4)一个子进程可以处理和响应多个客户端的请求;
注意:event模型在httpd-2.0之前不支持;在httpd-2.2版本中仅用作测试;只有在httpd-2.4中才被定义为建议使用的模型;
在CentOS 6中,通过rpm包仅能安装httpd-2.2版本,event模型是测试模型,不支持DSO动态装载和卸载;
在CentOS 7中,通过rpm包能安装httpd-2.4版本,event模式为"production ready",并且支持DSO动态装载和卸载;
3.
原文地址:http://blog.51cto.com/papapa213/2104650