Komprese HTTP
Komprese HTTP je v informatice vestavěná vlastnost webových serverů a prohlížečů umožňující lépe využít dostupný datový tok a zároveň zajistit rychlejší přenosové rychlosti mezi serverem a klientem.[1] Data přenášená přes protokol HTTP jsou komprimována ještě před odesláním klientovi; kompatibilní prohlížeč podá HTTP žádost o data zhruba tak, že do požadavku vloží hlavičku Accept-encoding, do které zapíše podporované kompresní algoritmy, a následně dostane odpověď s daty zkomprimovanými jedním z těchto algoritmů. Nekompatibilní prohlížeč by nebyl schopen přijatá zkomprimovaná data rozbalit, takže by bylo zbytečné žádat o komprimovaná data. Současné nejběžnější komprimační algoritmy jsou gzip a deflate (abstraktní knihovna využívající deflate je například zlib), ačkoli kompletní seznam dostupných algoritmů je udržován IANA.[2] Kromě toho třetí strany vyvíjejí nové kompresní metody a vkládají je do jejich softwarových produktů (například Google SDCH systém je implementován ve vyhledávači Google Chrome, který ho využívá při komunikaci s určitým okruhem serverů Google).
V roce 2009 vyšel od inženýrů Google Arvinda Jaina a Jasona Glasgowa článek, ve kterém spočítali časové ztráty v případě, že by se kompresní metody nepoužívaly. Součet promarněného času všech uživatelů internetu za jeden den by v takové situaci převyšoval 99 let. K problémům s komprimovaným přenosem dochází také například v situacích, kdy antivirový software nutí prohlížeč přijímat nekomprimovaná data, kdy je použito připojení přes proxy a opatrné prohlížeče nepovolí kompresi, pokud jsou špatně nastavené servery, nebo pokud jsou v prohlížečích chyby zabraňující správnému běhu HTTP komprese. Pokud byl Internet Explorer 6 za proxy (běžné nastavení v podnicích), byl nastaven tak, aby spadnul z technologie HTTP 1.1 na HTTP 1.0 (která prakticky neumožňuje kompresi a vůbec zřetězování). Díky těmto skutečnostem byl IE6, ve své době nejpoužívanější prohlížeč, nejvíce náchylný na využívání nekomprimovaného HTTP.
Vyjednávání komprese
[editovat | editovat zdroj]Ve většině případů, vyjma použití SDCH, se vyjednávání provede ve dvou krocích popsaných v RFC 2616:
1. HTTP žádost poslaná webovým klientem obsahuje řádek Accept-Encoding se jmény podporovaných kompresních schémat (pojmenovaných content-coding tokens) oddělených čárkami.
GET /encrypted-area HTTP/1.1 Host: www.example.com Accept-Encoding: gzip, deflate
2. Pokud server podporuje jedno nebo více z uvedených kompresních schémat, odchozí data mohou být komprimována jednou nebo více metodami podporovanými oběma stranami. V takovém případě server přidá řádek Content-Encoding do hlavičky HTTP odpovědi se seznamem použitých schémat oddělených čárkami.
HTTP/1.1 200 OK Date: Mon, 23 May 2005 22:38:34 GMT Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux) Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT Etag: "3f80f-1b6-3e1cb03b" Accept-Ranges: bytes Content-Length: 438 Connection: close Content-Type: text/html; charset=UTF-8 Content-Encoding: gzip
Webový server není v žádném případě povinen použít jakoukoliv kompresní metodu. Použití kompresních metod závisí výhradně na vnitřním nastavení serveru a také může záviset na vnitřní architektuře žádaných webových stránek.
V případě použití SDCH je slovníkové vyjednávání také vyžadováno, může ovšem zahrnovat dodatečné kroky jako stažení přesného slovníku z externího serveru.
Hodnoty pro Content-coding
[editovat | editovat zdroj]- compress – metoda používaná stejnojmenný un*xovým programem
- deflate – Navzdory svému jménu by komprese zlib (RFC 1950) měla být použita (v kombinaci s deflate – RFC 1951) v souladu s RFC 2616. Ve skutečnosti se ale implementace mezi zlib a deflate odchyluje od dohodnutých pravidel.[3][4] Díky těmto zmatkům se lidem podporujícím gzip podařilo přesvědčit internetovou komunitu, že gzip je spolehlivější výchozí metoda (březen 2011).
- exi – W3C Efficient XML Interchange
- gzip – GNU zip formát (popsán v RFC 1952). Tato metoda je v současnosti nejšířeji podporovaná (březen 2011).[5]
- identity – Žádná transformace dat. Toto je výchozí nastavení položky content coding.
- pack200-gzip – Síťový transportní formát pro Java archivy.[6]
- SDCH – Google Shared Dictionary Compression for HTTP
- bzip2 – Freeware open source bezztrátový kompresní algoritmus.
- peerdist – Microsoft Peer Content Caching and Retrieval (ukládání obsahu do vyrovnávací paměti a jeho znovunačtení, popsáno v MS-PCCRPT)
Servery podporující HTTP kompresi
[editovat | editovat zdroj]- Microsoft IIS – Vestavěný nebo používající moduly třetích stran.
- Apache HTTP Server – Prostřednictvím mod_deflate (navzdory svému jménu v současné době podporuje pouze gzip[7]) nebo mod_gzip.
- Sun Java System Web Server
- Zeus Web Server
- Lighttpd – Pomocí mod_compress a novější mod_deflate (1.5.x).
- Nginx – Vestavěná.
- Geoserver
Komprese HTTP může být také dosaženo použitím funkcionality jazyků podporujících skriptování na straně severu, například PHP nebo Java.
Reference
[editovat | editovat zdroj]- ↑ Using HTTP Compression (IIS 6.0) [online]. Microsoft Corporation [cit. 2010-02-09]. Dostupné online.
- ↑ RFC 2616, Section 3.5: "The Internet Assigned Numbers Authority (IANA) acts as a registry for content-coding value tokens."
- ↑ Compression Tests [online]. Verve Studios, Co [cit. 2011-03-23]. Dostupné v archivu pořízeném dne 2015-01-02.
- ↑ Frequently Asked Questions about zlib – What's the difference between the "gzip" and "deflate" HTTP 1.1 encodings? [online]. Greg Roelofs, Jean-loup Gailly and Mark Adler [cit. 2011-03-23]. Dostupné v archivu pořízeném dne 2011-02-26.
- ↑ Compression Tests: Results [online]. Verve Studios, Co [cit. 2011-03-23]. Dostupné v archivu pořízeném dne 2012-03-21.
- ↑ JSR 200: Network Transfer Format for Java Archives.
- ↑ HOWTO: Use Apache mod_deflate To Compress Web Content (Accept-Encoding: gzip) – Mark S. Kolich [online]. Mark S. Kolich [cit. 2011-03-23]. Dostupné v archivu pořízeném dne 2011-08-20.
V tomto článku byl použit překlad textu z článku HTTP compression na anglické Wikipedii.
Externí odkazy
[editovat | editovat zdroj]- RFC 2616: Hypertext Transfer Protocol – HTTP/1.1
- HTTP Content-Coding Values publikovala Internet Assigned Numbers Authority.
- Apache: mod_deflate & mod_gzip
- Komprese s lighttpd
- Coding Horror: HTTP komprese na IIS 6.0 Archivováno 6. 2. 2014 na Wayback Machine.
- Návod na kompresi přes mod_deflate
- Použití HTTP Komprese Archivováno 14. 3. 2016 na Wayback Machine. podle Martina Browna z Server Watch.
- Použití HTTP Komprese v PHP.
- Dynamická a statická HTTP komprese s Apache httpd.