一, 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:Password@]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 服务器的资源路径的映射方式:
- )DocumentRoot
- )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://www.bubuko.com/infodetail-2566189.html