日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Http Server API路由请求到web程序

發布時間:2023/12/4 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Http Server API路由请求到web程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引言

接上文,容器內web程序一般會綁定到http://0.0.0.0:{某監聽端口}或http://+:{某監聽端口},以確保使用容器IP可以訪問到web應用。

正如我們在ASP.NET Core官方鏡像顯示的,ASP.NET Core程序在容器內80端口監聽請求

This image sets the ASPNETCORE_URLS environment variable to http://+:80 which means that if you have not explicity set a URL in your application, via app.UseUrl in your Program.cs for example, then your application will be listening on port 80 inside the container.

http://+:80是什么鬼?請求為什么會被路由到監聽http://+:80地址的web服務器?

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元素形成的路由桶有優先級

    這應該是一篇很冷門的知識點,但是結合我們的實際和理論,相信能給讀者的知識結構添磚加瓦。

    • https://docs.microsoft.com/zh-cn/windows/win32/http/urlprefix-strings?redirectedfrom=MSDN

    • https://docs.microsoft.com/en-us/windows/win32/http/routing-incoming-requests

    • https://stackoverflow.com/questions/7007929/what-does-a-plus-sign-mean-in-a-http-url-http-80

    推薦閱讀

    ●?這么香的Chrome插件,你都安裝了嗎?

    ●?一文掌握Cookies前世今生

    ●?ASP.NET Core跨平臺技術內幕

    ●?TPL Dataflow組件應對高并發,低延遲要求

    ●?實例解讀Docker Swarm

    ●?基于docker-compose的Gitlab CI/CD實踐&排坑指南

    總結

    以上是生活随笔為你收集整理的Http Server API路由请求到web程序的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。