Web Service:httpd简介
一、Web Service基础
1.Port number(IANA,互联网地址授权机构规定)
tcp:传输控制协议,面向连接的协议;通信前需要建立虚拟链路;结束后拆除链路;0-65535
udp:User Datagram Protocol,无连接的协议;0-65535
0-1023:永久的分配给固定的应用使用,特权端口,如22/tcp(ssh), 80/tcp(http), 443/tcp(https)
1024-41951:注册端口,分配给程序注册为某应用使用,如11211/tcp, 11211/udp (memcached), 3306/tcp(mysql)
41952+:客户端程序随机使用的端口;动态端口或私有端口;其范围的义:/proc/sys/net/ipv4/ip_local_port_range
2.BSD Socket: IPC(进程间通信)的一种实现,允许位于不同主机上不同进程之间进行通信
Socket API(封装了内核中的socket通信相关的系统调用)
(1)根据传输成协议分类:
SOCK_STREAM:tcp套接字
SOCK_DGRAM:udp套接字
SOCK_RAW::裸(raw)套接字
(2)根据套接字所使用的地址格式,Socket Domain:
AF_INET:Address Family,IPv4的地址
AF_INET6:IPv6的地址
AF_UNIX:同一主机上不同进程之间通信时使用;
(3)套接字相关的系统调用:
socket(): 创建一个套接字;
bind():绑定
listen():监听
accept():接收请求
connect():请求连接建立
write():发送
read():接收
3.TCP协议的特性
建立连接:三次握手
将数据打包成段:校验和(CRC-32)
确认、重传以及超时:
排序:基于逻辑序号实现
流量控制:滑动窗口算法
拥塞控制:慢启动和拥塞避免算法
4.TCP FSM:TCP Finite State Machine ,有限状态机
CLOSED、LISTEN、SYN_SENT、SYN_RECV、ESTABLISHED、FIN_WAIT1、 CLOSE_WAIT、FIN_WAIT2、LAST_ACK、TIMEWAIT、CLOSED
二、HTTP协议
1.http: hyper text transfer protocol,超文本传输协议,应用层协议 80/tcp
C/S架构:浏览器 - 服务器 ,实现该协议的程序有httpd、nginx、lighttpd… ...
工作模式:一次http事务:请求<-->响应
http请求报文:http request
http响应报文: http response
2.http协议版本:
1) HTTP/0.9:原型版本只能传输文本文件,仅有get方法传输数据到客户端
2) HTTP/1.0:第一个广泛使用的版本,支持MIME机制、cache支持、method(请求方法)
MIME: Multipurpose Internet Mail Extesion多用途互联网邮件扩展,支持非文本编码传输后再解码还原
method:请求方法,GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS… ...
3) HTTP/1.1: 增强了缓存功能
4) HTTP/2.0:借鉴spdy对1.0多方面改进,大大提升性能
SPDY是Google开发的基于TCP的应用层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。
SPDY对HTTP协议的增强。新协议的功能包括数据流的多路复用、请求优先级以及HTTP报头压缩。
3.Web资源:web resource
静态资源(无须服务端做出额外处理): .jpg, .png, .gif, .html, txt, .js, .css, .mp3, .avi
动态资源(服务端需要通过执行程序做出处理,发送给客户端的是程序的运行结果): .php, .jsp
注意:一个页面中展示的资源可能有多个;每个资源都需要单独请求;
资源的标识机制:URL,Uniform Resource Locator:用于描述服务器某特定资源的位置;
Scheme://Server[:Port][/PATH/TO/SOME_RESOURCE]-------> 协议://服务[:端口]/资源路径
没有给资源路径打开的是默认页面,即主页,http默认端口为80
4.并发访问响应模型(Web I/O):
单进程I/O结构:启动一个进程处理用户请求,而且一次只处理一个;多个请求被串行响应;
多进程I/O结构:并行启动多个进程,每个进程响应一个请求;
复用I/O结构:一个进程响应n个请求;
多线程模型:一个进程生成N个线程,每个线程响应一个用户请求;对于Linux而言进程和线程响应量级相似
事件驱动:event-driven,一个进程直接响应N个请求
复用的多进程I/O结构:启动多个(m)进程,每个进程响应n个请求;响应的请求数量m*n
5.一次完整的http请求处理过程
(1)建立或处理连接:接收请求或拒绝请求
(2)接收请求:接收来自于网络上的主机请求报文中对某特定资源的一次请求的过程;
(3)处理请求:分析请求报文的http请求报文首部进行解析,获取客户端请求的资源及请求方法等相关信息
请求报文首部的格式:
<method> <URL> <VERSION>
HEADERS: (name: value)
<request body>
(4)访问资源:获取请求报文中请求的资源,默认在/var/www/html/路径下
web服务器(存放了web资源的主机)负责向请求者提供对方请求的静态资源,或动态资源运行生成的结果;
DocRoot:这些资源通常应该放置于本地文件系统某路径下;此路径称为;
web服务器资源路径映射方式:
(a) docroot路径映射
(b) alias别名
(c) 虚拟主机docroot
(d) 用户家目录docroot
(5)构建响应报文
(6)发送响应报文
(7)记录日志
三、httpd服务器程序
1.httpd: apache 纯粹的静态服务器
版本:1.3、2.0、2.2 、2.4。CentOS 6 默认2.2、CentOS 7 默认2.4
a patchy server (一个充满补丁的服务器)= apache
ASF: apache software foundation(Apache软件基金会)最早的项目,官方网站:httpd.apache.org
2.httpd特性
(1)高度模块化:core + modules
(2)DSO: Dynamic Shared Object,动态共享模块
(3)MPM:Multipath-Processing Modules,多路处理模块
a) prefork:多进程模型,每个进程响应一个请求
一个主进程:负责生成子进程及回收子进程;负责创建套接字;负责接收请求,并将其派发给某子进程处理;
n个子进程:每个子进程处理一个请求;
工作模型:会预先生成几个空闲进程,随时等待用于响应用户请求;最大空闲和最小空闲;
b) worker:多进程多线程模型,每线程处理一个用户请求
一个主进程:负责生成子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理;
多个子进程:每个子进程负责生成多个线程;
每个线程:负责响应用户请求;
并发响应数量:m*n(m:子进程数量、n:每个子进程所能创建的最大线程数量)
c) event:事件驱动模型,多进程模型,每个进程响应多个请求
一个主进程 :负责生成子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理;
子进程:基于事件驱动机制直接响应多个请求;
注意:httpd-2.2: event为测试使用模型;httpd-2.4event可生产环境中使用;
3.httpd的功能特性:
支持虚拟主机:IP、Port、FQDN
支持CGI:Common Gateway Interface,通用网关接口;
支持反向代理
支持负载均衡
支持路径别名
具有丰富的用户认证机制:basic基本认证、digest摘要认证
支持第三方模块
本文出自 “许鼎的博客” 博客,请务必保留此出处http://xuding.blog.51cto.com/4890434/1733964
转载于:https://blog.51cto.com/lucifer119/1734193