Saya ingin menawarkan jawaban alternatif, dengan beberapa riwayat, sehingga Anda mungkin mengerti mengapa Kestrel datang, bahkan jika Anda hanya menggunakan Windows dan IIS.
Pada awal pengembangan ASP.NET sebelum tahun 2000, jelas Microsoft menciptakan dua bagian untuk menjadi tuan rumah aplikasi ASP.NET WebForms,
- Cassini, kemudian menjadi ASP.NET Development Server di Visual Studio. Ini adalah server web yang dikelola sepenuhnya ditulis dalam C # berdasarkan
HttpListener
. Tentu saja, karena hanya untuk pengembangan, banyak fitur yang tidak pernah diterapkan. Ketika Microsoft membuat kode sumber Cassini tersedia untuk umum, ada pihak ketiga yang menggunakan basis kode dan menambahkan lebih banyak fitur, yang memulai keluarga Cassini.
- Dukungan ASP.NET pada IIS (revisi 1). Karena IIS adalah 4.0 dan 5.0 / 5.1 pada waktu itu, yang tidak seperti kolam aplikasi, ASP.NET bahkan memiliki proses pekerja sendiri (
aspnet_wp.exe
).
Jadi untuk mengembangkan aplikasi web, Anda menggunakan Cassini, dan untuk menyebarkan Anda menggunakan IIS.
Pengenalan kumpulan aplikasi di IIS 6 membutuhkan beberapa perubahan di sisi ASP.NET, sehingga aspnet_wp.exe
menjadi usang dan digantikan oleh aspnet_isapi.dll
. Itu bisa dilihat sebagai dukungan ASP.NET pada revisi IIS 2. Jadi aplikasi ASP.NET dihosting di proses pekerja IIS w3wp.exe
.
Pengenalan pipa terintegrasi di IIS 7 dan di atas membutuhkan perubahan lebih lanjut, yang diganti aspnet_isapi.dll
dengan webengine4.dll
. Itu dapat dilihat sebagai dukungan ASP.NET pada revisi IIS 3. Jaringan pipa ASP.NET dan IIS disatukan.
Anda dapat melihat ASP.NET telah menjadi jauh lebih kompleks dan terintegrasi dengan IIS, sehingga Cassini mulai menunjukkan usia, dan secara bertahap digantikan oleh IIS Express (mode pengguna lite IIS).
Jadi, dalam banyak kasus, ketika orang menyalahkan bahwa IIS lambat, mereka seharusnya menyalahkan ASP.NET sebenarnya. IIS sendiri tanpa ASP.NET cukup cepat dan stabil, sementara ASP.NET tidak dikembangkan dengan metrik kinerja yang cukup dalam pikiran (karena WebForms memfokuskan cukup banyak produktivitas dan RAD).
Kemudian pada November 2014, ASP.NET 5 (kemudian berganti nama menjadi ASP.NET Core) diumumkan dan menjadi teknologi lintas platform. Jelas Microsoft membutuhkan desain baru untuk mendukung Windows, macOS, dan Linux, di mana semua server web utama, nginx / Apache (atau server web lainnya) harus dipertimbangkan selain IIS.
Saya pikir banyak yang akan setuju bahwa Microsoft belajar cukup banyak dari NodeJS, dan kemudian merancang dan mengembangkan Kestrel (berdasarkan pada libuv
awalnya tetapi mungkin akan pindah ke teknologi lain segera). Ini adalah server web ringan seperti Cassini pada awalnya, tetapi kemudian lebih banyak fitur yang ditambahkan (seperti komentar lain berkomentar, lebih banyak fitur sehingga dapat diperlakukan sebagai server web penuh). Meskipun sepenuhnya dikelola (beberapa dependensi asli ada), itu bukan lagi server web mainan seperti Cassini.
Lalu mengapa kamu tidak bisa menggunakan Kestrel saja? Mengapa IIS Express dan berpotensi IIS, nginx, atau Apache masih diperlukan? Itu terutama adalah hasil dari praktik internet saat ini. Sebagian besar situs web menggunakan proksi terbalik untuk mengambil permintaan dari browser web Anda dan kemudian meneruskan ke server aplikasi di latar belakang.
- IIS Express / IIS / nginx / Apache adalah server proxy terbalik
- Kestrel / NodeJS / Tomcat dan sebagainya adalah server aplikasi
Jawaban lain sudah menunjukkan tautan ke dokumentasi Microsoft, jadi Anda bisa melihatnya.
Microsoft mengembangkan HttpPlatformHandler pada awalnya untuk membuat IIS proxy terbalik yang cukup baik untuk Java / Python dan seterusnya, jadi direncanakan untuk menggunakannya untuk ASP.NET Core. Masalah mulai muncul selama pengembangan, jadi kemudian Microsoft membuat ASP.NET Core Module khusus untuk ASP.NET Core. Itulah dukungan ASP.NET pada revisi IIS 4.
Mulai dari ASP.NET Core 2.2, Modul Inti ASP.NET untuk IIS (versi 2) dapat meng-host lingkungan .NET Core di dalam proses pekerja IIS ( w3wp.exe
), sangat mirip dengan ASP.NET 2.x / 4.x. Mode ini disebut "hosting dalam proses IIS" . Ini dapat dianggap sebagai dukungan ASP.NET pada revisi IIS 5.
Yah, cukup panjang, tapi saya harap saya mengumpulkan semua bagian yang diperlukan dan Anda menikmati membacanya.