HTTP协议
HTTP协议是什么
HTTP:超文本传输协议(Hypertext Transfer Protocal)
为什么需要协议
需要明确的边界
- 开始
- 结束
能够携带信息
- 什么消息
- 消息类型
协议里面有什么
-
请求行/状态行
请求行:包含方法名、URL、协议版本
常见的方法名: 1.GET 2.HEAD 3.POST 4.PUT 5.DELETE 6.CONNECT 7.OPTIONS 8.TRACE 9.PATCH状态行:包含协议版本、状态码、状态码描述
状态码: 1.xx:信息类 2.xx:成功 3.xx:重定向 4.xx:客户端错误 5.xx:服务端错误 -
请求头/响应头
请求头和响应头都包含协议约定和业务相关
-
请求体/响应体
请求过程
一次完整的 Http 请求过程:
1、使用DNS域名解析;
2、发起TCP的3次握手
3、建立TCP连接后发起http请求;
4、服务器响应http请求,浏览器得到返回response;
5、浏览器解析response,并请求其它的资源(如js、css、图片等);
6、浏览器对页面进行渲染。
不足与展望
- HTTP1
- 队头阻塞
- 传输效率低
- 明文传输不安全
- HTTP2
- 多路复用
- 头部压缩
- 二进制协议
- QUIC
- 基于UDP实现
- 解决队头阻塞
- 加密减少握手次数
- 支持快速启动
HTTP 框架的设计
分层设计
分层设计的好处:
专注性:计算机网络中的协议使用了分层设计。分层设计可以简化系统设计,让不同的人专注做某一层次的事情
扩展性:分层架构可以让我们更容易做横向扩展
复用性:分层之后可以做到很高的复用
进行分层设计时,还要考虑高内聚、低耦合、易复用、高扩展性等
HTTP 架构从上往下总共分为了五层:
应用层设计(Application)
提供合理的API:
- 可理解性
- 简单性
- 冗余性
- 兼容性
- 可测性
- 可见性
中间件设计(middleware)
中间件需求:
- 配合 Handler 实现一个完整的请求处理生命周期
- 拥有预处理逻辑与后处理逻辑
- 可以注册多中间件
- 对上层模块用户逻辑模块易用
路由设计(route)
框架路由实际上就是为 URL 匹配对应的处理函数(Handlers)
- 静态路由:/a/b/c、/a/b/d
- 参数路由:/a/:id/c (/a/b/c,/a/d/c)、/*all
- 路由修复:/a/b <——> /a/b/
- 冲突路由以及优先级:/a/b、/:id/c
- 匹配 HTTP 方法
- 多处理函数:方便添加中间件
- ...
协议层设计(codec)
抽象出合适的接口
网络层设计(transport)
不同的网络库使用的场景并不相同
总结
以上就是对HTTP协议的部分总结。了解HTTP协议的工作过程,HTTP的请求和响应格式以及HTTP框架的设计。