Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Note
Ini bukan versi terbaru dari artikel ini. Untuk rilis saat ini, lihat versi .NET 10 dari artikel ini.
Warning
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 9 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 serangkaian fitur permintaan yang dibentuk dalam 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.
- HTTP.sys server adalah server HTTP khusus Windows berdasarkan driver kernelHTTP.sys dan HTTP Server API.
Saat menggunakan IIS atau IIS Express, aplikasi berjalan:
- Dalam proses yang sama dengan proses pekerja IIS ( model hosting dalam proses) dengan Server HTTP IIS. Dalam proses adalah konfigurasi yang direkomendasikan.
- Dalam proses yang terpisah dari proses pekerja IIS ( model hosting di luar proses) dengan Kestrel server.
Modul ASP.NET Core adalah modul IIS asli yang menangani permintaan IIS asli antara IIS dan Server HTTP IIS dalam proses atau Kestrel. Untuk informasi selengkapnya, lihat ASP.NET Core Module (ANCM) untuk IIS.
Kestrel dibandingkan HTTP.sys
Kestrel memiliki keunggulan berikut jika dibandingkan dengan HTTP.sys:
- Performa dan pemanfaatan memori yang lebih baik.
- Lintas platform
- 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 tidak dimiliki Kestrel.
- Berbagi port
- Autentikasi jendela mode kernel. Kestrel hanya mendukung autentikasi mode pengguna.
- Proksi cepat melalui transfer antrean
- Transmisi file langsung
- Penggunaan cache respons
Model penyelenggaraan
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 Layanan Aktivasi Proses Windows (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 adalah perilaku yang sama seperti yang terlihat dengan aplikasi yang berjalan dalam proses yang dikelola oleh Layanan Aktivasi Proses Windows (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 selengkapnya, lihat Kestrel vs. HTTP.sys dalam dokumen ini.
Gunakan Kestrel:
Sendiri, sebagai permintaan pemrosesan server tepi langsung dari jaringan, termasuk internet.
Dengan menggunakan server proksi terbalik, seperti Internet Information Services (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 panduan konfigurasi dan informasi tentang kapan menggunakan Kestrel dalam konfigurasi proksi terbalik, lihat Kestrel.
ASP.NET Core dikirimkan dengan berikut ini:
- Server Kestrel adalah server HTTP lintas platform default.
- HTTP.sys server adalah server HTTP khusus Windows berdasarkan driver kernelHTTP.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 Kestrel server.
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 adalah perilaku yang sama seperti yang terlihat dengan aplikasi yang berjalan dalam proses yang dikelola oleh Layanan Aktivasi Proses Windows (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 IIS Integration Middleware mengonfigurasi server untuk mendengarkan pada 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 Host 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 selengkapnya, lihat HTTP.sys implementasi server web 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 webHTTP.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 Buka Antarmuka Web untuk .NET (OWIN) menunjukkan cara menulis implementasi berbasis IServer. Hanya antarmuka fitur yang digunakan aplikasi yang memerlukan implementasi, meski setidaknya IHttpRequestFeature dan IHttpResponseFeature harus didukung.
Startup server: Memulai 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.
Saat meluncurkan aplikasi dari prompt perintah di folder proyek, dotnet run meluncurkan aplikasi dan server (Kestrel dan hanya 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 selengkapnya, lihat dotnet run dan kemasan distribusi .NET.
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.
Koneksi 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.
Pola aplikasi web perusahaan
Untuk panduan tentang membuat aplikasi ASP.NET Core yang andal, aman, berkinerja, dapat diuji, dan dapat diskalakan, lihat Pola aplikasi web perusahaan. Aplikasi web sampel kualitas produksi lengkap yang mengimplementasikan pola tersedia.
Sumber daya tambahan
ASP.NET Core