这是我参与「第三届青训营 -后端场」笔记创作活动的的第4篇笔记
基础概念
URL参数
:name 称为命名参数,位于URL中间可以用于匹配单个路径段
*name 称为通配参数,可以匹配任意路径段,放在URL的最后
路由修复: 如果只注册了 /a/b,但是访问的 URI 是 /a/b/,那可以提供自动重定向到 /a/b 能力;同样,如果只注册了 /a/b/,但是访问的 URI 是 /a/b,那可以提供自动重定向到 /a/b/ 能力
冲突路由:同时注册 /a/b 和 /:id/b,并设定优先级。比如:当请求 URI 为 /a/b 时,优先匹配静态路由 /a/b
分层架构
一个POST请求需要经过哪些层
业务层、服务治理层/中间件层、路由层、编解码层、传输层
API设计的注意点
可理解性、简单性、可见性、兼容性
中间件层的作用
配合Handlers实现一个完整的请求的处理周期
拥有预处理逻辑和后处理逻辑
可以注册更多的中间件
对上层模块用户逻辑模块易用
洋葱模型
收到一个请求后通过日志中间件、metrix中间件、...一系列请求前中间件处理后在到达请求的义务逻辑处理,处理完后成在经过metrix中间件、日志中间件等一系列后处理中间件。
怎样知道HTTP的报文长度
HTTP报文会通过/r/n进行区分头部和body, 因此只需要找到/n就能够进行匹配
- 怎样知道HTTP报文长度
- 服务器能够清楚的知道请求内容的大小,可以通过消息首部字段 Content- Length 来告诉客户端需要接收多少数据,但是如果服务器预先不知道请求内容的大小,例如加载动态页面的时候,就需要使用 Transfer-Encoding: chunked 的方式来代替 Content-Length。
- 分块传输编码(Chunked transfer encoding)是 HTTP/1.1 中引入的一种数据传输机制,其允许 HTTP 由服务器发送给客户端的数据可以分成多个部分,当数据分解成一系列数据块发送时,服务器就可以发送数据而不需要预先知道发送内容的总大小,每一个分块包含十六进制的长度值和数据,最后一个分块长度值为0,表示实体结束,客户机可以以此为标志确认数据已经接收完毕。