一、HTTP协议
1、HTTP相关技术
1.1web开发语言
http:Hyper Test Transfer Protocol应用层协议,默认端口:80/tcp
Web前端开发语言:
html:
Hyper Text Markup Language 超文本标记语言,编程语言,主要负责实现页面的结构
css:
Cascading Style Sheet 层叠样式表, 定义了如何显示(装扮) HTML 元素,比如:字体大小和颜色属性等。样式通常保存在外部的 .css 文件中,用于存放一些HTML文件的公共属性,从而通过仅编辑一个简单的 CSS 文档,可以同时改变站点中所有页面的布局和外观。
javascript:
实现网页的动画效果,但实属于静态资源
1.2MIME
MIME :
Multipurpose Internet Mail Extensions 多用途互联网邮件扩展
文件 /etc/mime.types ,来自于mailcap包
MIME格式:
type/subtype 主要类型/次要类型
1.3 URI(i) 和 URL uri
URI: Uniform Resource Identifier 统一资源标识,分为URL 和 URN
-
URN:Uniform Resource Naming,统一资源命名
示例: P2P下载使用的磁力链接是URN的一种实现magnet:?xt=urn:btih:660557A6890EF888666(只是描述了资源的名字,并没有明确该资源在哪里)
-
URL:Uniform Resorce Locator,统一资源定位符,用于描述某服务器某特定资源位置
两者区别:
-
URN如同一个人的名称,而URL代表一个人的住址。换言之,URN定义某事物的身份,而URL提供查找该事物的方法。URN仅用于命名,而不指定地URL组成
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
scheme:方案,访问服务器以获取资源时要使用哪种协议
user:用户,某些方案访问资源时需要的用户名
password:密码,用户对应的密码,中间用:分隔
Host:主机,资源宿主服务器的主机名或IP地址
port:端口,资源宿主服务器正在监听的端口号,很多方案有默认端口号
path:路径,服务器资源的本地名,由一个/将其与前面的URL组件分隔
params:参数,指定输入的参数,参数为名/值对,多个参数,用;分隔
query:查询,传递参数给程序,如数据库,用?分隔,多个查询用&分隔
frag:片段,一小片或一部分资源的名字,此组件在客户端使用,用#分隔
2、HTTP工作机制
一次http事务包括:
-
http请求:http request
-
http响应:http response
Web资源:web resource, 一个网页由多个资源(文件)构成,打开一个页面,通常会有多个资源展示出来,但是每个资源都要单独请求。因此,一个"Web 页面”通常并不是单个资源,而是一组资源的集合
资源类型:
-
静态文件:无需服务端做出额外处理,服务器端和客户端的文件内容相同
常见文件后缀:.html, .txt, .jpg, .js, .css, .mp3, .avi
-
动态文件:服务端执行程序,返回执行的结果,服务器端和客户端的文件内容不相同
常见文件后缀:.php, .jsp ,.asp
提高HTTP连接性能
-
并行连接:通过多条TCP连接发起并发的HTTP请求
-
持久连接:keep-alive,重用TCP连接,以消除连接和关闭的时延,以事务个数和时间来决定是否关闭连接
-
管道化连接:通过共享TCP连接,发起并发的HTTP请求
-
复用的连接:交替传送请求和响应报文(实验阶段)
3、HTTP协议版本
主要介绍http/0.9版本、http/1.0版本以及http/1.1版本的区别
版本 区别
http/0.9 只有个GET命令,即下载命令
http/1.0 不仅有GET命令,还有POST命令,即上传命令
http/1.1 除了1.0版本有的,还支持长连接
长连接(持久连接):一次三次握手,多次四次挥手。简单理解就是,建立一个进程,可以有多次请求,用完继续使用,绿色又环保;但是可以设置默认超时时间,一般默认超时时间是15秒。、
注:0.9 只能下载
1.0 可以上传也可以下载
1.1支持长连接
4、http请求访问的完整过程
1、建立连接
2、接收请求
3、处理请求
4、访问资源
5、构建响应报文
6、发送响应报文
7、记录日志
5、http协议状态码分类
1xx:100-101 信息提示
2xx:200-206 成功
3xx:300-307 重定向
4xx:400-415 错误类信息,客户端错误
5xx:500-505 错误类信息,服务器端错误
常见的http协议状态码
200: 成功,请求数据通过响应报文的entity-body部分发送;OK
301: 请求的URL指向的资源已经被删除;但在响应报文中通过首部Location指明了资源现在所处的新位置;Moved Permanently
302: 响应报文Location指明资源临时新位置 Moved Temporarily
304: 客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此响应状态码通知客户端;Not Modified
307: 浏览器内部重定向
401: 需要输入账号和密码认证方能访问资源;Unauthorized
403: 请求被禁止;Forbidden
404: 服务器无法找到客户端请求的资源;Not Found(客户端的错误,如dns找不到网页,网址输入错误等)
500: 服务器内部错误;(大概率服务器宕机了)
502: 代理服务器从后端服务器收到了一条伪响应,如无法连接到网关;Bad Gateway
503: 服务不可用,临时服务器维护或过载,服务器无法处理请求,比如:php服务停止,无法处理php程序
504: 网关超时
6、http请求报文
方法:
-
HEAD: 获取报文首部,主要用于确认 URL 的有效性以及资源更新的日期时间等
-
GET: 获取资源 当前网络请求中,绝大部分使用的是 GET 方
-
POST: 传输实体主体 (比如传输 用户名密码)
-
PUT: 上传文件(比如写博客)
-
PATCH: 对资源进行部分修改
-
DELETE:删除文件
-
OPTIONS:查询支持的方法(查看服务端可以支持哪些方法)
-
CONNECT:要求在与代理服务器通信时建立隧道(类似加密)
-
TRACE:追踪路径
7、系统处理http请求的工作模式
工作模式有:prefork、worker、event
prefork:多进程I/O模型,每个进程响应一个请求。简单理解就是,来一个请求,开一个进程,来一个,开一个,很浪费系统资源。
worker:复用的多进程I/O模型,多进程多线程。有一个主进程,生成多个子进程,子进程生成多个线程,每个线程响应一个请求,并发送响应请求;每个请求完成后,不主动向父进程反馈自己已完成,得等到超时之后,才返回。
event:事件驱动模型(worker的变种),centeos8的默认模型。在worker模式的基础上,添加了一个监工线程,专门监视线程是否已完成响应,完成后,为其分配其他请求。
工作模式 | 优点 | 缺点 |
prefork | 稳定 | 速度慢,占用资源,不适用于高并发场景 |
worker | 相对于prefork占用内存较少,可以同时处理更多请求 | 使用keep-alive到长连接方式,某个线程会一直被占据,即使没有传输数据,也需要一直等待到超时才会被释放。如果过多的线程,被这样占据,也会导致在高并发场景下的无服务线程可用。 |
event | 单线程响应多请求,占据更少的内存,高并发下表现更优秀,会有一个专门的线程来管理keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。 | 没有线程安全控制 |
二、Apache介绍和特点
1、apache 功能:
-
提供http协议服务
-
多个虚拟主机:IP、Port、FQDN
-
CGI:Common Gateway Interface,通用网关接口,支持动态程序
-
反向代理
-
负载均衡
-
路径别名
-
丰富的用户认证机制:basic,digest
-
支持第三方模块
2、apache特性:
-
高度模块化:core + modules
-
DSO:Dynamic Shared Object 动态加载/卸载
-
MPM:multi-processing module 多路处理模块