以下页面描述网关的预期行为。开源版本与企业版本正在拆分中,首个正式版本发布后细节会同步更新。
透明转发
网关究竟保留了什么,以及它从不触碰什么。
转发路径只有一件事要做:把字节从客户端搬到 provider,再把响应搬回来,中途不改动它们。
保留的内容
网关不会为了改写而解析请求体。以下内容原封不动地到达 provider:
- 请求体,按字节
- Header 顺序与大小写
- 查询串,包括参数顺序
- 流式分块边界
- 提示词前缀,因此 provider 侧的提示缓存保持有效
网关会做的事(一份封闭清单)
| 改动 | 原因 |
|---|---|
| 添加一个凭据 Header(或一段签名) | 向 provider 认证 |
Host |
请求是发给 provider 的,不是发给网关的 |
| 丢弃 hop-by-hop Header | HTTP/1.1 与 HTTP/2 的要求 |
注入 traceparent(开启追踪时) |
W3C 追踪上下文传递 |
除此之外,不增加、不删除、不重排任何内容。
只读取、不修改的部分
路由需要几个事实才能选出目标。这些事实从请求的副本中读取,绝不写回:
- 匹配到的路由,用于确定哪个 provider 可以服务该路径
- 模型名,当路由声明了它出现在哪里时
- 已认证的身份,用于限流与归属统计
为了计量而读取,不等于改写。 转发出去的字节就是收到的字节。
路由如何匹配
请求会与各 provider 声明的路由逐一比对。一条路由是「方法 + 路径模式」,当 provider 把可变部分 放在路径里时,可以使用正则。
没有匹配到任何路由的请求,会在发起任何上游调用之前以 404 拒绝。