HTTP 框架修炼之道 | 青训营笔记

54 阅读2分钟

image.png

HTTP协议

HTTP协议是什么

HTTP:超文本传输协议(Hypertext Transfer Protocal)

为什么需要协议

需要明确的边界

  • 开始
  • 结束

能够携带信息

  • 什么消息
  • 消息类型

协议里面有什么

  1. 请求行/状态行

    请求行:包含方法名、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:服务端错误
    
  2. 请求头/响应头

    请求头和响应头都包含协议约定和业务相关

  3. 请求体/响应体

请求过程

一次完整的 Http 请求过程:

1、使用DNS域名解析;

2、发起TCP的3次握手

3、建立TCP连接后发起http请求;

4、服务器响应http请求,浏览器得到返回response;

5、浏览器解析response,并请求其它的资源(如js、css、图片等);

6、浏览器对页面进行渲染。

不足与展望

  1. HTTP1
  • 队头阻塞
  • 传输效率低
  • 明文传输不安全
  1. HTTP2
  • 多路复用
  • 头部压缩
  • 二进制协议
  1. QUIC
  • 基于UDP实现
  • 解决队头阻塞
  • 加密减少握手次数
  • 支持快速启动

HTTP 框架的设计

分层设计

分层设计的好处:

专注性:计算机网络中的协议使用了分层设计。分层设计可以简化系统设计,让不同的人专注做某一层次的事情

扩展性:分层架构可以让我们更容易做横向扩展

复用性:分层之后可以做到很高的复用

image.png

进行分层设计时,还要考虑高内聚、低耦合、易复用、高扩展性等

image.png

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框架的设计。