Sekme hâlâ tünel ölmeden önceki kontrol panelini gösteriyor. Durum sayıları donuyor, küçük bir dönen gösterge dönmeye devam ediyor ve adres çubuğu hâlâ bir saat önce açtığınız uygulamayı taşıyor. Bağlantı koptuktan sonra hiçbir şeye dokunmadınız, yine de sayfa kendi takvimine göre sunucusuna ulaşmaya çalışıyor olabilir. İnsanların gözden kaçırdığı kısım tam olarak bu: yalnızca görünen bir sayfa ile hâlâ istek gönderen bir sayfa dışarıdan aynı görünür ve bunlardan yalnızca biri bir ağ kaydında görünür.

Bir sayfanın sizsiz başlattığı iş

Dört mekanizma yüklenmiş bir belgeyi meşgul tutar. Tekrarlayan bir zamanlayıcı her birkaç saniyede bir durum çağrısını yeniden çalıştırabilir. Sekmeye geri döndükten sonra sekme yeniden görünür olduğunda bir fetch tetiklenebilir. WebSocket veya sunucu tarafından gönderilen olaylar üzerine kurulu canlı bir kanal, kendi geri çekilme takvimine göre yeniden bağlanmayı deneyebilir. Sitenin kaydettiği bir service worker, önünüzde hiç sekme yokken bile kuyruğa alınmış bir eşitleme için uyanabilir.

Bunların hiçbiri tıklama gerektirmez ve hiçbiri belgeyi yeniden yüklemez. Adres çubuğu, kaydırma konumu ve görüntülenen değerler oldukları yerde kalır. Değişen yalnızca ağ tarafıdır: her yeni deneme, başladığı anda alınan taze bir karardır.

Bu ayrım önemlidir çünkü görünen sayfa yerel olarak saklanır. Zaten boyanmış pikseller, sonraki isteğin başarılı olup olmadığı hakkında hiçbir şey söylemez. Dönen göstergeli donmuş bir grafik, istekleri artık başarısız olan bir sayfanın olağan görünümüdür. Ekranı okumak size sunucunun dakikalar önce ne dediğini söyler, tarayıcının şu anda ne yaptığını değil.

Sayfanın önceki yüklemesi neden bir yol tutmuyor

Sayfa yüklemesindeki hiçbir şey belgeyi tünele bağlamaz. Yönlendirme her paket için, gönderme anında, paket çıkarken var olan tablodan çözülür. Tünel arayüzü kaybolduğunda bu arama artık tünel yoluna uymaz. İstemcinin arkasında bıraktığına bağlı olarak ya fiziksel adaptöre düşer ya da hiçbir şey bulamaz.

Tekrarlanan geri çağırmalar olağan planlanmış görevlerdir. HTML standardının zamanlayıcılar bölümü bunların nasıl kuyruğa alındığını açıklar ve aralığı tam ritim vaadi değil, asgari gecikme olarak ele alır; bu yüzden arka plan sekmesi kodunun istediğinden çok daha seyrek yoklayabilir. Daha az deneme hiç deneme olmamasıyla aynı şey değildir ve bir sekmeyi yeniden öne getirmek onların ani patlaması için olağan bir andır.

Başarısızlık politikası nereye iniyor

İstemcinin bloğu sayfa alındığında değil, bir bağlantı denenirken değerlendirilir. Olağan erişime hâlâ izin veriliyorsa yeniden deneme fiziksel bağlantı üzerinden açık şekilde çıkabilir. Politika bu trafiği tünel dönene kadar tutuyorsa deneme bağlanma anında başarısız olur ve sayfa birkaç saniye sonra yeniden deneyebileceği bir hata gösterir.

Hangisini alacağınızı iki ayrıntı belirler. Birincisi istemcinin desteklediği uygulama kapsamı: tüm cihaz için blok, tünel adaptörüyle sınırlı blok veya istisnaları olan kural kümesi. İkincisi, hedefin daha önce yerel yazıcı, yakalama portalı veya akış hizmeti için eklediğiniz bir istisnanın içine düşüp düşmediğidir.

Uygulama düzeyinde şifreleme bunların hiçbirini değiştirmez. HTTPS tarayıcı ile sunucu arasındaki baytları korur; onları hangi arayüzün taşıdığı hakkında hiçbir şey söylemez. Bir sayfa mükemmel şifrelenmiş olabilir ve yine de yanlış yoldan çıkabilir; dar bir bloğun izin verdiği tam olarak budur.

Tek kullanımlık bir sayfayla kontrollü bir sınama

Kontrol ettiğiniz bir ana makine ve onu çağırmaktan başka bir şey yapmayan bir sayfa kullanın, böylece oyunda gerçek veri olmasın. Terminalden bağlantı kopmadan önce ve sonra yolu örnekleyin:

curl -sS --max-time 5 -o /dev/null -w '%{http_code} %{remote_ip}\n' https://probe.example.net/ping

Tünel açıkken çalıştırın, sonra tüneli indirin ve yeniden çalıştırın. Tünel kapalıyken genel bir adresten gelen yanıt doğrudan yolun açık olduğunu söyler. Zaman aşımı veya reddedilen bağlantı politikanın tuttuğunu söyler. İstemci yeniden bağlandıktan sonra bir kez daha yineleyin, varsaymak yerine tünel yolunun geri geldiğini görün.

Tarayıcıda Ağ paneli iki soruyu ayırır. Fetch/XHR'ye filtreleyin, sonra başlatıcı sütununu okuyun: bir zamanlayıcı veya betik tarafından başlatılan, öncesinde hiçbir gezinme kaydedilmemiş girdi yeniden yükleme değil arka plan denemesidir. Başlangıç zamanını tünelin düştüğü anla karşılaştırın. Tünel gittiğinde girdi hâlâ beklemedeyse istek artık var olmayan bir yolu bekliyordur.

Sunucu tarafındaki kanıt tarayıcının gösterdiği her şeyden daha güçlüdür. Zaman damgası ve kaynak adresi olan bir istek günlüğü paketin ulaştığını kanıtlar. Tarayıcı girdileri çerezler, belirteçler ve tam URL'ler taşıyabilir, bu yüzden yalnızca sorunuzun ihtiyaç duyduğu alanları tutun ve gerisini herhangi bir yere yapıştırmadan önce gizleyin.

Yanıtla ne yapmalı

Tünel kapalıyken arka plan denemeleri başarılı olmaya devam ediyorsa blok sandığınızdan daha dardır ve o boşluğu hassas işi istemciye emanet etmeden önce kapatmaya değer. Başarısız oluyorlarsa politika işini yapıyordur ve donmuş sayfa yalnızca görüntüdür. Her iki durumda da bir sekmeyi kapatmak cihaz çapında bir denetim değildir: diğer sekmeler, diğer tarayıcılar ve diğer uygulamalar kendi işlerini kendileri planlar.

Atmaya değer sonraki adımlar: hangi istisnaları ve neden eklediğinizi listeleyin, istemcinin yalnızca tünel kapsamındaki trafiği mi yoksa tüm trafiği mi engellediğini doğrulayın ve sunucu günlüğü açıkken bir arka plan isteğini baştan sona izleyin. Bu üç yanıt, «VPN düştü ve bir şey hâlâ bağlı» türü bir raporun gerçekte içerdiğinin çoğunu kapsar.

İlgili makaleler