Windows·6 min read·

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.

NB

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.

Expand
Web Server Optimization
IIS 10 Performance and HTTP3 Architecture
IIS 10 HTTP.sys Kernel Architecture & HTTP/3 QUIC Stack Browser Request HTTP/3 QUIC (UDP 443) HTTP.sys Driver Kernel-mode request cache AppPool Queue queueLength 10000 w3wp.exe Worker AlwaysRunning preload active Kernel caching in HTTP.sys serves static assets directly without user-mode context switches.

Activating HTTP/3 and TLS 1.3

Windows Server 2022 and 2025 support HTTP/3 over QUIC natively, but registry parameters must be enabled:

powershell
# 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 Allow

Application 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:

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 $true

Web Encryption and Protocols Video

Review modern TLS 1.3 handshakes, cipher suites, and HTTP protocol evolution:

HTTPS, TLS 1.3, and Modern Web Protocols
YouTube

Enabling Dynamic Output Compression

Enable dynamic Brotli and Gzip compression to minimize bandwidth usage and accelerate client page rendering:

powershell
# 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 $True

Host 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