路由传入请求

HTTP 服务器 API 维护路由数据库,以确定哪个应用程序接收传入请求。 路由表是从预留数据库生成的,包含预留条目和当前注册。 进行注册或预留时,会将其放入与主机类型对应的路由数据库存储桶中,如下所示:

  • + :端口注册放置在“强通配符”存储桶中

  • host:端口注册放置在“显式”存储桶中

  • IP:端口注册放置在“IP 绑定弱通配符”存储桶中

  • * :端口注册放置在“弱通配符”存储桶中

这些步骤还指处理传入的 HTTP 请求的顺序。 首先检查强通配符预留,然后检查显式预留,然后检查 IP 绑定的弱通配符和弱通配符。 找到匹配项时,搜索将停止,以便找不到任何剩余存储桶中的注册。

HTTP 服务器 API 路由算法通过搜索路由数据库的注册条目和预留项(从强通配符存储桶开始,以弱通配符存储桶结束)来查找 UrlPrefix 的最佳匹配项。 存储桶内的最佳匹配项是 UrlPrefix (相对 URI 部分中最长的匹配项,假设 URL) 的主机、端口和方案部分完全匹配。 在存储桶中找到匹配项后,路由算法将停止搜索并跳过所有优先级较低的存储桶。

例如,请考虑以下注册 (根据存储桶类型按优先级降序列出:

  • 注册: https://+:80/vroot/ 由应用程序 1 注册

  • 注册: https://adatum.com:80/ 由应用程序 2 注册

  • 注册: https://\*:80/ 由应用程序 3 注册

https://adatum.com:80/vroot/subdir/file.htm/ 传入请求将传递到应用程序 1。 的 传入请求 https://adatum.com:80/default.htm/ 将传递到应用程序 2。 的 https://otheradatum.com:80/file.htm/ 传入请求将传递到应用程序 3。

如果最佳匹配项是预留项,则表示应接收请求的应用程序未运行。 例如,请考虑以下注册和预留:

  • 注册: https://\*:80/vroot/ 由应用程序 1、用户 A 注册

  • 预留: https://adatum.com:80/ 已为用户 B 保留

传入的请求 https://adatum.com:80/vroot/file.htm/ 不会传递到应用程序 1,因为最佳匹配项会导致用户 B 的预留项。在这种情况下,优先规则将应用于优先级较高的预留。 如果没有任何进程处于活动状态且已授权并注册到收到的 URL 的服务请求,则请求将被拒绝,状态代码为 400, (错误的请求) 。