Implementasi server web di ASP.NET Core
Catatan
Ini bukan versi terbaru dari artikel ini. Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.
Peringatan
Versi ASP.NET Core ini tidak lagi didukung. Untuk informasi selengkapnya, lihat Kebijakan Dukungan .NET dan .NET Core. Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.
Penting
Informasi ini berkaitan dengan produk pra-rilis yang mungkin dimodifikasi secara substansial sebelum dirilis secara komersial. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.
Oleh Tom Dykstra, Steve Smith, Stephen Halter, dan Chris Ross
Aplikasi ASP.NET Core berjalan dengan implementasi server HTTP dalam proses. Implementasi server mendengarkan permintaan HTTP dan menampilkannya ke aplikasi sebagai kumpulan fitur permintaan yang disusun menjadi HttpContext.
ASP.NET Core dikirimkan dengan berikut ini:
- Server Kestrel adalah implementasi server HTTP lintas platform default. Kestrel memberikan performa dan penggunaan memori terbaik, tetapi tidak memiliki beberapa fitur lanjutan di HTTP.sys. Untuk informasi selengkapnya, lihat Kestrel vs. HTTP.sys di tab Windows.
- Server HTTP IIS adalah server dalam proses untuk IIS.
- Server HTTP.sys adalah server HTTP khusus Windows yang didasarkan pada driver kernel HTTP.sys dan HTTP Server API.
Saat menggunakan IIS atau IIS Express, aplikasi akan berjalan:
- Dalam proses yang sama seperti proses pekerja IIS (model hosting dalam proses) dengan Server HTTP IIS. Dalam proses adalah konfigurasi yang disarankan.
- Dalam proses yang terpisah dari proses pekerja IIS (model hosting di luar proses) dengan server Kestrel.
ASP.NET Core Module adalah modul IIS native yang menangani permintaan IIS native antara IIS dan Server HTTP IIS dalam proses atau Kestrel. Untuk informasi lebih lanjut, lihat ASP.NET Core Module (ANCM) untuk IIS.
Kestrel vs. HTTP.sys
Kestrel memiliki keunggulan berikut jika dibandingkan dengan HTTP.sys:
- Performa dan pemanfaatan memori yang lebih baik.
- Platform silang
- Kelincahan, ini dikembangkan dan di-patch secara independen dari OS.
- Port dan konfigurasi TLS terprogram
- Ekstensibilitas yang memungkinkan protokol seperti PPv2 dan transportasi alternatif.
Http.Sys beroperasi sebagai komponen mode kernel bersama dengan fitur berikut yang kestrel tidak memiliki:
- Berbagi port
- Autentikasi jendela mode kernel. Kestrel hanya mendukung autentikasi mode pengguna.
- Proksi cepat melalui transfer antrean
- Transmisi file langsung
- Pembuatan cache respons
Model Hosting
Beberapa model hosting tersedia:
Kestrel hosting mandiri: Server Kestrel web berjalan tanpa memerlukan server web eksternal lainnya seperti IIS atau HTTP.sys.
HTTP.sys hosting mandiri adalah alternatif untuk Kestrel. Kestrel disarankan melalui HTTP.sys kecuali aplikasi memerlukan fitur yang tidak tersedia di Kestrel.
Hosting dalam proses IIS: Aplikasi ASP.NET Core berjalan dalam proses yang sama dengan proses pekerja IIS-nya. Hosting dalam proses IIS memberikan peningkatan performa melalui hosting IIS di luar proses karena permintaan tidak diproksi melalui adaptor loopback, antarmuka jaringan yang mengembalikan lalu lintas jaringan keluar kembali ke komputer yang sama. IIS menangani manajemen proses dengan Windows Process Activation Service (WAS).
Hosting IIS di luar proses: aplikasi ASP.NET Core berjalan dalam proses yang terpisah dari proses pekerja IIS, dan modul menangani manajemen proses. Modul memulai proses untuk aplikasi ASP.NET Core ketika permintaan pertama tiba dan memulai ulang aplikasi jika aplikasi dimatikan atau mengalami crash. Ini pada dasarnya merupakan perilaku yang sama seperti yang terlihat pada aplikasi yang berjalan dalam proses yang dikelola oleh Windows Process Activation Service (WAS). Menggunakan proses terpisah juga memungkinkan hosting lebih dari satu aplikasi dari kumpulan aplikasi yang sama.
Untuk mengetahui informasi selengkapnya, lihat tautan berikut:
Kestrel
Server Kestrel adalah implementasi server HTTP lintas platform default. Kestrel memberikan performa dan penggunaan memori terbaik, tetapi tidak memiliki beberapa fitur lanjutan di HTTP.sys. Untuk informasi lebih lanjut, lihat Kestrel vs. HTTP.sys dalam dokumen ini.
Gunakan Kestrel:
Sendiri, sebagai permintaan pemrosesan server tepi langsung dari jaringan, termasuk internet.
Dengan server proksi terbalik, seperti Layanan Informasi Internet (IIS), Nginx, atau Apache. Server proksi terbalik menerima permintaan HTTP dari Internet dan meneruskannya ke Kestrel.
Konfigurasi hosting—dengan atau tanpa server proksi terbalik—didukung.
Untuk Kestrel panduan konfigurasi dan informasi tentang kapan harus digunakan Kestrel dalam konfigurasi proksi terbalik, lihat Kestrel server web di ASP.NET Core.
ASP.NET Core dikirimkan dengan berikut ini:
- Server Kestrel adalah server HTTP lintas platform default.
- Server HTTP.sys adalah server HTTP khusus Windows yang didasarkan pada driver kernel HTTP.sys dan HTTP Server API.
Saat menggunakan IIS atau IIS Express, aplikasi berjalan dalam proses yang terpisah dari proses pekerja IIS (di luar proses) dengan server Kestrel.
Karena aplikasi ASP.NET Core berjalan dalam proses yang terpisah dari proses pekerja IIS, modul menangani manajemen proses. Modul memulai proses untuk aplikasi ASP.NET Core ketika permintaan pertama tiba dan memulai ulang aplikasi jika aplikasi dimatikan atau mengalami crash. Ini pada dasarnya merupakan perilaku yang sama seperti yang terlihat pada aplikasi yang berjalan dalam proses yang dikelola oleh Windows Process Activation Service (WAS).
Diagram berikut mengilustrasikan hubungan antara IIS, ASP.NET Core Module, dan aplikasi yang dihosting di luar proses:
Permintaan datang dari web ke driver HTTP.sys mode kernel. Driver merutekan permintaan ke IIS pada port situs web yang dikonfigurasi, biasanya 80 (HTTP) atau 443 (HTTPS). Modul meneruskan permintaan ke Kestrel pada port acak untuk aplikasi, yang bukan port 80 atau 443.
Modul menentukan port melalui variabel lingkungan saat startup, dan Middleware Integrasi IIS mengonfigurasi server yang akan didengarkan di http://localhost:{port}
. Pemeriksaan tambahan dilakukan, dan permintaan yang tidak berasal dari modul ditolak. Modul tidak mendukung penerusan HTTPS, jadi permintaan diteruskan melalui HTTP meskipun diterima oleh IIS melalui HTTPS.
Setelah Kestrel mengambil permintaan dari modul, permintaan didorong ke dalam alur middleware ASP.NET Core. Alur middleware menangani permintaan dan meneruskannya sebagai instans HttpContext
ke logika aplikasi. Middleware yang ditambahkan oleh Integrasi IIS memperbarui skema, IP jarak jauh, dan basis jalur ke akun untuk meneruskan permintaan ke Kestrel. Respons aplikasi diteruskan kembali ke IIS, yang mendorongnya kembali ke klien HTTP yang menginisiasi permintaan.
Untuk panduan konfigurasi IIS dan ASP.NET Core Module, lihat topik berikut:
Nginx dengan Kestrel
Untuk informasi tentang cara menggunakan Nginx di Linux sebagai server proksi terbalik untuk Kestrel, lihat Menghosting ASP.NET Core di Linux dengan Nginx.
HTTP.sys
Jika aplikasi ASP.NET Core dijalankan di Windows, HTTP.sys adalah alternatif untuk Kestrel. Kestrel disarankan melalui HTTP.sys kecuali aplikasi memerlukan fitur yang tidak tersedia di Kestrel. Untuk informasi lebih lanjut, lihat implementasi server web HTTP.sys di ASP.NET Core.
HTTP.sys juga dapat digunakan untuk aplikasi yang hanya terekspos ke jaringan internal.
Untuk panduan konfigurasi HTTP.sys, lihat Implementasi server web HTTP.sys di ASP.NET Core.
Infrastruktur server ASP.NET Core
IApplicationBuilder yang tersedia dalam metode Startup.Configure
mengekspos properti ServerFeatures dari jenis IFeatureCollection. Masing-masing dari Kestrel dan HTTP.sys hanya mengekspos satu fitur, IServerAddressesFeature, tetapi implementasi server yang berbeda dapat mengekspos fungsionalitas tambahan.
IServerAddressesFeature
dapat digunakan untuk mengetahui port mana yang terikat pada implementasi server saat runtime bahasa umum.
Server kustom
Jika server bawaan tidak memenuhi persyaratan aplikasi, implementasi server kustom dapat dibuat. Panduan Open Web Interface for .NET (OWIN) menunjukkan cara menulis implementasi IServer berbasis Nowin. Hanya antarmuka fitur yang digunakan aplikasi yang memerlukan implementasi, meski setidaknya IHttpRequestFeature dan IHttpResponseFeature harus didukung.
Startup server
Server diluncurkan ketika Integrated Development Environment (IDE) atau penyunting memulai aplikasi:
- Visual Studio: Profil peluncuran dapat digunakan untuk memulai aplikasi dan server dengan IIS Express/ASP.NET Core Module atau konsol.
- Visual Studio Code: Aplikasi dan server dimulai oleh Omnisharp, yang mengaktifkan debugger CoreCLR.
- Visual Studio untuk Mac: Aplikasi dan server dimulai oleh Mono Soft-Mode Debugger.
Saat meluncurkan aplikasi dari perintah di folder proyek, dotnet run meluncurkan aplikasi dan server (Kestrel dan HTTP.sys saja). Konfigurasi ditentukan oleh opsi -c|--configuration
, yang diatur ke Debug
(default) atau Release
.
File launchSettings.json
menyediakan konfigurasi saat meluncurkan aplikasi dengan dotnet run
atau dengan debugger yang ada di dalam alat, seperti Visual Studio. Jika profil peluncuran ada dalam file launchSettings.json
, gunakan opsi --launch-profile {PROFILE NAME}
dengan perintah dotnet run
atau pilih profil di Visual Studio. Untuk informasi lebih lanjut, lihat dotnet run dan pengemasan distribusi .NET Core.
Dukungan HTTP/2
HTTP/2 didukung dengan ASP.NET Core dalam skenario penyebaran berikut:
- Kestrel
- Sistem operasi
- Windows Server 2016/Windows 10 atau yang lebih baru†
- Linux dengan OpenSSL 1.0.2 atau yang lebih baru (misalnya, Ubuntu 16.04 atau yang lebih baru)
- macOS 10.15 atau yang lebih baru
- Kerangka kerja target: .NET Core 2.2 atau yang lebih baru
- Sistem operasi
- HTTP.sys
- Windows Server 2016/Windows 10 atau yang lebih baru
- Kerangka kerja target: Tidak berlaku untuk penyebaran HTTP.sys.
- IIS (dalam proses)
- Windows Server 2016/Windows 10 atau yang lebih baru; IIS 10 atau yang lebih baru
- Kerangka kerja target: .NET Core 2.2 atau yang lebih baru
- IIS (di luar proses)
- Windows Server 2016/Windows 10 atau yang lebih baru; IIS 10 atau yang lebih baru
- Koneksi server tepi yang menghadap publik menggunakan HTTP/2, tetapi koneksi proksi terbalik ke Kestrel menggunakan HTTP/1.1.
- Kerangka kerja target: Tidak berlaku untuk penyebaran di luar proses IIS.
†Kestrel memiliki dukungan terbatas untuk HTTP/2 di Windows Server 2012 R2 dan Windows 8.1. Dukungan terbatas karena daftar rangkaian cipher TLS yang didukung yang tersedia pada sistem operasi ini terbatas. Sertifikat yang dihasilkan menggunakan Elliptic Curve Digital Signature Algorithm (ECDSA) mungkin diperlukan untuk mengamankan koneksi TLS.
- Kestrel
- Sistem operasi
- Windows Server 2016/Windows 10 atau yang lebih baru†
- Linux dengan OpenSSL 1.0.2 atau yang lebih baru (misalnya, Ubuntu 16.04 atau yang lebih baru)
- HTTP/2 akan didukung di macOS dalam rilis mendatang.
- Kerangka kerja target: .NET Core 2.2 atau yang lebih baru
- Sistem operasi
- HTTP.sys
- Windows Server 2016/Windows 10 atau yang lebih baru
- Kerangka kerja target: Tidak berlaku untuk penyebaran HTTP.sys.
- IIS (dalam proses)
- Windows Server 2016/Windows 10 atau yang lebih baru; IIS 10 atau yang lebih baru
- Kerangka kerja target: .NET Core 2.2 atau yang lebih baru
- IIS (di luar proses)
- Windows Server 2016/Windows 10 atau yang lebih baru; IIS 10 atau yang lebih baru
- Koneksi server tepi yang menghadap publik menggunakan HTTP/2, tetapi koneksi proksi terbalik ke Kestrel menggunakan HTTP/1.1.
- Kerangka kerja target: Tidak berlaku untuk penyebaran di luar proses IIS.
†Kestrel memiliki dukungan terbatas untuk HTTP/2 di Windows Server 2012 R2 dan Windows 8.1. Dukungan terbatas karena daftar rangkaian cipher TLS yang didukung yang tersedia pada sistem operasi ini terbatas. Sertifikat yang dihasilkan menggunakan Elliptic Curve Digital Signature Algorithm (ECDSA) mungkin diperlukan untuk mengamankan koneksi TLS.
- Kestrel
- Sistem operasi
- Windows Server 2016/Windows 10 atau yang lebih baru†
- Linux dengan OpenSSL 1.0.2 atau yang lebih baru (misalnya, Ubuntu 16.04 atau yang lebih baru)
- HTTP/2 akan didukung di macOS dalam rilis mendatang.
- Kerangka kerja target: .NET Core 2.2 atau yang lebih baru
- Sistem operasi
- HTTP.sys
- Windows Server 2016/Windows 10 atau yang lebih baru
- Kerangka kerja target: Tidak berlaku untuk penyebaran HTTP.sys.
- IIS (dalam proses)
- Windows Server 2016/Windows 10 atau yang lebih baru; IIS 10 atau yang lebih baru
- Kerangka kerja target: .NET Core 2.2 atau yang lebih baru
- IIS (di luar proses)
- Windows Server 2016/Windows 10 atau yang lebih baru; IIS 10 atau yang lebih baru
- Koneksi server tepi yang menghadap publik menggunakan HTTP/2, tetapi koneksi proksi terbalik ke Kestrel menggunakan HTTP/1.1.
- Kerangka kerja target: Tidak berlaku untuk penyebaran di luar proses IIS.
†Kestrel memiliki dukungan terbatas untuk HTTP/2 di Windows Server 2012 R2 dan Windows 8.1. Dukungan terbatas karena daftar rangkaian cipher TLS yang didukung yang tersedia pada sistem operasi ini terbatas. Sertifikat yang dihasilkan menggunakan Elliptic Curve Digital Signature Algorithm (ECDSA) mungkin diperlukan untuk mengamankan koneksi TLS.
- HTTP.sys
- Windows Server 2016/Windows 10 atau yang lebih baru
- Kerangka kerja target: Tidak berlaku untuk penyebaran HTTP.sys.
- IIS (di luar proses)
- Windows Server 2016/Windows 10 atau yang lebih baru; IIS 10 atau yang lebih baru
- Koneksi server tepi yang menghadap publik menggunakan HTTP/2, tetapi koneksi proksi terbalik ke Kestrel menggunakan HTTP/1.1.
- Kerangka kerja target: Tidak berlaku untuk penyebaran di luar proses IIS.
Sambungan HTTP/2 harus menggunakan Application-Layer Protocol Negotiation (ALPN) dan TLS 1.2 atau yang lebih baru. Untuk informasi lebih lanjut, lihat topik yang berkaitan dengan skenario penyebaran server Anda.
Sumber Daya Tambahan:
ASP.NET Core