Utne prohlížeč provoz při stisku křížku?

Hamparle

  • ****
  • 365
  • junior developer ucho
    • Zobrazit profil
    • E-mail
Utne prohlížeč provoz při stisku křížku?
« kdy: 13. 08. 2023, 19:58:11 »
Pokud na stránce stisknu❌(vedle←→🏠)

,co to detailně uděká? Jaká je záruka, že tab neodešle ani bajt? Pošle browser RST nebo dropnhe nebo stávající resource do-na-čte) nebo nechá doběhnout i dané tcp?

Co třeba fetch objevivší se 33s po stisku❌?

Ps: hodilo by se mi aby to tlačítko❌ tam bylo furt, ne aby se střídali s reload🔁

Na Některé stránky by to bylo Žádoucí
« Poslední změna: 13. 08. 2023, 21:13:01 od Petr Krčmář »


z_sk


Re:Utne prohlížeč provoz při stisku křížku?
« Odpověď #2 kdy: 13. 08. 2023, 21:39:30 »
Může to záviset na konkrétním browseru, jak to autoři implementují, ale mělo by to přerušit právě probíhající stahovaní všech souborů (stránka, obrázky, skripty...) a uzavřít spojení. Je to v browseru právě proto, když se něco načítá dlouho, aby to šlo snadno přerušit.
A nezaručuje ti to do budoucna nic, protože, pokud už jsou nějaké skripty stažené a běží, tak si můžou kdykoliv v budoucnu navazovat samostatně další spojení a přes ně načítat nebo odesílat data.

Re:Utne prohlížeč provoz při stisku křížku?
« Odpověď #3 kdy: 14. 08. 2023, 08:50:35 »
Jednoducha odpoved: nikto nevie. V praxi by ale mal ukoncit aktualne nacitavanie a spracovavanie stranky. Ale to neznamena, ze ak nacital js, ktory pravidelne komunikuje so servrom na pozadi, ze stopne aj tu komunikaciu.
Proste stopne to, co prave browser nacita.

Re:Utne prohlížeč provoz při stisku křížku?
« Odpověď #4 kdy: 15. 09. 2023, 11:50:30 »
Pokud chcete, aby stránka nic neodeslala, doporučím:

1. Privátní režim. Sám o sobě nic nezajistí, ale bez něj si stránka může něco uložit a odeslat později. Privátní režim zajistí, že se data následně zahodí. Pozor, IIRC některé prohlížeče zahodily uložená data až po zavření všech privátních oken.
2. Offline režim. Pak stránka nemůže nic odeslat. Pravda, může si něco uložit a odeslat později, ale na to máme privátní režim.


Re:Utne prohlížeč provoz při stisku křížku?
« Odpověď #5 kdy: 15. 09. 2023, 12:17:26 »
Pozor, IIRC některé prohlížeče zahodily uložená data až po zavření všech privátních oken.
Imho mají běžné prohlížeče pro všechny private okna/taby jen jednu session.

Mlocik97

  • *****
  • 908
  • Ubunťák, JS dev.
    • Zobrazit profil
    • E-mail
Re:Utne prohlížeč provoz při stisku křížku?
« Odpověď #6 kdy: 15. 09. 2023, 12:33:57 »
Ľudia tu tárajú nezmysli a jeden ani nepochopil otázku.

Tak ja to vysvetlím, reálne ako to je (a niektorý to skutočne vedia).

Keď sa vytvára history entry, ukladá sa stav stránky aj do tzv. BFCache (back-forward cache)...

Keď do adresného riadka zadáš URL a stlačíš enter, alebo klikneš na link na nejakej webstránke a pod. Odošle sa GET request na server (tá dostane týmto teda aj tvoju IP a všetky hlavičky vrátane User-Agent. Ak v polovici requestu klikneš na "zrušiť načitávanie", na strane prehliadača sa request vyradí z čakajúcej fronty na resolving. Keď prehliadač to vo fronte nemá, a server odpovie, jednoducho je odpoveď od servera zahodená. (server teda dostane všetky info z požiadavky, ale ty nedostaneš odpoveď, resp. rovno ju zahodíš).

Keď vo Form vyplníš dáta a odošleš požiadavku, je to obdoné ako full-reload. Avšak čokoľvek z webstránky môže byť už nejakým spôsobom upravené, môže byť implementovaný AbordSignal a obdobné veci. Rôzne weby vedia využiť aj BFCache a implementovať DOM snapshots a podobné vylomeniny, kedy sa obsah formu (text ktorý si napísal to políčok) zostane aj po reloade stránky, či navigácii vzad a pred a pod. Takže tieto vedia upraviť chovanie pri kliknutí "stop reload". Avšak ak už je request raz poslaný, server ho takmer vždy obdrží (ak nie je chyba po ceste alebo na servery samotnom), akurát odpoveď je zahodená.

V prípade fetch je to ešte viac v rukách stránky. Ostatne, ale ak sa jedná o POST, dáta sa už môžu reálne odoslať na server, a kliknutím "X" by podobne ako u navigácii na stránku, iba zahodila odpoveď.

Navyše nie každý request sa pošle okamžite, prehliadače implementujú frontu "v stave na odoslanie", ktorá sa naopak môže "vyprázdniť" pri kliknutí "stop reloading". A tieto requesty sa nepošlú, avšak takmer nikdy sa ti nepodarí byť "natoľko" rýchly. Navyše hovorím môže, ale aj nemusí, každý prehliadač to implementuje trocha inak, a Chrome napríklad kvôli konzistencii (a predvídateľnosti stavu), preferuje odoslanie týchto requestov. Plus ešte prehliadače vedia fronty "uzamknúť" a obnoviť po znovu otvorení a pod. (často krát to je aj v prípade service-workeru, kde presne vidieť ako na mobiloch push notifikácia vyskočí práve keď otvoríš prehliadač).

---

Jo a síce na to originálny dotaz sa nepýtal, ale už niekto tu hovoril o zatvorení tabu či zatvorení prehliadača... tak len poviem toľko že prehliadač môže v pohode komunikovať s webstránkami aj na pozadí, aj keď karta či prehliadač je zatvorený. Existujú metódy ako service-workers a background-sync (díky ktorému funguje napríklad push notifikácia).
Dá sa to ale vypnúť aspoň na toľko že ukončením prehliadača (nie karty) je možné ukončiť aj beh service-worker. V Chrome je to v nastavení -> Systém -> Po zatvorení prehliadača Google Chrome nechať aplikácie na pozadí spustené.

Firefox implementuje obdobnú vec, sú tam nejaké rozdiely, ale zhruba je to podobné.

Mlocik97

  • *****
  • 908
  • Ubunťák, JS dev.
    • Zobrazit profil
    • E-mail
Re:Utne prohlížeč provoz při stisku křížku?
« Odpověď #7 kdy: 15. 09. 2023, 12:37:39 »
Pozor, IIRC některé prohlížeče zahodily uložená data až po zavření všech privátních oken.
Imho mají běžné prohlížeče pro všechny private okna/taby jen jednu session.

LocalStorage je zdielaná pre doménu, takže aj 100 tabov so stejnou doménov, všetky majú prístup k stejným dátam.
SessionStorage je per tab, teda každý tab má vlastný SessionStorage
Cookies sú zdielané pre doménu.