Pravděpodobně jste si už někdy všimli, že žádná URL adresa neobsahuje mezeru nebo jiné speciální znaky. Vše je pečlivě ukryto za URL kódováním, které si v tomto příspěvku představíme.

Význam kódování

Pomocí HTTP protokolu se běžně předávají různé parametry, které ovlivňují chování webových aplikací. Pro většinu uživatelů je nejviditelnější předávání dat v adresním řádku, přesnějí řečeno pomocí HTTP metody GET a parametrů předávaných v URL adrese.

Platné znaky v URL se omezují na základní množinu ASCII znaků (0x20 až 0x7e), ostatní rozšířené znaky ASCII se musí před přenosem zabezpečit URL kódováním.

URL kódování

URL kódování kóduje znaky z rozšířené ASCII do její základní bezpečné množiny. Kód se zapisuje pomocí znaku procenta a dvojciferné hexacedimální číslice, například kód %20 označuje mezeru.

Následující výpis ukazuje mapování vybraných kódů. Úplný přehled je k nahlédnutí na stránkách w3schools (URL encoding).

Kódování si vyzkoušíme nejlépe na následujícím příkladu.

Příklad 1 – URL adresa jako parametr

Představme si situaci, že máme na serveru s doménou www.example.com webovou stránku, která přijímá parametr statistika s URL adresou a dvěmi klíčovými slovy, která jsou oddělena mezerou. Pro ilustraci předpokládejme, že stránka počítá výskyt slov školení hackingu na URL adrese hackingkurzy.cz. Volání takové URL adresy by mohlo vypadat následovně.

Jak sami vidíme, nejedná se o správný zapis URL adresy. Pokud to za nás neudělá webový prohlížeč, budeme muset hodnotu parametru statistika zakódovat pomocí URL kódování do následujícího tvaru.

Dvojité URL kódování

Výskyt dvojitého kódování je spíše zvláštní jev, se kterým se můžete setkat. Jak název napovídá, jedná se o opakované kódování.

První iterace URL kódování odstraní všechny nežádoucí ASCII znaky. Druhá iterace URL kódování způsobí pouze nahrazení všech znaků procenta kódem (%25), čímž se kódovaný text prodlužuje. Zápis dvojitého kódování je tedy %25 a dvojciferné hexadecimální číslo. Podívejme se rovnou na příklad.

Příklad 2 – dvojité URL kódování

Jako vstupní data si vezmeme tento text, reprezentující špatně zapsanou URL adresu.

(1) Provedeme první iteraci URL kódování.

(2) Provedeme druhou iteraci URL kódování.

Z výpisu vidíme sekvence kódů %2523, %252f, %2520, které jsou pro dvojité kódování typické.

Závěr

V dnešním příspěvku jsme si ukázali na příkladech jednoduché a dvojité URL kódování. Další experimenty si můžete sami zkoušet pomocí online URL kóderu a dekóderu.