it-swarm-eu.dev

Proč vůbec sloužit data 1x1 pixelů GIF (webové chyby)?

Mnoho analytických a sledovacích nástrojů vyžaduje 1x1 GIF obrázek (webová chyba, neviditelná pro uživatele) pro ukládání/zpracování událostí napříč doménami.

Proč sloužit tento obrázek GIF vůbec? Nebylo by to efektivnější jednoduše vrátit nějaký chybový kód, například 503 Dočasně nedostupný nebo prázdný soubor?

Update: Chcete-li být jasnější, ptám se, proč sloužit GIF obrazových dat, když jsou všechny informace potřebné již byla odeslána v záhlaví požadavku. Samotný obrázek GIF nevrací žádné užitečné informace.

72
Viliam

Dougova odpověď je velmi komplexní; Myslel jsem, že přidám další poznámku (na žádost OP, mimo můj komentář)

Dougova odpověď vysvětluje, proč jsou pro účely, pro které jsou používány, používány majáky 1x1 pixelů; Myslel jsem, že bych načrtl potenciální alternativní přístup, kterým je použít HTTP Status Code 204, No Content, pro odpověď a neposlat tělo obrázku. 

204 Žádný obsah

Server splnil požadavek , Ale nemusí vrátit tělo subjektu A může chtít vrátit aktualizovanou metainformaci . Odpověď MŮŽE zahrnovat nové nebo aktualizované metainformace Ve formě Záhlaví entit, které, pokud jsou přítomny , By měly být spojeny s požadovaným varianta.

Server v podstatě obdrží požadavek a rozhodne se, že neodesílá tělo (v tomto případě neodesílá obrázek). Ale odpoví kódem, který informuje agenta, že se jedná o vědomé rozhodnutí; v podstatě je to jen kratší způsob, jak odpovědět kladně. 

Dokumentace z Rychlost stránky Google :

Jeden populární způsob, jak zaznamenávat pohledy Asynchronním způsobem, je Zahrnout útržek JavaScriptu do dolní části cílové stránky (Nebo jako událost handler), který oznámí logovacímu serveru, když uživatel načte stránku . Nejběžnějším způsobem Je vytvořit požadavek na Server pro "maják" a kódovat všechna Data zájmu jako parametry v URL zdroje beacon. K Udržujte HTTP odpověď velmi malou, Transparentní 1x1-pixel obraz je dobrý Kandidát pro žádost o maják. [….] O něco optimálnější maják by použil odezvu HTTP 204 ("žádný obsah") , Která je nepatrně menší než 1x1 GIF.

Nikdy jsem to nezkoušel, ale teoreticky by měl sloužit stejnému účelu, aniž by bylo nutné přenášet samotný gif, což vám v případě služby Google Analytics ušetří 35 bytů. (Pokud ve službě Google Analytics neslouží mnoho bilionů návštěv denně, 35 bajtů není opravdu nic.)

Můžete ho otestovat pomocí tohoto kódu:

var i = new Image(); 
i.src = "http://httpstat.us/204";
65
Yahel

Některé prohlížeče mohou zobrazit chybovou ikonu, pokud se zdroj nemohl načíst. To dělá ladění/monitorování služby také o něco složitější, musíte se ujistit, že vaše monitorovací nástroje považují chybu za dobrý výsledek.

OTOH nezískáš nic. Chybová zpráva vrácená serverem/frameworkem je obvykle větší než obraz 1x1. To znamená, že v podstatě nic nezvyšujete síťový provoz.

13
Ulrich Dangel

Protože takový GIF má známou prezentaci v prohlížeči - je to jeden pixel, perioda. Všechno ostatní představuje riziko vizuálního zásahu do skutečného obsahu stránky. 

Chyby HTTP se mohou zobrazit jako nadměrné rámce chybového textu nebo dokonce jako kontextové okno. Některé prohlížeče se mohou také stěžovat, pokud obdrží prázdné odpovědi.

Obrazy na stránce jsou navíc jedním z mála datových typů, které jsou ve výchozím nastavení povoleny ve všech prohlížečích. Všechno ostatní může vyžadovat explicitní akci uživatele ke stažení.

8
thkala

To je odpověď na otázku OP - "proč poskytovat obrazová data GIF ..."

Někteří uživatelé vloží jednoduchou značku img pro volání služby protokolování událostí -

<img src="http://www.example.com/logger?event_id=1234">

V tomto případě, pokud nesloužíte obrázek, prohlížeč zobrazí ikonu zástupného symbolu, která bude vypadat ošklivě a bude působit dojmem, že vaše služba je porušena!

Co mám dělat, je vyhledat pole Accept header. Když je váš skript zavolán prostřednictvím značky img /, jako je tato, uvidíte v záhlaví požadavku něco jako následující -

Accept: image/gif, image/*
Accept-Encoding:gzip,deflate
...

Když je v poli Accept header záhlaví "image/" *, dodám obraz, jinak odpovím jen 204.

4
Harmeet

Hlavním důvodem je připojit soubor cookie, takže pokud uživatelé přecházejí z jedné strany na druhou, stále máme stejný prvek pro připojení souboru cookie.

1

Pokud používáte metodu implementace Beacon API ( https://w3c.github.io/beacon/ ), nemusíte zobrazovat obrázek. 

Kód chyby by fungoval, pokud máte přístup k souborům protokolu serveru. Účelem zobrazení obrázku je získat více dat o uživateli než obvykle pomocí souboru protokolu.

0
fauverism