这篇文章给大家介绍Http Server API路由如何请求到web程序,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
目前成都创新互联已为上千多家的企业提供了网站建设、域名、虚拟空间、成都网站托管、企业网站设计、赵县网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
引言
容器内web程序一般会绑定到http://0.0.0.0:{某监听端口}
或http://+:{某监听端口}
,以确保使用容器IP可以访问到web应用。
正如我们在ASP.NET Core官方镜像显示的,ASP.NET Core程序在容器内80端口监听请求
UrlPrefix
这里涉及一个不为人知的概念:UrlPrefix
UrlPrefix是统一资源定位符Url的前缀部分:scheme://host:port/relativeURI
"https://www.adatum.com:80/vroot/" "https://adatum.com:443/secure/database/" "http://+:80/vroot/"
web程序启动后,根据监听地址UrlPrefix中的主机元素,会向系统组件Http Server API注册不同的路由桶,由Http Server API将接收的请求路由到合适的web程序。
容器内web程序监听http://+:80地址,+ 是强通配符,意味着web程序在容器(轻量级虚拟机)内以任意主机名监听80端口的请求。
监听地址UrlPrefix 中的主机元素有四种形态:
强通配符 ( + )
当主机元素是一个加号(+),UrlPrefix匹配所有可能的主机名
,这时的UrlPrefix属于强通配符类别。
强通配符在如下场景下有用:当web程序要忽略请求到达的方式或忽略请求host标头中指定的站点时,web服务器监听地址的主机元素可设置为强通配符+显式主机名
当主机元素是完全限定的域名,web服务器的主机元素直接与传入请求的host标头相匹配
, 明确的主机名对于多站点很有用,这些Web站点根据请求所指向的站点传递不同的内容。绑定IP的弱通配符
主机元素为IP地址,这种类型的UrlPrefix匹配尚未与以上强通配符或显式主机名匹配的任意IP地址主机名弱通配符 ( * )
当星号*作为主机元素出现时, 这种类型的UrlPrefix将会匹配尚未与以上强通配符、显式或IP绑定的弱通配符匹配的任意主机名, 此主机元素可以用作默认的catch-all,也可以用于指定URL名称空间的较大部分,而不必使用许多UrlPrefixes
Http Server API维护了一张路由表,
决定哪一个应用程序接收传入请求
,这张路由表是从预留数据库中构建的,当新产生一个注册项或预留项,将会被放进与特定主机元素
相关的路由桶
路由桶优先级
当多个web程序监听的UrlPrefix有重叠时,Http Server API会根据注册的1-->4路由桶依次匹配,路由桶中UrlPrefix的相对URI部分中最长的匹配(假设URL的主机,端口和方案部分完全匹配)是最佳匹配。在路由桶中找到匹配项后,路由算法将停止搜索并跳过所有优先级较低的存储桶。
例如下面的注册项:
注册项: https://+:80/vroot/ is registered by app1
注册项: https://adatum.com:80/ is registered by app2
注册项: https://*:80/ is registered by app3
对https://adatum.com:80/vroot/subdir/file.htm/的传入请求路由给 app1,
对https://adatum.com:80/default.htm/的传入请求路由给 app2,
对https://otheradatum.com:80/file.htm/的传入请求路由给 app3
HTTP Sever API 提供了 将请求路由到web程序
的机制应用程序监听地址UrlPrefix的主机元素决定了路由策略,其中 +强通配符
表示忽略请求主机名和请求的方式,可以认为是囫囵吞枣的接收满足(scheme、port、relativeUrl)的请求。多个web程序监听的UrlPrefix有重叠时,Http Server API根据host元素形成的路由桶有优先级
关于Http Server API路由如何请求到web程序就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
网站栏目:HttpServerAPI路由如何请求到web程序
文章地址:http://lswzjz.com/article/gjeohi.html