事件
ASP.NET Core 中的網頁伺服器實作
注意
這不是這篇文章的最新版本。 如需目前的版本,請參閱 本文的 .NET 9 版本。
警告
不再支援此版本的 ASP.NET Core。 如需詳細資訊,請參閱 .NET 和 .NET Core 支持原則。 如需目前的版本,請參閱 本文的 .NET 9 版本。
由 Tom Dykstra、Steve Smith、Stephen Halter 和 Chris Ross 提供
ASP.NET Core 應用程式執行時,需使用內含式 HTTP 伺服器實作。 伺服器實作會接聽 HTTP 要求,並以組成 的一組HttpContext形式向應用程式呈現。
ASP.NET Core 隨附 Kestrel 伺服器,這是預設、跨平台的 HTTP 伺服器。
Kestrel 伺服器是預設、跨平台的 HTTP 伺服器實作。 Kestrel 可提供最佳的效能和記憶體使用率,但其沒有 HTTP.sys 中的一些進階功能。 如需詳細資訊,請參閱本文件中的 Kestrel 與 HTTP.sys。
使用 Kestrel:
供本身當作直接從網路 (包括網際網路) 處理要求的邊緣伺服器。
搭配「反向 Proxy 伺服器」使用,例如 Internet Information Services (IIS)、Nginx 或 Apache。 反向 Proxy 伺服器會從網際網路接收 HTTP 要求,然後轉送到 Kestrel。
支援任一裝載設定:使用或不使用反向 Proxy 伺服器。
如需 Kestrel 設定指引以及何時要在反向 Proxy 設定中使用 Kestrel 的資訊,請參閱 ASP.NET Core 中的 Kestrel 網頁伺服器。
ASP.NET Core 隨附 Kestrel 伺服器,這是預設、跨平台的 HTTP 伺服器。
如需如何在 Linux 上使用 Nginx 作為 Kestrel 反向 Proxy 伺服器的資訊,請參閱在 Linux 上使用 Nginx 裝載 ASP.NET Core。
如果您在 Windows 上執行 ASP.NET Core 應用程式,則 HTTP.sys 是 Kestrel 的替代方案。 除非應用程式需要的功能在 Kestrel 中並未提供,否則建議使用 Kestrel 而不要使用 HTTP.sys。 如需詳細資訊,請參閱在 ASP.NET Core 中實作 HTTP.sys 網頁伺服器。
HTTP.sys 也可用於只公開到內部網路的應用程式。
如需 HTTP.sys 設定指引,請參閱 ASP.NET Core 中的 HTTP.sys 網頁伺服器實作。
IApplicationBuilder 方法提供的 Startup.Configure
會公開類型ServerFeatures 的 IFeatureCollection 屬性。
Kestrel 與 HTTP.sys 各自只會公開單一功能 IServerAddressesFeature,但不同的伺服器實作可公開更多的功能。
IServerAddressesFeature
可用來找出伺服器實作在執行階段已繫結的連接埠。
如果內建伺服器不符合應用程式的需求,則可以建立自訂伺服器實作。 Open Web Interface for .NET (OWIN) 指南示範如何撰寫採用 Nowin 的 IServer 實作。 只有該應用程式使用的功能介面才需要實作,但至少須支援 IHttpRequestFeature 及 IHttpResponseFeature。
伺服器會在整合式開發環境 (IDE) 或編輯器啟動應用程式時啟動:
- Visual Studio:您可以使用啟動設定檔搭配 IIS Express/ASP.NET Core 模組或主控台來啟動應用程式和伺服器。
- Visual Studio Code:應用程式和伺服器會由 Omnisharp 啟動,這也可啟動 CoreCLR 偵錯工具。
- Visual Studio for Mac:應用程式和伺服器會由 Mono Soft-Mode 偵錯工具啟動。
當您在專案資料夾中使用命令提示字元啟動應用程式時,dotnet run 會啟動應用程式和伺服器 (僅限 Kestrel 和 HTTP.sys)。 組態是由 -c|--configuration
選項指定,會設為 Debug
(預設值) 或 Release
。
使用 launchSettings.json
或內建在工具中的偵錯工具 (例如 Visual Studio) 啟動應用程式時,dotnet run
檔案會提供設定。 如果 launchSettings.json
檔案中有啟動設定檔,請使用 --launch-profile {PROFILE NAME}
選項搭配 dotnet run
命令,或在 Visual Studio 中選取設定檔。 如需詳細資訊,請參閱 dotnet run 和 .NET Core 發佈封裝。
在下列部署案例中,ASP.NET Core 支援 HTTP/2:
- Kestrel
- 作業系統
- Windows Server 2016/Windows 10 或更新版本†
- Linux 含 OpenSSL 1.0.2 或更新版本 (例如 Ubuntu 16.04 或更新版本)
- macOS 10.15 或更新版本
- 目標 Framework:.NET Core 2.2 或更新版本
- 作業系統
-
HTTP.sys
- Windows Server 2016/Windows 10 或更新版本
- 目標 Framework:不適用於 HTTP.sys 部署。
-
IIS (同處理序)
- Windows Server 2016/Windows 10 或更新版本;IIS 10 或更新版本
- 目標 Framework:.NET Core 2.2 或更新版本
-
IIS (跨處理序)
- Windows Server 2016/Windows 10 或更新版本;IIS 10 或更新版本
- 公眾對應 Edge Server 連線使用 HTTP/2,但是對 Kestrel 的反向 Proxy 連線使用 HTTP/1.1。
- 目標 Framework:不適用於 IIS 跨處理序部署。
†Kestrel 在 Windows Server 2012 R2 與 Windows 8.1 對 HTTP/2 的支援有限。 支援有限的原因是這些作業系統上的支援 TLS 密碼編譯套件清單有限。 可能需要使用橢圓曲線數位簽章演算法 (ECDSA) 產生的憑證來保護 TLS 連線。
- Kestrel
- 作業系統
- Windows Server 2016/Windows 10 或更新版本†
- Linux 含 OpenSSL 1.0.2 或更新版本 (例如 Ubuntu 16.04 或更新版本)
- 未來版本的 macOS 將會支援 HTTP/2。
- 目標 Framework:.NET Core 2.2 或更新版本
- 作業系統
-
HTTP.sys
- Windows Server 2016/Windows 10 或更新版本
- 目標 Framework:不適用於 HTTP.sys 部署。
-
IIS (同處理序)
- Windows Server 2016/Windows 10 或更新版本;IIS 10 或更新版本
- 目標 Framework:.NET Core 2.2 或更新版本
-
IIS (跨處理序)
- Windows Server 2016/Windows 10 或更新版本;IIS 10 或更新版本
- 公眾對應 Edge Server 連線使用 HTTP/2,但是對 Kestrel 的反向 Proxy 連線使用 HTTP/1.1。
- 目標 Framework:不適用於 IIS 跨處理序部署。
†Kestrel 在 Windows Server 2012 R2 與 Windows 8.1 對 HTTP/2 的支援有限。 支援有限的原因是這些作業系統上的支援 TLS 密碼編譯套件清單有限。 可能需要使用橢圓曲線數位簽章演算法 (ECDSA) 產生的憑證來保護 TLS 連線。
- Kestrel
- 作業系統
- Windows Server 2016/Windows 10 或更新版本†
- Linux 含 OpenSSL 1.0.2 或更新版本 (例如 Ubuntu 16.04 或更新版本)
- 未來版本的 macOS 將會支援 HTTP/2。
- 目標 Framework:.NET Core 2.2 或更新版本
- 作業系統
-
HTTP.sys
- Windows Server 2016/Windows 10 或更新版本
- 目標 Framework:不適用於 HTTP.sys 部署。
-
IIS (同處理序)
- Windows Server 2016/Windows 10 或更新版本;IIS 10 或更新版本
- 目標 Framework:.NET Core 2.2 或更新版本
-
IIS (跨處理序)
- Windows Server 2016/Windows 10 或更新版本;IIS 10 或更新版本
- 公眾對應 Edge Server 連線使用 HTTP/2,但是對 Kestrel 的反向 Proxy 連線使用 HTTP/1.1。
- 目標 Framework:不適用於 IIS 跨處理序部署。
†Kestrel 在 Windows Server 2012 R2 與 Windows 8.1 對 HTTP/2 的支援有限。 支援有限的原因是這些作業系統上的支援 TLS 密碼編譯套件清單有限。 可能需要使用橢圓曲線數位簽章演算法 (ECDSA) 產生的憑證來保護 TLS 連線。
-
HTTP.sys
- Windows Server 2016/Windows 10 或更新版本
- 目標 Framework:不適用於 HTTP.sys 部署。
-
IIS (跨處理序)
- Windows Server 2016/Windows 10 或更新版本;IIS 10 或更新版本
- 公眾對應 Edge Server 連線使用 HTTP/2,但是對 Kestrel 的反向 Proxy 連線使用 HTTP/1.1。
- 目標 Framework:不適用於 IIS 跨處理序部署。
HTTP/2 連線必須使用 Application-Layer Protocol Negotiation (ALPN) 和 TLS 1.2 或更新版本。 如需詳細資訊,請參閱與伺服器部署案例相關的主題。
如需建立可靠、安全、高效能、可測試且可調整 ASP.NET Core 應用程式的指引,請參閱 Enterprise Web 應用程式模式。 提供可實作模式的完整生產品質範例 Web 應用程式。
其他資源
訓練
模組
使用 ASP.NET Core 進行 .NET Web 開發簡介 - Training
在本課程模組中,您將了解使用 ASP.NET Core 的 .NET Web 開發,包括它是什麼與其使用時機。
認證
Microsoft Certified: Windows Server Hybrid Administrator Associate - Certifications
身為 Windows Server 混合式系統管理員,您會將 Windows Server 環境與 Azure 服務整合,並管理內部部署網路中的 Windows Server。