1 puan yazan GN⁺ 4 시간 전 | 1 yorum | WhatsApp'ta paylaş
  • Bir web sitesi HTTPS DNS kaydında HTTP/3 desteğini yayımlarsa, tarayıcı ilk bağlantıdan itibaren QUIC/HTTP/3 kullanabilir ve bir bağlantı gidiş-dönüşünü azaltabilir
  • Tarayıcılar ya önce HTTP/1 veya HTTP/2 ile bağlanıp Alt-Svc başlığını okuyarak ya da DNS sorgusu aşamasında HTTPS kaydını okuyarak HTTP/3 desteğini keşfeder
  • Firefox Nightly ölçümlerinde bağlantıların %31,4’ü HTTP/3 bilgisini yalnızca Alt-Svc başlığıyla duyurdu; bu durumda HTTP/3 yalnızca sonraki bağlantılarda kullanılır {p:31}
  • HTTPS kayıtları alpn, ech, ipv4hint, ipv6hint içerir; böylece ilk bağlantının protokol seçimi, ECH ve adres ipuçları DNS yanıtı içinde sağlanır
  • HTTPS kayıtları mevcut istemciler için ek olarak çalışır ve Alt-Svc, kaydı alamayan istemciler için fallback olarak korunmalıdır

Temel kavram

  • Tarayıcılar bir sitenin HTTP/3 desteğini iki şekilde keşfeder
    • Önce HTTP/1 veya HTTP/2 ile bağlanıp ardından Alt-Svc HTTP başlığını okuma yöntemi vardır
    • Bağlantı açılmadan önce HTTPS DNS kaydı sorgusunda bunu doğrudan görme yöntemi vardır
  • Tarayıcı yalnızca HTTPS DNS kaydı kullanıldığında ilk bağlantıdan itibaren HTTP/3 kullanabilir; bu da QUIC sayesinde bir gidiş-dönüşü azaltır
  • Firefox Nightly’nin son derlemelerinin ortalama tahminine göre bağlantıların %31,4’ü HTTP/3 desteğini DNS yerine yalnızca Alt-Svc başlığıyla duyurdu
  • Şu anda bu sunucuya olan tek bir gidiş-dönüş yaklaşık 28ms olarak ölçülüyor

Alan adı kontrolü

  • savearoundtrip.com, h3, IP ipuçları ve ECH içeren HTTPS kayıtlarını kendisi yayımlar
  • Girdiğiniz alan adının HTTPS kaydı, tarayıcıda Cloudflare’ın DNS-over-HTTPS uç noktası üzerinden sorgulanır
  • Alt-Svc başlığı ve gerçek HTTP/3 el sıkışması doğrudan tarayıcıda doğrulanamaz
    • CORS, farklı origin’lerden gelen başlıkları gizler
    • Tarayıcı soğuk bir QUIC bağlantısını zorla oluşturamaz
  • Girilen alan adı küçük bir açık kaynak backend’e gönderilir; bu backend yalnızca Alt-Svc kontrolü ve gerçek HTTP/3 el sıkışması kontrolünü yapar
  • Veriler saklanmaz ve gerçek HTTP/3 el sıkışması quic-go ile gerçekleştirilir

Bir gidiş-dönüşün maliyeti

  • Bir gidiş-dönüş, sunucuya bir mesaj gönderip yanıt alma sürecidir ve ışık hızıyla sınırlıdır
  • Yaklaşık gidiş-dönüş süresi aynı şehir içinde 5~20ms, ülkeler arasında 40~80ms, okyanus aşırı veya mobil ağlarda 150ms ve üzeridir
  • Cloudflare Radar gerçek zamanlı değerler sunar
  • Yaklaşık 100ms altındaki etkileşimler anlık hissedilir; bunun üzeri bekleme hissi verir
  • Bu sayfada bağlantının başlamasından ilk boyamaya kadar yaklaşık 41ms geçti ve bu sunucuya olan gerçek zamanlı tek bir gidiş-dönüş yaklaşık 28ms
  • Yayımlanmış HTTPS kaydı, tarayıcının ilk bağlantıda TCP yerine QUIC kullanmasını sağlayarak bu gidiş-dönüş süresini azaltabilir
  • Bu sayfa statik ve küçük olduğu için toplam zaman bütçesi düşüktür; ancak gerçek uygulamalarda da bir gidiş-dönüş ön tarafta ödenen sabit bir maliyettir ve birden çok origin için tekrar edilebilir

Boşa harcanan gidiş-dönüş

  • Alt-Svc, RFC 7838 kapsamında tanımlanan bir HTTP yanıt başlığıdır
  • İstemcinin Alt-Svc başlığını okuyabilmesi için önce TCP bağlantısını açmış, TLS el sıkışmasını tamamlamış ve HTTP/1.1 ya da HTTP/2 ile isteği bitirmiş olması gerekir
  • Bu yaklaşımda sunucunun HTTP/3’ü de desteklediği ancak önceki bağlantıdan sonra öğrenilir; dolayısıyla HTTP/3’e geçiş bir sonraki bağlantıda gerçekleşir
  • RFC 9460 ile tanımlanan HTTPS kaydı, aynı HTTP/3 destek sinyalini DNS içine taşır
  • İstemci bu kaydı zaten yaptığı isim çözümlemesi sırasında okuduğu için bağlantıyı açmadan önce HTTP/3 desteğini öğrenebilir
  • HTTPS DNS kaydı kullanıldığında ilk bağlantıdan itibaren QUIC/HTTP/3 kullanılabilir; önce HTTP/1 veya HTTP/2 bağlantısı tüketmek gerekmez

HTTPS kayıtlarının daha iyi olmasının nedeni

  • İlk bayttan önce HTTP/3 keşfi

    • alpn SvcParam, uç noktanın desteklediği ALPN protokol kimliklerini listeler
    • Örnekler arasında h3 yani HTTP/3 ve h2 bulunur
    • Bu bilgi isim çözümlemesi sırasında geldiği için istemci h3 desteğini önceki bir HTTP/1 veya HTTP/2 bağlantısından sonra öğrenmek yerine ilk bağlantıdan itibaren QUIC seçebilir
  • ECH: Şifrelenmiş Client Hello

    • ech SvcParam, uç noktanın ECHConfigList açık anahtarını içerir
    • ECH, SNI sunucu adı dahil TLS ClientHello’yu şifreleyerek ağ gözlemcilerinin ziyaret edilen siteyi görememesini sağlar
    • Bu sorun HTTP başlıklarıyla çözülemez; çünkü ilk ClientHello gönderilmeden önce açık anahtar gerekir
    • Anahtar, henüz bağlantı yokken gerektiği için yalnızca DNS’teki HTTPS kaydı gibi bant dışı bir kanal ECH’yi bootstrap edebilir
    • HTTPS RR olmadan ECH de kullanılamaz
  • IP ipuçlarıyla daha hızlı bağlantı başlangıcı

    • Happy Eyeballs v3, A, AAAA ve HTTPS sorgularını paralel yürütür
    • HTTPS yanıtındaki ipv4hint ve ipv6hint, A/AAAA kayıtlarından önce geldiğinde bağlantı için aday adresler sağlar
    • İstemci A/AAAA yanıtlarını beklemek yerine ipucu adresleriyle bağlantıyı başlatabilir
    • A/AAAA kayıtları gelmeye devam eder ve geldiklerinde ipuçlarının yerini alır
    • Alt-Svc içinde buna karşılık gelen bir özellik yoktur
  • Tek otorite kaynağı ve önbellekleme

    • Erişilebilirlik bilgisi, normal TTL ile DNS içinde kalabilir
    • Alt-Svc yaklaşımında bilgi origin bazlı HTTP başlık önbelleklerine dağılır ve bir max-age ikilemi ortaya çıkar
    • max-age çok uzunsa istemciler eski alternatifleri kullanır, çok kısaysa daha sık önceki protokole geri döner
    • Tarayıcılar zaten DNS sorgusu yaptığı için HTTPS kayıtları bu sorgunun en uygun bağlantı bilgisini de taşımasını sağlar
  • Özellik karşılaştırması

    • | Özellik | Alt-Svc HTTP başlığı (RFC 7838) | HTTPS RR (RFC 9460) |
    • | --- | --- | --- |
    • | Öğrenme zamanı | Tam bağlantıdan sonra | DNS çözümlemesi sırasında |
    • | İlk bağlantıda h3 | Mümkün değil | Mümkün |
    • | IP ipuçları | Yok | ipv4hint / ipv6hint |
    • | ECH anahtarı | Mümkün değil | ech parametresi |
    • | Gerçeğin kaynağı | HTTP başlığı ve kırılgan önbellek | TTL’li DNS |

Gerçek tarayıcı ölçümleri

  • Firefox Nightly ölçümlerinde tarayıcı HTTP/3 desteğini ya Alt-Svc HTTP yanıt başlığıyla ya da HTTPS DNS kaydıyla öğrenebilir
  • Alt-Svc ancak bağlantı kurulduktan sonra görünür; HTTPS DNS kaydı ise bağlantıdan önce görünür
  • Tüm bağlantılar dört gruptan birine girer
    • Neither, HTTP/3’ün hiç duyurulmadığı bağlantıdır
    • Alt-Svc only, yalnızca başlıkla duyurulan ve bu yüzden ilk bağlantıda HTTP/3 kullanılamayan bağlantıdır
    • HTTPS record only, DNS üzerinden duyurulan ve ilk bağlantıdan itibaren HTTP/3’e gidebilen bağlantıdır
    • Both, hem DNS hem de başlık üzerinden duyurulan bağlantıdır
  • Ölçülen bağlantı oranları sırasıyla Neither %59,8, Alt-Svc only %31,4, HTTPS record only %2,8 ve Both %6’dır {b:60,31,3,6}
  • Bu dört grup tüm bağlantıları kapsadığı için toplamları %100’dür
  • HTTPS record only ve Both gruplarında kullanılabilir HTTPS kaydı vardı; Alt-Svc only ise kayıt olsaydı azaltılabilecek gecikme aralığıydı
  • Bu değerler Firefox Nightly’nin GLAM histogramlarından yeniden oluşturulmuş bağlantı bazlı tahminlerdir ve son derleme ortalamaları olduğu için yaklaşık değerlerdir

HTTPS kaydı yayımlama

  • h3 ve adres ipuçlarını duyuran bir ServiceMode HTTPS kaydı tek satırda yayımlanabilir
; zone file (BIND-style)
example.com.  3600  IN  HTTPS 1 . alpn="h3,h2" ipv4hint=203.0.113.10 ipv6hint=2001:db8::10
  • example.com. kaydın yayımlandığı addır; sondaki nokta bunun tam alan adı olduğunu gösterir
  • 3600, çözücünün kaydı önbelleğe alabileceği saniye cinsinden TTL değeridir
  • IN, tüm web kayıtlarında olduğu gibi internet DNS sınıfıdır
  • HTTPS, RFC 9460 tarafından tanımlanan kayıt türüdür
  • 1, önceliktir; 1 ve üzeri, parametre taşıyan ServiceMode anlamına gelir
  • 0, yalnızca başka bir hedefe işaret eden AliasMode’dur
  • . hedef ana makinedir ve example.com yani sahip adın kendisini ifade eder
  • alpn="h3,h2", sunucunun desteklediği protokolleri iyi bir sırayla listeler; h3 HTTP/3, h2 ise HTTP/2’dir
  • ipv4hint ve ipv6hint, istemcinin A/AAAA sorgularıyla birlikte hemen bağlantı başlatabileceği adreslerdir
  • Cloudflare, Route 53 gibi çoğu yönetilen DNS sağlayıcısı HTTPS kayıt türünü doğrudan sunar
  • Alan adının desteklenip desteklenmediği checker ile doğrulanabilir

Gerçek HTTPS kayıtlarının taşıdığı özellikler

  • Firefox Nightly’de HTTPS kaydı görülen bağlantılarda hangi özelliklerin bulunduğunun oranı ölçüldü
  • ALPN içindeki h3 oranı %80,3, IPv4 ipucu oranı %52,9’du
  • IPv6 ipucu oranı %49,4, ECH oranı ise %12,8’di {b:80,53,49,13}
  • Bu sayılar GLAM histogramlarından yeniden oluşturulmuş bağlantı bazlı tahminler olduğu için yaklaşık değerlerdir

SSS

  • CDN bunu otomatik yayımlıyor mu

    • Bazı CDN’ler HTTPS kayıtlarını otomatik yayımlar
    • Cloudflare, proxy kullanılan zone’lar için alpn="h3" içeren HTTPS kayıtlarını otomatik sağlar
    • Diğer CDN’lerde kullanıcıların bunu kendileri yapılandırması gerekir
    • Kontrol etmenin en hızlı yolu yukarıdaki alan adı kontrolünü kullanmaktır
  • HTTPS kayıtları eski istemcileri bozar mı

    • HTTPS kayıtlarını anlamayan istemciler bu kayıtları yok sayar ve normal A/AAAA sorgularına geri döner
    • Hâlâ Alt-Svc başlığı gönderiyorsanız bu istemciler o başlıktan da yararlanabilir
    • HTTPS kaydı yayımlama yöntemi mevcut davranışa eklenen bir yöntemdir
  • Yeniden ziyarette ne olur

    • İstemci bir kez HTTP/3 ile iletişim kurduktan sonra sonraki ziyarette QUIC bağlantısını 0-RTT ile sürdürebilir
    • 0-RTT’de el sıkışma gidiş-dönüşü olmadan ilk istek hemen gönderilebilir
    • HTTPS kaydının kendisi de diğer DNS yanıtları gibi TTL süresince önbelleğe alınır; bu yüzden sonraki ziyarette çoğunlukla sorgu da atlanır
  • Hangi tarayıcılar HTTPS kaydını kullanıyor

    • Başlıca tarayıcı motorları HTTPS kayıtlarını varsayılan olarak etkin destekliyor
    • Ziyaretçinin DNS-over-HTTPS’i açıp açmadığından bağımsız olarak bu kayıtları okurlar
    • Safari işletim sistemi çözücüsünü kullanır
    • Chrome kendi yerleşik çözücüsünü kullanır ve DoH veya normal DNS üzerinden çalışır
    • Firefox her iki yöntemi de kullanabilir
  • Alt-Svc başlığını kaldırmalı mıyım

    • Alt-Svc başlığı kaldırılmamalıdır
    • Eski istemciler ile HTTPS kaydını iletmeyen çözücüler veya ağlar için fallback olarak gönderilmeye devam etmelidir
    • HTTPS kaydını okuyan tarayıcılar HTTP/3 desteğini DNS’ten öğrenir ve HTTP/3 keşfi için bir gidiş-dönüş harcamaz

1 yorum

 
GN⁺ 4 시간 전
Lobste.rs görüşleri
  • Web barındırma sağlayıcısı henüz H3 desteği sunmuyor, ancak yeni sunucu sürümüne ücretsiz yükseltme yapıp test edebilirim
    Bitince HTTPS DNS kaydı ayarlamayı planlıyorum
  • Apple’ın dig sürümü 9.10.6, bu yüzden bu kayıt türünden daha eski bir sürüm gibi görünüyor
    Apple’ın daha güncel bir dig sunması gerekirmiş gibi geliyor; macOS’ta DNS sorgusu yaparken tercih ettiğiniz bir araç var mı merak ediyorum
    • Birden fazla platformda doggo kullanmayı seviyorum
      Kusursuz değil ama genel olarak oldukça iyi çalıştı ve ihtiyaç duyduğum özelliklerin önemli bir kısmını karşılıyor

    • Homebrew ile kurduğum ldns içindeki drill aracını kullanıyorum

      % drill -Q https savearoundtrip.com  
      1 . alpn=h3,h2 ipv4hint=104.21.20.43,172.67.191.84 ech=AEX+DQBBzwAgACAdG3AfYFkusczSXA/kky1bgK67QViv5mNKyS3ITnrWbAAEAAEAAQASY2xvdWRmbGFyZS1lY2guY29tAAA= ipv6hint=2606:4700:3030::ac43:bf54,2606:4700:3037::6815:142b  
      
  • HTTPS kaynak kaydı varsa bunu okuyan tüm istemciler güvenli bağlantı kurar
    QUIC desteği olmasa bile
  • Bu yazıya neden vibe coding etiketi eklendiğini anlamıyorum
    Neredeyse söylenebilecek tek şey, CSS’in LLM’den çıkmış gibi görünebilmesi
    • İlk commit kesinlikle LLM ile oluşturulmuş gibi görünüyor: https://github.com/mxinden-bot/savearoundtrip/…
      Ayrıca yazı çok geveze. Tekrarlar, işe yaramayan içerikler ve garip görselleştirmeler var; bu yüzden yaklaşık 1700 kelimelik metin tam genişlikte sayfada 7300 px’i aşıyor
      500 kelime, 2 diyagram ve toplam uzunluk 2000 px’in altında olacak şekilde kısaltılırsa çok daha iyi olur