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.

1. 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

2. 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][10]) ili mod_gzip
  • Cherokee HTTP server - gzip i deflate kompresije
  • Hiawatha HTTP server[11]
  • 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[уреди]

  1. ^ „Using HTTP Compression (IIS 6.0)“. Microsoft Corporation Приступљено 9. 2. 2010.. 
  2. ^ RFC 2616, Section 3.5: "The Internet Assigned Numbers Authority (IANA) acts as a registry for content-coding value tokens."
  3. ^ „Use compression to make the web faster“. Google Developers Приступљено 22. 5. 2013.. 
  4. ^ http://code.google.com/speed/articles/use-compression.html
  5. ^ а б „Compression Tests“. Verve Studios, Co Приступљено 19. 7. 2012.. 
  6. ^ „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 Приступљено 23. 3. 2011.. 
  7. ^ „Compression Tests: Results“. Verve Studios, Co Приступљено 19. 7. 2012.. 
  8. ^ JSR 200: Network Transfer Format for Java Archives.
  9. ^ „HOWTO: Use Apache mod_deflate To Compress Web Content (Accept-Encoding: gzip) - Mark S. Kolich“. Mark S. Kolich Приступљено 23. 3. 2011.. 
  10. ^ https://issues.apache.org/bugzilla/show_bug.cgi?id=53121
  11. ^ Extra part of Hiawatha webserver's manual

Spoljašnje veze[уреди]