Az üresen hagyott attribútumokról
Az oldalsávon elérhető a Nicholas C. Zakas blogján Empty image src can destroy your site címen megjelent bejegyzés blogmarkja.
A bejegyzésben Nicholas ismerteti a böngészők egy számára hibásnak tűnő viselkedését.
Arra hívja fel a figyelmet, hogy egy üres
A viselkedés magyarázata az RFC 3986 Uniform Resource Identifier (URI) szerinti helyes működés (már persze kivéve az Explorert, ami ennek a dokumentumnak az előző kiadását követi máig, az útvonal szülőentitását kérve le, és az Operát, ami önkényesen felülbírálva az előírást, semmilyen kérést nem küld). Az üres karakterlánc ugyanis érvényes relatív URL, amit a hétköznapokban is kihasználunk, pl. amikor üres
Firefox, Chrome és Safari alatt hasonló viselkedés tapasztalható, ha a
Miután a helyzetet ismerteti, Nicholas hevesen érvel, és buzdít mindenkit a böngészőfejlesztők „jobb belátásra” bírására, a józan észre és a HTML 5-ben már „javított” előírásra hivatkozva, megadva egy vonatkozó Firefox és Webkit hibajegyet is.
Az igazság azonban az, hogy nagyon is létjogosult és praktikus volna ez a megvalósítás, ha a webfejlesztők és böngészőgyártók nem felejtették volna el (horribile dictu, soha nem is ismerték meg) a HTTP protokollt, és benne mondjuk az
Nicholas, a böngészőgyártók és a webfejlesztők, akik majd nyomatékosítják a közösség „egybehangzó és józan észen alapuló” véleményét a változtatás szükségességéről már rég elfelejtették (de mégis inkább sosem ismerték meg) a HTTP protokollt, ezért most egyesült erővel még szélesebbre tágítják a szabványok és az implementációk közt tátongó szakadékot.
■ A bejegyzésben Nicholas ismerteti a böngészők egy számára hibásnak tűnő viselkedését.
Arra hívja fel a figyelmet, hogy egy üres
src
attribútummal kiszolgált img
elem egy újabb oldallekérést fog eredményezni ugyanezen a címen, ezzel gyakorlatilag megduplázva a kiszolgáló terhelését.A viselkedés magyarázata az RFC 3986 Uniform Resource Identifier (URI) szerinti helyes működés (már persze kivéve az Explorert, ami ennek a dokumentumnak az előző kiadását követi máig, az útvonal szülőentitását kérve le, és az Operát, ami önkényesen felülbírálva az előírást, semmilyen kérést nem küld). Az üres karakterlánc ugyanis érvényes relatív URL, amit a hétköznapokban is kihasználunk, pl. amikor üres
action
attribútummal küldjük vissza az űrlapot az azt generáló címre feldolgozás céljából.Firefox, Chrome és Safari alatt hasonló viselkedés tapasztalható, ha a
link
vagy script
elemek címét hagyjuk üresen.Miután a helyzetet ismerteti, Nicholas hevesen érvel, és buzdít mindenkit a böngészőfejlesztők „jobb belátásra” bírására, a józan észre és a HTML 5-ben már „javított” előírásra hivatkozva, megadva egy vonatkozó Firefox és Webkit hibajegyet is.
Az igazság azonban az, hogy nagyon is létjogosult és praktikus volna ez a megvalósítás, ha a webfejlesztők és böngészőgyártók nem felejtették volna el (horribile dictu, soha nem is ismerték meg) a HTTP protokollt, és benne mondjuk az
Accept
fejlécet. Ha ugyanis így volna, akkor a /cikkek/123
cím URL-sávba írásakor vagy linkként kattintásakor egy application/xhtml+xml
Accept
fejlécet látva legenerálhatnám a HTML oldalt, majd amikor a böngésző a benne talált <link rel="stylesheet" type="text/css" href="" />
, <script type="application/javascript" src=""></script>
és <img src="" alt="Illusztráció" />
sorok hatására intézne egy-egy kérést ugyanarra a címre rendre text/css
, application/javascript
és image/*
Accept
fejléccel, akkor kiszolgálnám a hozzá tartozó stíluslapot, szkriptet és illusztrációt.Nicholas, a böngészőgyártók és a webfejlesztők, akik majd nyomatékosítják a közösség „egybehangzó és józan észen alapuló” véleményét a változtatás szükségességéről már rég elfelejtették (de mégis inkább sosem ismerték meg) a HTTP protokollt, ezért most egyesült erővel még szélesebbre tágítják a szabványok és az implementációk közt tátongó szakadékot.
Igazad van
Ha pedig a gyakorlat mást mutat, mint a szabvány, akkor változzon a szabvány szvsz.
Ha pedig nincs gyakorlati realitása, már miért ne tennének ellene a böngészők? Üres img src-re ne legyen http lekérés és kész.
Másrészt viszont (főleg, ha ez elszigetelt esetekben jelenik meg), mindenki maga figyeljen arra, hogy milyen motort használ, és a hibás, üres img src-ket gyártó motorok számára kéne hibajegyeket bejegyezni, hiszen szabvány, gyakorlat és logika szempontjából ez az ő saruk, nem a böngészőké.
Gyakorlat
Sokan ha tehetik már a
GET
és aPOST
közt sem tesznek különbséget. Erre a fejlécre sem volna nagyobb munka ránézni, mint a műveletre. Persze a konkrét fenti példa valóban kivitelezhetetlen, mert a böngészők maguk sem használják ésszerűen a fejlécet.A képhez csak annyit, hogy teljesen megszokott, hogy egy adott cikkhez lehet kapcsolni pontosan egy darab illusztrációt (amiből mondjuk bélyegképet is generálsz a listázó oldalakon), annak lekéréséhez pedig nem kell egy új címet definiálnod ilyenkor.
Ha pedig nincs gyakorlati realitása, már miért ne tennének ellene a böngészők? Üres img src-re ne legyen http lekérés és kész.
És ha én szeretném használni ezt a lehetőséget? Egy rossz, de maradéktalanul implementált szabvány jobb, mint bármilyen szabványtól eltérő, mert ez utóbbi kiszámíthatatlanná tesz egy platformot (nyolc évnyi Internet Explorer 6 után ezt még ecsetelni kell?). Ha nem tetszik a szabvány, akkor lehet csinálni újat, de ne térjünk el tőle, miközben azt állítjuk, hogy megfelelünk neki.
És csak megerősítendő a végszavad, illetve ismétlendő, amit a blogmark alatt írtam: tessék valid oldalt írni; telepíteni egy validátort és minden lekérésnél vetni egy pillantást az ikonra; figyelmeztetni fog az efféle hibákra. Vagy jó minőségű eszközöket használok, vagy kijavítom a hibáikat, vagy: viselem a következményeket.
Egyetértek
A szabvány (bár nem ismerem és nem is akarok elmerülni benne) leírja, hogy az üres URL hogyan kezelendő; ámde azt nem írja le (vagy máshol, esetleg más szabvány) hogy ha egy HTML oldalon URL-re történik utalás, azzal mi legyen. Ebben a konkrét esetben arra gondolok, hogy ha lenne img src, akkor sem minden esetben történik HTTP kérés, hiszen a képeket a böngésző akár gyorsítótárazhatja is... Miért ne mondhatná azt a böngésző, hogy (mivel az üres img src technikát gyakorlatilag senki sem használja) eleve gyorstárazott semmit töltünk le? Vagyis nem azért nem küld HTTP kérést, mert nem követi a szabványt, hanem azért, mert már gyorsítótárazta a semmit...
(Ebben a konkrét esetben úgy sem mondhatod hogy "És ha én szeretném használni ezt a lehetőséget?" mert úgysem használja senki)
Mit gondolsz?
Gyorstárazás
SEO
nem kapna
One resource, multiple representations
Accept-Language
fejléc alapján kéne történjen, egészen odáig, hogy amennyiben egy tartalom több formátumban is elérhető (pl. a HTML mellett mondjuk PDF), akkor a kiszolgálónak bizony azAccept
alapján kell valamelyiket elküldenie. Ha a Google a fejlécben ugyanazt a formátumot kérné, akkor ugyanazt kapná, ha mást, akkor meg mást.Nem működik
Egyébként én nem örülnék, ha az üres attribútumokra a böngésző _nem_ kérné le az oldalt. Vannak olyan egyszerűbb, gyorsan alkalmi jelleggel összerakott szájtok, ahol egy pár dolgot ennek segítségével oldottam meg. Az URLek szerkezete maradjon konzisztens!
Seo szempontból is
A legegyszerűbb megoldás(?)
Nem egyszerűbb, mint a problémákon és azok megoldásain törni a fejünket.