Укладка ўсё яшчэ паказвае панэль кіравання з часоў да таго, як тунель памёр. Лічбы стану заміраюць, маленькі індыкатар працягвае круціцца, а адрасны радок усё яшчэ трымае праграму, якую вы адкрылі гадзіну таму. Вы нічога не чапалі пасля разрыву, і ўсё ж старонка можа ўсё яшчэ спрабаваць дасягнуць свайго сервера паводле ўласнага раскладу. Менавіта гэта людзі прапускаюць: старонка, якая проста бачная, і старонка, якая ўсё яшчэ дасылае запыты, звонку выглядаюць аднолькава, і толькі адна з іх трапляе ў сеткавы журнал.

Праца, якую старонка пачынае без вас

Чатыры механізмы трымаюць загружаны дакумент занятым. Паўтаральны таймер можа зноў і зноў запускаць выклік стану кожныя некалькі секунд. Fetch можа спрацаваць, калі ўкладка зноў робіцца бачнай пасля таго, як вы вярнуліся да яе. Жывы канал, пабудаваны на WebSocket або падзеях, што дасылае сервер, можа спрабаваць перападключэнне паводле ўласнага графіка адступу. Сэрвісны працаўнік, зарэгістраваны сайтам, можа прачнуцца дзеля пастаўленай у чаргу сінхранізацыі, нават калі перад вамі няма ніводнай укладкі.

Ні адзін з іх не патрабуе кліку, і ні адзін не перазагружае дакумент. Адрасны радок, пазіцыя пракруткі і адлюстраваныя значэнні застаюцца там, дзе былі. Змяняецца толькі сеткавы бок: кожная новая спроба — гэта свежае рашэнне, прынятае ў момант яе пачатку.

Гэтае адрозненне важнае, бо бачная старонка захоўваецца лакальна. Ужо намаляваныя пікселі нічога не кажуць пра тое, ці ўдаўся наступны запыт. Замерлы графік з індыкатарам — звычайны выгляд старонкі, чые запыты цяпер правальваюцца. Чытанне экрана кажа вам, што сервер сказаў некалькі хвілін таму, а не што браўзер робіць цяпер.

Чаму ранейшая загрузка старонкі не ўтрымлівае маршрут

Нішто ў загрузцы старонкі не прывязвае дакумент да тунеля. Маршрутызацыя вырашаецца для кожнага пакета, у момант адпраўкі, з табліцы, якая існуе, калі пакет выходзіць. Калі інтэрфейс тунеля знікае, гэты пошук ужо не адпавядае маршруту тунеля. Ён альбо правальваецца на фізічны адаптар, альбо не знаходзіць нічога, у залежнасці ад таго, што кліент пакінуў пасля сябе.

Паўтаральныя зваротныя выклікі — звычайныя запланаваныя задачы. Раздзел стандарту HTML пра таймеры апісвае, як яны ставяцца ў чаргу, і разглядае інтэрвал як мінімальную затрымку, а не абяцанне дакладнага рытму, таму фонавая ўкладка можа апытваць значна радзей, чым просіць яе код. Менш спроб — не тое самае, што ніякіх спроб, і вяртанне ўкладкі наперад — звычайны момант для іх выбуху.

Дзе асядае палітыка збою

Блок кліента ацэньваецца тады, калі спрабуюць устанавіць злучэнне, а не тады, калі старонка была загружана. Калі звычайны доступ усё яшчэ дазволены, паўторная спроба можа выйсці праз фізічнае звяно ў адкрытым выглядзе. Калі палітыка ўтрымлівае гэты трафік, пакуль тунель не вернецца, спроба правальваецца ў момант злучэння, і старонка паказвае памылку, якую можа паўтарыць праз некалькі секунд.

Дзве дэталі вырашаюць, які з гэтых варыянтаў вы атрымаеце. Першая — абсяг прымянення, які падтрымлівае кліент: блок на ўсю прыладу, блок, абмежаваны адаптарам тунеля, або набор правілаў з выключэннямі. Другая — ці трапляе пункт прызначэння ў выключэнне, якое вы дадалі раней для лакальнага прынтара, палоннага партала або сэрвісу струменевага відэа.

Шыфраванне на ўзроўні праграмы нічога з гэтага не змяняе. HTTPS абараняе байты паміж браўзерам і серверам; ён нічога не кажа пра тое, які інтэрфейс іх нясе. Старонка можа быць цалкам зашыфраванай і ўсё роўна выйсці праз няправільны шлях, і менавіта гэта дазваляе вузкі блок.

Кантраляваная праверка з аднаразовай старонкай

Выкарыстайце хост, які вы кантралюеце, і старонку, якая не робіць нічога, акрамя выкліку да яго, каб у гульні не было рэальных даных. З тэрмінала вазьміце пробу шляху да разрыву і пасля:

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

Запусціце яго з уключаным тунелем, потым выключыце тунель і запусціце зноў. Адказ з публічнага адраса пры выключаным тунелі кажа вам, што прамы шлях адкрыты. Перавышэнне часу або адмоўленае злучэнне кажа вам, што палітыка трымае. Паўтарыце яшчэ раз пасля таго, як кліент перападключыцца, каб убачыць, што шлях тунеля вяртаецца, а не проста выказаць здагадку.

У браўзеры панэль «Сетка» раздзяляе два пытанні. Адфільтруйце да Fetch/XHR, потым прачытайце слупок ініцыятара: запіс, пачаты таймерам або скрыптам, без запісанай перад ім навігацыі, — гэта фонавая спроба, а не перазагрузка. Параўнайце час яго пачатку з момантам, калі тунель абваліўся. Калі запіс усё яшчэ ў чаканні, калі тунель знік, запыт чакае шляху, якога больш не існуе.

Сведчанні з боку сервера мацнейшыя за ўсё, што паказвае браўзер. Журнал запытаў з адзнакай часу і адрасам крыніцы даказвае, што пакет прыбыў. Запісы браўзера могуць несці кукі, токены і поўныя URL, таму пакіньце толькі палі, патрэбныя вашаму пытанню, і вычышчыце астатнія, перш чым уставіць іх куды-небудзь.

Што рабіць з адказам

Калі фонавыя спробы працягваюць удавацца пры выключаным тунелі, блок вузкі, чым вы меркавалі, і гэтую прабоіну варта зачыніць, перш чым давяраць кліенту адчувальную працу. Калі яны правальваюцца, палітыка робіць сваю справу, а замерлая старонка — касметыка. У любым выпадку закрыццё адной укладкі не з'яўляецца кантролем на ўсю прыладу: іншыя ўкладкі, іншыя браўзеры і іншыя праграмы кожная плануе сваю працу.

Вартыя наступныя крокі: пералічыце, якія выключэнні вы дадалі і чаму, пацвердзіце, ці кліент блакуе толькі трафік у межах тунеля ці ўвесь трафік, і прасачыце адзін фонавы запыт ад пачатку да канца з адкрытым журналам сервера. Гэтыя тры адказы ахопліваюць большасць таго, што насамрэч утрымлівае справаздача «VPN абваліўся, а нешта ўсё яшчэ падключана».

Падобныя артыкулы