IIS 10 Performance Tuning: HTTP/3, TLS 1.3, and Worker Pools
Maximize web throughput on Windows Server by enabling HTTP/3 QUIC, tuning TLS 1.3 cipher suites, and optimizing IIS worker application pools.
Netbay Developer Relations
Netbay Engineering
On this page
Internet Information Services (IIS) 10 on Windows Server provides the core hosting engine for enterprise ASP.NET Core, .NET Framework, and PHP enterprise applications. While IIS runs stably out of the box, default installations suffer from conservative worker process timeouts, legacy TLS negotiation overhead, and idle process recycling that causes cold-start latency penalties for initial website visitors.
By tuning the kernel-mode HTTP listener (HTTP.sys), enabling HTTP/3 (QUIC over UDP), and configuring Application Pool AlwaysRunning preload modes, engineers can drastically increase requests per second while dropping 99th percentile response latency.
Activating HTTP/3 and TLS 1.3
Windows Server 2022 and 2025 support HTTP/3 over QUIC natively, but registry parameters must be enabled:
# Enable HTTP/3 in the Windows HTTP kernel driver
Set-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetServicesHTTPParameters" -Name "EnableHttp3" -Value 1 -Type DWord
Set-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetServicesHTTPParameters" -Name "EnableAltSvc" -Value 1 -Type DWord
# Open UDP port 443 for QUIC traffic in Windows Firewall
New-NetFirewallRule -DisplayName "HTTP3-QUIC-UDP-Inbound" -Direction Inbound -Protocol UDP -LocalPort 443 -Action AllowApplication Pool Tuning for High Concurrency
Default Application Pool settings shut down worker processes (w3wp.exe) after 20 minutes of inactivity. When a new user arrives, they experience a 3-5 second delay while the .NET runtime re-initializes. Configure AlwaysRunning and increase request queues via PowerShell:
Import-Module WebAdministration
# Select target Application Pool
$poolName = "ProductionAppPool"
# Prevent idle shutdown and eliminate cold starts
Set-ItemProperty -Path "IIS:AppPools$poolName" -Name "idleTimeout" -Value ([TimeSpan]::FromMinutes(0))
Set-ItemProperty -Path "IIS:AppPools$poolName" -Name "startMode" -Value "AlwaysRunning"
# Increase request queue limit from 1000 to 10000 to buffer traffic spikes
Set-ItemProperty -Path "IIS:AppPools$poolName" -Name "queueLength" -Value 10000
# Enable application preloading on the target website
Set-ItemProperty -Path "IIS:SitesDefault Web Site" -Name "applicationDefaults.preloadEnabled" -Value $trueWeb Encryption and Protocols Video
Review modern TLS 1.3 handshakes, cipher suites, and HTTP protocol evolution:
Enabling Dynamic Output Compression
Enable dynamic Brotli and Gzip compression to minimize bandwidth usage and accelerate client page rendering:
# Install dynamic content compression module
Install-WindowsFeature -Name Web-Dyn-Compression
# Enable dynamic compression on site
Set-WebConfigurationProperty -Filter "/system.webServer/urlCompression" -Name "doDynamicCompression" -Value $True
Set-WebConfigurationProperty -Filter "/system.webServer/urlCompression" -Name "doStaticCompression" -Value $TrueHost high-performance ASP.NET and IIS enterprise apps on Netbay Windows cloud servers at netbayhosts.in.
Keep reading
Follow along on a real VPS
Deploy Linux in under 60 seconds
These guides are written against Ubuntu, Debian, and RHEL-family images — the same ones on NetBay.
Deploy an instance