Tôi muốn đưa ra một câu trả lời thay thế, với một số lịch sử, để bạn có thể hiểu tại sao Kestrel đến, ngay cả khi bạn chỉ sử dụng Windows và IIS.
Khi bắt đầu phát triển ASP.NET trước năm 2000, rõ ràng Microsoft đã tạo ra hai phần để lưu trữ các ứng dụng ASP.NET WebForms,
- Cassini, sau này trở thành Máy chủ phát triển ASP.NET trong Visual Studio. Nó là một máy chủ web được quản lý hoàn toàn được viết bằng C # dựa trên
HttpListener
. Tất nhiên, vì nó chỉ dành cho phát triển, nhiều tính năng không bao giờ được thực hiện. Khi Microsoft cung cấp mã nguồn của Cassini cho công chúng, có những bên thứ ba đã chia rẽ cơ sở mã và thêm nhiều tính năng, bắt đầu gia đình Cassini.
- Hỗ trợ ASP.NET trên IIS (phiên bản 1). Vì IIS là 4.0 và 5.0 / 5.1 tại thời điểm đó, không có gì giống như nhóm ứng dụng, ASP.NET thậm chí còn có quy trình worker (
aspnet_wp.exe
).
Vì vậy, để phát triển ứng dụng web, bạn sử dụng Cassini và để triển khai bạn sử dụng IIS.
Việc giới thiệu nhóm ứng dụng trong IIS 6 yêu cầu một số thay đổi về phía ASP.NET, do đó aspnet_wp.exe
trở nên lỗi thời và được thay thế bằng aspnet_isapi.dll
. Điều đó có thể được xem là hỗ trợ ASP.NET trên phiên bản IIS 2. Vì vậy, các ứng dụng ASP.NET đang được lưu trữ trong các quy trình công nhân IIS w3wp.exe
.
Việc giới thiệu đường ống tích hợp trong IIS 7 trở lên yêu cầu thay đổi thêm, thay thế aspnet_isapi.dll
bằng webengine4.dll
. Điều đó có thể được xem là hỗ trợ ASP.NET trên phiên bản IIS 3. Các đường ống ASP.NET và IIS được thống nhất.
Bạn có thể thấy ASP.NET đã trở nên phức tạp hơn và được tích hợp chặt chẽ với IIS, vì vậy Cassini bắt đầu cho thấy tuổi của nó và dần dần được thay thế bởi IIS Express (chế độ người dùng lite IIS).
Vì vậy, trong nhiều trường hợp, khi mọi người đổ lỗi rằng IIS chậm, họ nên đổ lỗi cho ASP.NET trên thực tế. Bản thân IIS không có ASP.NET là khá nhanh và ổn định, trong khi ASP.NET không được phát triển với đủ số liệu hiệu suất (vì WebForms tập trung khá nhiều năng suất và RAD).
Sau đó vào tháng 11 năm 2014, ASP.NET 5 (sau đổi tên thành ASP.NET Core) đã được công bố và trở thành một công nghệ đa nền tảng. Rõ ràng Microsoft cần một thiết kế mới để hỗ trợ Windows, macOS và Linux, trong đó tất cả các máy chủ web chính, nginx / Apache (hoặc các máy chủ web khác) nên được xem xét bên cạnh IIS.
Tôi nghĩ nhiều người sẽ đồng ý rằng Microsoft đã học được khá nhiều từ NodeJS, sau đó thiết kế và phát triển Kestrel (dựa trên libuv
ban đầu nhưng có thể sớm chuyển sang công nghệ khác). Nó là một máy chủ web nhẹ như Cassini ban đầu, nhưng sau đó nhiều tính năng hơn được thêm vào (như một câu trả lời khác nhận xét, nhiều tính năng hơn để có thể được coi là một máy chủ web đầy đủ). Mặc dù được quản lý hoàn toàn (tồn tại một số phụ thuộc riêng), nó không còn là máy chủ web đồ chơi như Cassini.
Vậy thì tại sao bạn không thể sử dụng Kestrel? Tại sao IIS Express và có khả năng IIS, nginx hoặc Apache vẫn cần thiết? Đó chủ yếu là kết quả của thực hành internet ngày nay. Hầu hết các trang web sử dụng proxy ngược để nhận yêu cầu từ trình duyệt web của bạn và sau đó chuyển tiếp đến các máy chủ ứng dụng trong nền.
- IIS Express / IIS / nginx / Apache là các máy chủ proxy ngược
- Kestrel / NodeJS / Tomcat và các máy chủ ứng dụng khác
Một câu trả lời khác đã cho thấy một liên kết đến tài liệu của Microsoft, vì vậy bạn có thể xem qua.
Microsoft đã phát triển httpPl PlatformHandler ban đầu để biến IIS thành một proxy ngược đủ tốt cho Java / Python, v.v., vì vậy đã lên kế hoạch sử dụng nó cho ASP.NET Core. Các vấn đề bắt đầu xuất hiện trong quá trình phát triển, vì vậy sau đó Microsoft đã tạo ra Mô-đun ASP.NET Core dành riêng cho ASP.NET Core. Đó là hỗ trợ ASP.NET trên phiên bản IIS 4.
Bắt đầu từ ASP.NET Core 2.2, Mô-đun ASP.NET Core cho IIS (phiên bản 2) có thể lưu trữ môi trường .NET Core bên trong quy trình công nhân IIS ( w3wp.exe
), khá giống với ASP.NET 2.x / 4.x. Chế độ này được gọi là "IIS in-process hosting" . Nó có thể được coi là hỗ trợ ASP.NET trên phiên bản IIS 5.
Chà, khá dài, nhưng tôi hy vọng tôi đặt tất cả các phần cần thiết lại với nhau và bạn thích đọc nó.