Draft:Kestrel Web Server
{{AFC submission|d|nn|u=78.190.51.205|ns=118|decliner=Theroadislong|declinets=20241125143042|ts=20241125135508}}
{{AFC submission|d|v|u=78.190.51.205|ns=118|decliner=SafariScribe|declinets=20241125042443|small=yes|ts=20241125005938}}
{{AFC comment|1=we have little interest in what Microsoft have to say about the topic. Theroadislong (talk) 14:37, 25 November 2024 (UTC)}}
----
{{Short description|Microsoft's web server implementation for .NET}}
{{Draft topics|internet-culture|software|computing|technology}}
{{AfC topic|other}}
Kestrel is a free and open source web server that is created by Microsoft Corporation. It's the primary web server in .NET ecosystem and used mainly as an integral piece of ASP.NET Core nevertheless it's still possible to plug in custom web servers to ASP.NET Core through IServer interface. Usage of Kestrel outside of ASP.NET Core is very limited since Kestrel is designed to power ASP.NET Core, Kestrel is licensed under MIT license.{{Cite web |title=.NET is open source on GitHub {{!}} .NET - Official Dotnet Page from Microsoft |url=https://dotnet.microsoft.com/en-us/platform/open-source }}{{Cite web |last=dotnet-bot |title=IServer Interface (Microsoft.AspNetCore.Hosting.Server) |url=https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.hosting.server.iserver |access-date=2024-11-25 |website=learn.microsoft.com |language=en-us}}
Kestrel utilizes Async IO (SocketAsyncEventArgs) with tasks as It's concurrency model to achieve high throughput while internally optimizing usage of strings to byte arrays and containing small amount of platform specific unmanaged "memory unsafe" code for performance of hot critical paths.
History
Kestrel originally started when ASP.NET Core 1.0 was released, in this stage Kestrel was not ready as an edge server due to security testing being incomplete during earlier stages. As of ASP.NET Core 2.0 Kestrel is edge ready meaning it can receive requests without having a reverse proxy such as IIS or Nginx.{{Cite web |date=2017-03-30 |title=Web server implementations in ASP.NET Core {{!}} Microsoft Docs |url=https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/ |access-date=2024-11-25 |archive-url=https://web.archive.org/web/20170330062010/https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/ |archive-date=2017-03-30 }}
Feature Set
class="wikitable"
|+ !Protocol !Platform !Notes |
HTTP/1.1
|Windows, Linux, Mac OS | |
HTTP/2
|Windows, Linux, Mac OS | |
SPDY
| |Outdated |
HTTP/3
|Windows, Linux |libmsquic required except for Windows |
Kestrel no longer supports SSL and marks them as depreciated.
class="wikitable"
|+ !TLS/SSL Version !Notes |
SSL 2
|Insecure - Depreciated |
SSL 3
|Insecure - Depreciated |
TLS 1.0
|Insecure - Depreciated |
TLS 1.1
|Insecure - Depreciated |
TLS 1.2
| |
TLS 1.3
| |
= YARP =
There is a reverse proxy based on Kestrel named YARP (Yet Another Reverse Proxy) it is highly configurable and originally created in Microsoft due to internal development because developers at Microsoft would create multiple reverse proxies and instead of reinventing the wheel each time engineers decided for a standardized reverse proxy across the company.
YARP is more customizable than nginx and it suits as an easy way to create web application firewalls compared to writing nginx modules or modifying nginx itself.{{Cite web |last=dotnet-bot |title=SslProtocols Enum (System.Security.Authentication) |url=https://learn.microsoft.com/en-us/dotnet/api/system.security.authentication.sslprotocols?view=net-8.0 |access-date=2024-11-25 |website=learn.microsoft.com |language=en-us}}{{Cite web |last=gewarren |date=2021-09-15 |title=Breaking change: Kestrel: Default supported TLS protocol versions changed - .NET |url=https://learn.microsoft.com/en-us/dotnet/core/compatibility/aspnet-core/5.0/kestrel-default-supported-tls-protocol-versions-changed |access-date=2024-11-25 |website=learn.microsoft.com |language=en-us}}{{Cite web |title=YARP Documentation |url=https://microsoft.github.io/reverse-proxy/ |access-date=2024-11-25 |website=microsoft.github.io}}{{Cite web |last=wtgodbe |date=2024-03-14 |title=Use HTTP/3 with the ASP.NET Core Kestrel web server |url=https://learn.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel/http3?view=aspnetcore-9.0 |access-date=2024-11-25 |website=learn.microsoft.com |language=en-us}}