ALPN (Application-Layer Protocol Negotiation), TLS el sıkışması sırasında istemci ile sunucunun hangi uygulama protokolünü konuşacaklarını ek bir gidiş-dönüş olmadan kararlaştırmasını sağlar. HTTP/2'nin tarayıcılarda çalışması ALPN'e dayanır.
Nasıl çalışır?
- İstemci, ClientHello içine tercih sırasına göre bir liste koyar, örneğin
h2vehttp/1.1. - Sunucu listeden desteklediği birini seçer ve ServerHello/EncryptedExtensions içinde bildirir.
- Bağlantı kurulduktan sonra iki taraf seçilen protokolle devam eder.
Yaygın tanımlayıcılar: http/1.1, h2 (HTTP/2 üzerinde TLS) ve h3 (HTTP/3). Bir ortak protokol bulunamazsa sunucu no_application_protocol uyarısı verebilir.
Sunucuda etkinleştirme
# Nginx
server {
listen 443 ssl;
http2 on; # 1.25.1 ve sonrası
# eski sürümlerde: listen 443 ssl http2;
ssl_protocols TLSv1.2 TLSv1.3;
}
# Apache
Protocols h2 http/1.1
Apache'de mod_http2 modülünün yüklü olması gerekir.
Doğrulama
openssl s_client -connect example.com:443 -alpn h2,http/1.1 -servername example.com < /dev/null 2>/dev/null | grep -i "ALPN"
curl -I --http2 https://example.com/
Çıktıda ALPN protocol: h2 görüyorsanız HTTP/2 müzakere edilmiştir.
Ne işe yarar?
- HTTP/2 ve HTTP/3 geçişini ek gecikme olmadan sağlar.
- Aynı porttan farklı protokolleri (örneğin HTTP/2 ve bir özel protokol) ayırt etmeyi mümkün kılar.
- Yük dengeleyicilerde protokole göre yönlendirme yapılabilir.
HTTP/2 yalnızca geçerli bir sertifika ve modern TLS ile tarayıcılarda kullanılır; uygun sertifika için SSL sertifikalarına, test için SSL denetleme aracına bakabilirsiniz.