作者:Steve Smith
翻譯:謝煬(kiler398)
校對:姚阿勇(Dr.Yao)、孟帥洋(書緣)
涉及到如何處理 HTTP 請求以及響應的獨立 Web 服務器功能已經被分解成獨立的接口,這些抽象被獨立的服務器實現和中間件用於創建和修改應用程序的托管管道。
章節:
功能接口
ASP.NET Core 定義了許多 HTTP 功能接口,給服務器用來判斷支持哪些功能。Web 服務器最基礎功能就是處理請求並返回響應,下面是實現這個功能所涉及的接口:
IHttpRequestFeature
定義HTTP請求的結構,包括協議、路徑、查詢字符串、請求頭以及正文。
IHttpResponseFeature
定義HTTP響應的結構,包括狀態碼、響應頭以及響應正文。
IHttpAuthenticationFeature
定義對基於 ClaimsPrincipal
識別用戶的支持以及指定驗證處理程序。
IHttpUpgradeFeature
定義對 HTTP 升級 的支持, 允許客戶端在服務器希望切換協議的時候指定自己想要使用的協議。
IHttpBufferingFeature
定義用於禁用請求和/或響應的緩沖的方法。
IHttpConnectionFeature
定義本地和遠程地址以及端口的屬性。
IHttpRequestLifetimeFeature
定義支持中止連接,或者對請求提前終止的檢測,比如客戶斷開連接等原因。
IHttpSendFileFeature
定義一個異步發送文件的方法。
IHttpWebSocketFeature
定義一個支持 Web Sockets 的 API。
IHttpRequestIdentifierFeature
添加一個可以實現唯一標識請求的屬性。
ISessionFeature
定義 ISessionFactory
和 ISession
抽象接口以支持用戶會話。
ITlsConnectionFeature
定義一個檢索客戶端證書的 API。
ITlsTokenBindingFeature
定義用來處理 TLS token 綁定參數的方法。
注意
ISessionFeature 不是一個服務器功能,而是由 SessionMiddleware 實現的 (見 Managing Application State)。
功能集合
Features 的 HttpContext 屬性提供了一個接口用於獲取和設置當前請求可用的 HTTP 功能。由於功能集合在請求上下文中都是可變的,那么中間件也可以用來修改集合以及添加對額外的功能支持。
中間件和請求特性
雖然服務器是負責創建功能集合的,但中間件既可以給集合添加功能也可以從中取用功能。例如,靜態文件中間件 IHttpSendFileFeature 就會使用文件發送功能 IHttpSendFileFeature 。如果該功能存在,則用它把請求的物理路徑中的靜態文件發送出去,否則,會采用一個比較慢的發送文件的備用方法。當功能可用的時候,IHttpSendFileFeature
允許操作系統打開文件,並且直接執行內核模式拷貝到網卡。
此外,中間件可以添加到由服務器建立的功能集合里面。中間件甚至可以取代現有的功能,允許中間件增加服務器的功能。添加到集合中的功能對請求管道中靠后面的其他中間件或者基礎應用程序本身會立即生效。
通過結合自定義的服務器實現和特定的中間件增強,可以構造出應用程序所需的精煉的功能集合。這使得無需改動服務器就可以添加缺失的功能,並確保只有最小數量的功能被公開,從而減少攻擊面並提供性能。
總結
功能接口定義給定請求可能支持的特殊功能。服務器定義功能集合,以及該服務器所支持功能的初始集,而中間件則可用來增強這些功能。