- gPRC 介绍
- gPRC 介绍 - 资料收集整理
- gPRC 介绍 - Protocol Buffer 3
- gPRC文档
- gPRC文档 - gRPC官方文档(中文版)
- gPRC文档 - gRPC动机和设计原则
- gPRC文档 - 源码导航
- 基础 - NameResolver
- NameResolver - URI术语
- NameResolver - 类NameResolver
- NameResolver - 类DnsNameResolver
- NameResolver - 类DirectAddressNameResolver
- NameResolver - NameResolver的用法
- 基础 - Metadata
- Channel层
- Channel设计与代码实现 - 类Channel
- Channel设计与代码实现 - 类ManagedChannel
- 类ManagedChannelImpl - 空闲模式
- 类ManagedChannelImpl - InUseStateAggregator
- 类ManagedChannelImpl - Name Resolver
- 类ManagedChannelImpl - Load Balancer
- 类ManagedChannelImpl - Transport
- 类ManagedChannelImpl - Executor
- 类ManagedChannelImpl - 关闭
- Channel层 - Channel Builder设计与代码实现
- Channel Builder设计与代码实现 - 类ManagedChannelBuilder
- Channel Builder设计与代码实现 - 类AbstractManagedChannelImplBuilder
- Channel Builder设计与代码实现 - 类NettyChannelBuilder
- Channel层 - Channel Provider设计与代码实现
- Channel Provider设计与代码实现 - 类ManagedChannelProvider
- Channel Provider设计与代码实现 - 类NettyChannelProvider
- Channel层 - 类CallOptions
- Stub层 - 类DemoServiceBlockingStub
- Stub层 - 类AbstractStub
- 客户端流程
- 状态 - 类Status
- 状态 - 状态码详细定义
- 状态 - 类StatusException
- 状态 - 异常处理的流程分析
- 实践 - 集成Spring Boot
- 实践 - 文档生成
- 文档生成 - 支持proto3
- 文档生成 - build插件
- 文档生成 - 使用模板定制输出
- 实践 - 代理
- 实践 - 超时
NameResolver - URI术语
注: 后面大量章节涉及到
URI
标准中的诸多术语,为了概念清晰,单独开一章来介绍。
URI的语法
通用 URI 和绝对 URI 的语法参考最初定义在 RFC 2396,发布于1998年,并定稿于 RFC 3986, 发布于 2005年。
通用 URI 的形式如下:
scheme:[//[user:password@]host[:port]][/]path[?query][#fragment]
它包括:
scheme
由一系列字符组成,以字母开头,跟着有字母,数字,加号(+),点号(.)或者中划线(-)的任何组合。
虽然 scheme 是大小写不敏感,但是权威形式是小写并注明特定 scheme 必须也同样是小写。后面跟一个冒号(:)。流行的 scheme 例子包括
http
,ftp
,mailto
,file
, 和data
。URI scheme 应该在 Internet Assigned Numbers Authority (IANA) 注册,虽然不注册的 scheme 实际也在使用。双斜杠(//)
某些 scheme 要求有这个, 而有些 scheme 不要求。当 authority 部分缺失时, path 部分不能以双斜杠开始。
authority部分
包括:
- 可选的认证部分,有用户名和密码,冒号分隔,带一个@符号
- host,包括一个被注册名字(包括但是不限于hostname),或者 IP 地址。IPv4 地址必须以点号分割的形式,而 IPv6 地址必须加[]符号。
- 可选的端口号,和hostname之间用冒号分隔。
路径
包含数据,通常以层次形式组织,表现为一系列斜杠分隔的部分。这样一个序列可能类似或者映射到文件系统路径,但是并不暗示一定和某个路径有关系。如果有 authortity 部分,则路径必须以单斜杠开始,
可选的query
和之前的部分以问号(?)分隔,包含非层次数据的 query string 。它的语法没有很好的定义,但是习惯上通常是一系列的属性值对,以分隔符分隔。
可选的fragment/片段*
和之前的部分以#分隔。fragment 包括一个 fragment identifier / 片段标识,提供到间接资源的引导,就像文章中的章节头,通过URI的剩余部分定位。当首要资源是 HTML 文档时,fragment 通常是一个特别原始的 id 属性,而web浏览器将滚动这个元素到视野中。
例子
下面的图片展示了两种URI的例子,和他们的组成部分。
hierarchical part
┌───────────────────┴─────────────────────┐
authority path
┌───────────────┴───────────────┐┌───┴────┐
abc://username:password@example.com:123/path/data?key=value&key2=value2#fragid1
└┬┘ └───────┬───────┘ └────┬────┘ └┬┘ └─────────┬─────────┘ └──┬──┘
scheme user information host port query fragment
urn:example:mammal:monotreme:echidna
└┬┘ └──────────────┬───────────────┘
scheme path
特别强调
authority代表URI中的 [userinfo@]host[:port],包括host(或者ip)和可选的port和userinfo。
这个术语平时用的不多,但是在gRPC中频繁出现,请牢记:authority 代表 username:password@example.com:123
这一段。
参考资料
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论