Upgrade politikası
HTTP 101 öncesindeki kabul sırasını ve bağlantı kurulduktan sonra başlayan WebSocket politikalarını ayırın.
Bir istemci WebSocket bağlantısı açarken önce HTTP Upgrade isteği gönderir. Lily bu isteği uygulamanın endpoint, namespace, Origin ve subprotocol politikalarına göre doğrular. Bu aşamada mesaj action'ları henüz çalışmaz.
Kabul sırası#
Kapasite, TLS ve handshake bütçesi
→ exact endpoint, header doğrulaması, namespace
→ Origin ve subprotocol
→ global handshake middleware → controller handshake middleware
→ varsa tek global identity middleware
→ handshake scope cleanup
→ HTTP 101
→ connection admit → bağlantıyı kaydet → opened → connected
→ mesaj döngüsüMiddleware, başarısız bir transport veya Origin kontrolünü sonradan kabul ettiremez. Identity sonucu da handshake scope'u temizlenmeden bağlantıya yayımlanmaz.
Endpoint ve namespace#
Varsayılan endpoint /ws'dir. ws://127.0.0.1:8081/ws?namespace=hello adresinde hem exact path hem kayıtlı namespace gerekir. Path bir HTTP controller route'u değildir; tek Upgrade endpoint'i birçok namespace'i taşır.
Namespace büyük/küçük harfe duyarlıdır. İstemcinin ilk mesajda namespace bildirmesi, Upgrade sırasında eksik namespace'in yerine geçmez. Controller adını URL path'i olarak yazmak da aynı sonucu vermez. Seçim kuralları controller sayfasındadır.
Header ve request bilgisi#
Handshake middleware exchange.request() üzerinden normalize edilmiş bilgiyi okur. Özel header'a erişim yolu:
let authorization = exchange.request().headers()
.get_custom_header("authorization");
let secure = exchange.request().is_secure();Header boyutu, sayısı ve duplicate alanlar transport tarafından doğrulanır. Genel amaçlı query extractor API'si varmış gibi HTTP örneklerini buraya taşımayın. namespace query seçimi public taşıma sözleşmesinin parçasıdır.
headers().get_protocols() istemcinin önerdiği listeyi, negotiated_subprotocol() seçilmiş değeri gösterir. Güvenilir client IP için proxy politikasını kullanın; raw forwarded header'ı doğrudan rate-limit anahtarı yapmayın.
Reddetme sınırı#
101 öncesinde WsHandshakeRejection ile HTTP status, bounded body ve izinli response header'ları üretilebilir. 101 sonrasında yeni bir HTTP 401 veya 429 dönmez; connection/message politikası WebSocket hata veya Close kararı verir.
Auth kontrolünü connected içine koyarsanız HTTP rejection aşamasını geçmiş olursunuz. Pre-101 doğrulama için identity middleware, bağlantı sonrası gözlem için connection middleware kullanın. Global ve controller handshake middleware sıralı çalışır ve kendi fazının süre sınırına tabidir.
Bu sayfanın kaynakları v0.1.0
Anlatım, incelenen framework commit’ine dayanır.