HTTP kompresija
HTTP kompresija predstavlja sposobnost koja se može implementirati u web server i web klijent kako bi se bolje iskoristio dozvoljeni propusni opseg (eng. bandwight, prim. aut.) i omogućila veća brzina prenosa podataka između njih.[1]
HTTP podaci se kompresuju pre početka slanja sa servera: internet pretraživač objavljuje serveru koje metode kompresije podržava pre nego što preuzme odgovarajući format; pretraživači koji ne podržavaju odgovarajuće metode kompresije će preuzeti nekompresovane podatke. Najčešća shema za kompresiju podrazumeva gzip i deflate, dok celu listu dostupnih shema održava IANA (Internet Assigned Numbers Authority)[2]. Pored toga, drugi developeri prave nove metode kompresije i uključuju ih u svoje proizvode (npr. Google je napravio SDCH shemu i implementirao je u svoj Google Chrome pretraživač i još neke Google servere).
Klijent/Server shema za kompresiju
U većini slučajeva, ne računajući SDHC, saradnja se odvija u dva koraka, što je opisano u RFC 2616.
- Web klijent ukljucuje "Accept-Encoding" polje u svoj HTTP zahtev, u kome se nalaze imena podržanih shema za kompresiju (tzv. content-coding tokens)odvojenih zapetama.
GET /encrypted-area HTTP/1.1 Host: www.example.com Accept-Encoding: gzip, deflate
- Ako server podržava jednu ili više shema za kompresiju, podaci koji se šalju mogu se kompresovati pomoću jedne ili više metoda koje podržavaju obe strane. U tom slučaju, server će dodati "Content-Encoding" polje u svom HTTP odgovoru u kome će stajati imena korisćenih shema, odvojenih zapetama.
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
Web server nije u obavezi da koristi bilo koji metod kompresije - to zavisi od unutrašnjih podešavanja samog servera a može zavisiti i od unutrašnje arhitekture internet stranice o kojoj se radi.
U slučaju SDCH koristi se saradnja uz pomoć rečnika, što može uključiti i dodatne korake, kao na primer download potrebnog rečnika sa spoljnog servera.
Problemi koji sprečavaju upotrbu HTTP kompresije
Clanak koji su 2009. godine objavili inženjeri Google- a Arvind Jain i Jason Glasgov navodi da se više od 99 godina izgubi[3] svakog dana zbog povećanog vremena učitavanja stranice kada sadržaj koji korisnici prihvataju nije kompresovan. Ovo se dešava kada se anti- virus umeša u konekciju i onemogućava kompresiju, kada se koriste proksi serveri (kod preopreznih pretraživača), kada su serveri pogrešno konfigurisani i kada bagovi u pretraživaču onemogučavaju kompresiju. Internet Explorer 6, koji koristi HTTP 1.0 (bez dodataka kao što su HTTP kompresija ili pipelining), kada se koristi sa proksijem -uobičajena konfiguracija u korporativnom okruženju- bio je glavni krivac za korišćenje nekompresovanog HTTP-a.[4]
Content-coding tokens
- compress - UNIX "compress" metod za kompresiju
- deflate - zlib kompresija (RFC 1950) bi trebalo da se koristi (u kombinaciji sa deflate kompresijom (RFC 1951)) kao što je opisano u RFC 2616. Međutim, implementacija u praksi varira između zlib kompresije i čiste deflate kompresije.[5][6] Zbog toga se gzip pokazao kao pouzdaniji metod od martu 2011.
- exi - W3C XML format za kompresiju
- gzip - GNU zip format (opisan u RFC 1952). Ovaj metod je najpodržaniji od marta 2011.[7]
- identity - Nije potrebna nikakva transformacija. Ovo je podrazumevana vrednost za kodiranje sadržaja.
pack200-gzip - Format za Java Arhive[8]
- SDCH - Google-ov metod za kompresiju (Shared Dictionary Compression for HTTP)
- bzip2 - besplatan i open source algoritam za kompresovanje sadržaja bez gubitaka.
- PeerDist - Majkrosoftov metod za keširanje i vraćanje sadržaja (opisan u MS-PCCRPT)
Serveri koji podržavaju HTTP kompresiju
- SAP NetWeaver
- Microsoft IIS: ugrađen ili koristi nezavisni modul
- Apache HTTP Server, preko mod_deflate (nasuprot imenu trenutno podržava samo gzip[5][9]) ili mod_gzip
- Cherokee HTTP server - gzip i deflate kompresije
- Hiawatha HTTP server[10]
- Oracle iPlanet Web Server
- Zeus Web Server
- lighttpd - preko mod_compress i novijeg mod_deflate (1.5.x)
- nginx - ugradjen
- Aplikacije zasnovane na Tornado web serveru - ako je "gzip" polje postavljeno na True u podešavanjima aplikacije
- Jetty web server
- GeoServer
- Apache Tomcat
- IBM Websphere
Kompresija HTTP-a može se postići i korišćenjem jezika za serversko skriptovanje kao što su PHP ili programskih jezika kao sto je Java.
Reference
- ^ „Using HTTP Compression (IIS 6.0)”. Microsoft Corporation. Архивирано из оригинала 14. 12. 2011. г. Приступљено 9. 2. 2010.
- ^ RFC 2616, Section 3.5: "The Internet Assigned Numbers Authority (IANA) acts as a registry for content-coding value tokens."
- ^ „Use compression to make the web faster”. Google Developers. Приступљено 22. 5. 2013.
- ^ Optimizing encoding and transfer size of text-based assets | Web Fundamentals - Google Developers
- ^ а б „Compression Tests”. Verve Studios, Co. Архивирано из оригинала 02. 01. 2015. г. Приступљено 19. 7. 2012.
- ^ „Frequently Asked Questions about zlib - What's the difference between the "gzip" and "deflate" HTTP 1.1 encodings?”. Greg Roelofs, Jean-loup Gailly and Mark Adler. Архивирано из оригинала 26. 02. 2011. г. Приступљено 23. 3. 2011.
- ^ „Compression Tests: Results”. Verve Studios, Co. Архивирано из оригинала 21. 03. 2012. г. Приступљено 19. 7. 2012.
- ^ JSR 200: Network Transfer Format for Java Archives.
- ^ Bug 53121 – Confusing documentation, gzip and deflate
- ^ „Extra part of Hiawatha webserver's manual”. Архивирано из оригинала 22. 03. 2016. г. Приступљено 22. 05. 2013.
Spoljašnje veze
- RFC 2616: Hypertext Transfer Protocol - HTTP/1.1
- HTTP Content-Coding Values by Internet Assigned Numbers Authority
- Apache: mod_deflate & mod_gzip
- Compression with lighttpd
- Coding Horror: HTTP Compression on IIS 6.0 Архивирано на сајту Wayback Machine (6. фебруар 2014)
- HTTP Compression: resource page by the founder of VIGOS AG, Constantin Rack
- Using HTTP Compression Архивирано на сајту Wayback Machine (14. март 2016) by Martin Brown of Server Watch
- Using HTTP Compression in PHP Архивирано на сајту Wayback Machine (11. април 2006)
- check http compression
- Dynamic and static HTTP compression with Apache httpd
- Browser HTTP Compression Test