99re热视频这里只精品,久久久天堂国产精品女人,国产av一区二区三区,久久久精品成人免费看片,99久久精品免费看国产一区二区三区

ASP.NET Core 中的 Web 服務器實現(xiàn)

2019-04-17 08:58 更新

ASP.NET Core 應用與進程內(nèi) HTTP 服務器實現(xiàn)一起運行。 該服務器實現(xiàn)偵聽 HTTP 請求,并以組成 HttpContext 的請求功能集形式,將它們呈現(xiàn)給應用。

ASP.NET Core 隨附以下組件:

使用 IIS 或 IIS Express 時,應用會在以下其中一個進程中運行:

ASP.NET Core 模塊是本機 IIS 模塊,用于處理 IIS 和進程內(nèi) IIS HTTP 服務器或 Kestrel 之間的本機 IIS 請求。 有關更多信息,請參見ASP.NET Core 模塊。

托管模型

進程內(nèi)托管模型

使用進程內(nèi)托管,ASP.NET Core 在與其 IIS 工作進程相同的進程中運行。 進程內(nèi)承載相較進程外承載提供更優(yōu)的性能,因為請求并不通過環(huán)回適配器進行代理,環(huán)回適配器是一個網(wǎng)絡接口,用于將傳出的網(wǎng)絡流量返回給同一計算機。 IIS 使用 Windows 進程激活服務 (WAS) 處理進程管理。

ASP.NET Core 模塊:

  • 執(zhí)行應用初始化。
    • 加載 CoreCLR。
    • 調(diào)用 Program.Main。
  • 處理 IIS 本機請求的生存期。

定目標到 .NET Framework 的 ASP.NET Core 應用不支持進程內(nèi)托管模型。

下圖說明了 IIS、ASP.NET Core 模塊和進程內(nèi)托管的應用之間的關系:

ASP.NET Core 模塊

請求從 Web 到達內(nèi)核模式 HTTP.sys 驅(qū)動程序。 驅(qū)動程序?qū)⒈緳C請求路由到網(wǎng)站的配置端口上的 IIS,通常為 80 (HTTP) 或 443 (HTTPS)。 該模塊接收本機請求,并將它傳遞給 IIS HTTP 服務器 (IISHttpServer)。 IIS HTTP 服務器是將請求從本機轉(zhuǎn)換為托管的 IIS 進程內(nèi)服務器實現(xiàn)。

IIS HTTP 服務器處理請求之后,請求會被推送到 ASP.NET Core 中間件管道中。 中間件管道處理該請求并將其作為 HttpContext 實例傳遞給應用的邏輯。 應用的響應通過 IIS HTTP 服務器傳遞回 IIS。 IIS 將響應發(fā)送到發(fā)起請求的客戶端。

進程內(nèi)托管選擇使用現(xiàn)有應用,但 dotnet new 模板默認使用所有 IIS 和 IIS Express 方案的進程內(nèi)托管模型。

進程外托管模型

由于 ASP.NET Core 應用在獨立于 IIS 工作進程的進程中運行,因此該模塊會處理進程管理。 該模塊在第一個請求到達時啟動 ASP.NET Core 應用的進程,并在應用關閉或崩潰時重新啟動該應用。 這基本上與在 Windows 進程激活服務 (WAS) 托管的進程內(nèi)運行的應用中出現(xiàn)的行為相同。

下圖說明了 IIS、ASP.NET Core 模塊和進程外托管的應用之間的關系:

ASP.NET Core 模塊

請求從 Web 到達內(nèi)核模式 HTTP.sys 驅(qū)動程序。 驅(qū)動程序?qū)⒄埱舐酚傻骄W(wǎng)站的配置端口上的 IIS,通常為 80 (HTTP) 或 443 (HTTPS)。 該模塊將該請求轉(zhuǎn)發(fā)到應用的隨機端口(非端口 80/443)上的 Kestrel。

該模塊在啟動時通過環(huán)境變量指定端口,IIS 集成中間件將服務器配置為偵聽 http://localhost:{PORT}。 執(zhí)行其他檢查,拒絕不是來自該模塊的請求。 該模塊不支持 HTTPS 轉(zhuǎn)發(fā),因此即使請求由 IIS 通過 HTTPS 接收,它們還是通過 HTTP 轉(zhuǎn)發(fā)。

Kestrel 從模塊獲取請求后,請求會被推送到 ASP.NET Core 中間件管道中。 中間件管道處理該請求并將其作為 HttpContext 實例傳遞給應用的邏輯。 IIS 集成添加的中間件會將方案、遠程 IP 和 pathbase 更新到帳戶以將請求轉(zhuǎn)發(fā)到 Kestrel。 應用的響應傳遞回 IIS,IIS 將響應推送回發(fā)起請求的 HTTP 客戶端。

有關 IIS 和 ASP.NET Core 模塊的配置指南,請參閱以下主題:

Kestrel

Kestrel 是 ASP.NET Core 項目模板中包括的默認 Web 服務器。

Kestrel 的使用方式如下:

  • 本身作為邊緣服務器,處理直接來自網(wǎng)絡(包括 Internet)的請求。Kestrel 直接與 Internet 通信,不使用反向代理服務器
  • 與反向代理服務器(如 Internet Information Services (IIS)Nginx 或 Apache)結(jié)合使用。 反向代理服務器接收來自 Internet 的 HTTP 請求,并將這些請求轉(zhuǎn)發(fā)到 Kestrel。Kestrel 通過反向代理服務器(如 IIS、Nginx 或 Apache)間接與 Internet 進行通信

使用或不使用反向代理服務器對 ASP.NET Core 2.1 或更高版本的應用來說都是受支持的托管配置。

有關 Kestrel 配置指南和何時在反向代理配置中使用 Kestrel 的信息,請參閱 ASP.NET Core 中的 Kestrel Web 服務器實現(xiàn)。

Nginx 與 Kestrel

若要了解如何在 Linux 上使用 Nginx 作為 Kestrel 的反向代理服務器,請參閱 使用 Nginx 在 Linux 上托管 ASP.NET Core

Apache 與 Kestrel

若要了解如何在 Linux 上使用 Apache 作為 Kestrel 的反向代理服務器,請參閱 使用 Apache 在 Linux 上托管 ASP.NET Core。

IIS HTTP 服務器

IIS HTTP 服務器是 IIS 的進程內(nèi)服務器且為進程內(nèi)部署所必需。 ASP.NET Core 模塊用于處理 IIS 和 IIS HTTP 服務器之間的本機 IIS 請求。 有關更多信息,請參見ASP.NET Core 模塊

HTTP.sys

如果 ASP.NET Core 應用在 Windows 上運行,則 HTTP.sys 是 Kestrel 的替代選項。 為了獲得最佳性能,通常建議使用 Kestrel。 在應用向 Internet 公開且所需功能受 HTTP.sys(而不是 Kestrel)支持的方案中,可以使用 HTTP.sys。 有關更多信息,請參見ASP.NET Core 中的 HTTP.sys Web 服務器實現(xiàn)。

HTTP.sys 直接與 Internet 進行通信

對于僅向內(nèi)部網(wǎng)絡公開的應用,HTTP.sys 同樣適用。

HTTP.sys 直接與內(nèi)部網(wǎng)絡進行通信

有關 HTTP.sys 的配置指南,請參閱 ASP.NET Core 中的 HTTP.sys Web 服務器實現(xiàn)。

ASP.NET Core 服務器基礎結(jié)構

Startup.Configure 方法中提供的 IApplicationBuilder 公開了類型 IFeatureCollection 的 ServerFeatures 屬性。 Kestrel 和 HTTP.sys 各自僅公開單個功能,即 IServerAddressesFeature,但是不同的服務器實現(xiàn)可能公開其他功能。

IServerAddressesFeature 可用于查找服務器實現(xiàn)在運行時綁定的端口。

自定義服務器

如果內(nèi)置服務器無法滿足應用需求,可以創(chuàng)建一個自定義服務器實現(xiàn)。 .NET 的開放 Web 接口 (OWIN) 指南 演示了如何編寫基于 Nowin 的 IServer 實現(xiàn)。 只有應用使用的功能接口需要實現(xiàn),但至少必須支持 IHttpRequestFeature 和 IHttpResponseFeature。

服務器啟動

集成開發(fā)環(huán)境 (IDE) 或編輯器啟動以下應用時,會啟動服務器:

從項目文件夾中的命令提示符啟動應用時,dotnet run 會啟動該應用和服務器(僅 Kestrel 和 HTTP.sys)。 可通過 -c|--configuration 選項指定此配置,該選項設置為 Debug(默認值)或 Release。 如果啟動配置文件位于 launchSettings.json 文件中,請使用 --launch-profile <NAME> 選項設置啟動配置文件(例如 Development 或 Production)。 有關詳細信息,請參閱 dotnet run 和 .NET Core 分發(fā)打包。

HTTP/2 支持

以下部署方案中的 ASP.NET Core 支持 HTTP/2

  • Kestrel操作系統(tǒng)Windows Server 2016/Windows 10 或更高版本?具有 OpenSSL 1.0.2 或更高版本的 Linux(例如,Ubuntu 16.04 或更高版本)macOS 的未來版本將支持 HTTP/2。目標框架:.NET Core 2.2 或更高版本
  • HTTP.sysWindows Server 2016/Windows 10 或更高版本目標框架:不適用于 HTTP.sys 部署。
  • IIS(進程內(nèi))Windows Server 2016/Windows 10 或更高版本;IIS 10 或更高版本目標框架:.NET Core 2.2 或更高版本
  • IIS(進程外)Windows Server 2016/Windows 10 或更高版本;IIS 10 或更高版本面向公眾的邊緣服務器連接使用 HTTP/2,但與 Kestrel 的反向代理連接使用 HTTP/1.1。目標框架:不適用于 IIS 進程外部署。

?Kestrel 在 Windows Server 2012 R2 和 Windows 8.1 上對 HTTP/2 的支持有限。 支持受限是因為可在這些操作系統(tǒng)上使用的受支持 TLS 密碼套件列表有限。 可能需要使用橢圓曲線數(shù)字簽名算法 (ECDSA) 生成的證書來保護 TLS 連接。

HTTP/2 連接必須使用應用程序?qū)訁f(xié)議協(xié)商 (ALPN) 和 TLS 1.2 或更高版本。 有關詳細信息,請參閱與服務器部署方案相關的主題。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號