Kako radi World Wide Web?
U ovom poglavlju:
· Koncept i povijest World Wide Weba
· Hipertekst, multimedija i hipermedija
· URL adrese i MIME tipovi datoteka
· Kako radi protokol HTTP
———————————————————————————————————————
Budući da je razvijan uglavnom u akademskim i vojnim krugovima, Internet nikada nije nudio posebno udobna sučelja do svojih usluga. Poznato je da vojni stručnjaci pate od toga da sustav mora biti što je moguće neljubazniji, s naredbenim retkom i mističnim naredbama, a profesori ionako potajno uživaju kada se njihovi studenti moraju mučiti sa savladavanjem nelogičnih i neljubaznih sučelja programa koje su oni sami stvorili. Ili je barem tako bilo donedavno.
Otkako se Internet sve više otvarao najširem krugu korisnika, sve njegove prednosti - poput brzine prenošenja podataka po cijelom svijetu i širokog spektra mogućnosti - polako su se počele pretvarati u mane, jer nije bilo sučelja koje bi objedinjavalo pristup do svih Internetovih usluga. Većina korisnika ne želi niti čuti za neke naredbene retke, pisanje naredbi u Unixu i pamćenje desetak naredbi za svaki klijentski program koji pristupa nekoj Internetovoj usluzi. Stanje je postalo kritično: Internetu je hitno trebala “ubojita aplikacija”, kako bi rekli Ameri, koja će stvari dramatično izmijeniti. Vjerojatno se poneki od naših čitatelja sjećaju doba prvih osobnih računala i prvog PC-a: aplikacije koje su sve okrenule u korist osobnog računala bile su programi za obradu teksta i, posebno, legendardni tablični kalkulator na računalu Apple II, VisiCalc. Nakon toga, više ništa nije bilo isto...
World Wide Web je teško nazvati aplikacijom; prije bismo mogli reći da je to sučelje ili ideja. Čak i sam izraz “usluga”, kojime smo se koristili kod spominjanja elektroničke pošte, FTP-a ili mrežnih novina, nije sasvim odgovarajući za World Wide Web i teško se s njime složiti. Činjenica jest da bi se WWW mogao smatrati uslugom - promatramo li tu samo osnovni pristup do WWW poslužitelja i pregledavanje raznih dokumenata - ali ispod te površine događaju se i mnoge druge zanimljive i revolucionarne stvari: pristupa se svemu ostalom što postoji na Mreži. Upravo je taj element korisničkog sučelja uvijek bio presudan za masovno prihvaćanje nečega na širem tržištu. Korisnici koji do sada nisu imali nikakve veze s računalima odjednom su mogli, sa samo nekoliko klikova mišem i par pritisaka na tipke, odaslati elektroničke poruke, slati datoteke cijelim svijetom i trenutno biti obaviješteni u novostima iz područja koja ih zanimaju.
Ideja iz koje se razvio World Wide Web rođena je u proljeće 1989. Tada još nije bilo velike navale kućnih i malih korisnika na Internet (ona je započela tek negdje od 1992.), ali je očito već i akademcima i znanstvenicima i svima ostalima dosadilo da se moraju patiti s tekstualnim naredbama, jer je takav način rada samo djelovao ograničavajuće. Tim Berners-Lee iz europskog laboratorija za nuklearnu fiziku u Švicarskoj, CERN (Conseil Europeen pour la Recherche Nucleaire), zaslužan je za postavljanje osnovnih koncepata World Wide Weba: on je predložio stvaranje hipertekstualnog sustava koji će omogućiti jednostavnu razmjenu informacija među stručnjacima iz cijelog svijeta. Uza sve to, bila su postavljena dva zahtjeva: mogućnost prikaza dokumenata različitih tipova i mogućnost pristupa dokumentima iz cijelog svijeta. Neke od najznačajnijih odredbi projekta zahtijevale su da softver kojim će se pristupati WWW-u bude sasvim besplatan i na raspolaganju svima, što je kasnije potaknulo veliku ekspanziju WWW-a i izvan istraživačkih krugova.
Krajem 1990., počeo se razvijati sam projekt World Wide Weba. Počelo je i razvijanje prvog programa za pristup World Wide Webu, čije je pisanje bilo dovršeno u proljeće 1991., točno dvije godine nakon početne zamisli gospodina Bernersa. Program je radio s tekstualnim sučeljem i bio je pisan za operativni sustav NeXTStep (i propalo računalo NeXT Stevena Jobsa, legende svjetske informatike, osnivača tvrtke Apple... ali to je već druga priča). Sljedeće je ljeto proteklo u nizu seminara i predstavljanja WWW-a u cijelom svijetu, na čemu je i dalje najaktivnije radio jedino CERN. Iduće godine, 1992., dogodile su se sve značajne stvari.
Spomenuti prvi pretraživački program, koji se jednostavno zvao www, slobodno je pušten u svjetsku distribuciju i bio je na raspolaganju svima koji su ga željeli. Krajem 1992. već je postojalo pedesetak poslužitelja za WWW u svijetu, a napisan je i prvi grafički pretraživač Weba, program Viola za X-Windowse. Početkom 1993. napravljena su još dva pretraživačka programa: prvi je CERN-ov grafički WWW pretraživač za Macintosh, a drugi je Mosaic za X-Windowse. Mosaic je napisao Marc Andreessen iz NCSA (National Center for Supercomputing Applications) u Chicagu. Marc je danas potpredsjednik tvrtke Netscape Communications i smatra se, uz Tima Bernersa, najznačajnim čovjekom za razvoj World Wide Weba. Statistike kažu da je 1993. World Wide Web činio 0.1 posto prometa na Internetu. Do kraja te godine bilo je nešto iznad 500 poslužitelja u svijetu, a uskoro su World Wide Web i Mosaic privukli takvu pažnju da su o njima pisale sve, a ne samo informatičke novine.
CERN je sredinom 1994. polako počeo prepuštati razvoj projekta World Wide Web organizaciji W3, koju su zajednički stvorili CERN i MIT (Massachusetts Institute of Technology). Postajalo je sasvim očito da je WWW “vruća stvar” i da iza njegovog razvoja stoji velika odgovornost; to je bilo malo previše za CERN i trebalo je u igru uključiti i stručnjake iz drugih organizacija, a MIT zasigurno (opravdano) uživa najveću slavu u svijetu i u Americi. Marc Andreessen je, zajedno s kolegama koji su napisali Mosaic, još početkom 1994. napustio NCSA i stvorio svoju tvrtku, Mosaic Communications Corporation, današnji Netscape Communications. Početkom 1995., osnovan je Konzorcij za World Wide Web, na čijem je čelu Tim Berners-Lee. On se danas, ali i dalje u suradnji s organizacijama poput CERN-a i MIT-a, brine o svim aspektima razvoja Weba: od protokola do jezika za stvaranje Web dokumenata, ali i za ciljeve razvoja Weba u budućnosti. Možete posjetiti njihov poslužitelj na http://www.w3.org. Tako je stvoren World Wide Web, a ako na navedenoj adresi pročitate na čemu sve trenutačno radi Konzorcij W3, uvjerit će se da nas očekuje zaista uzbudljiva i zanimljiva budućnost. Iste godine, 1995., broj računala u komercijalnim domenama Interneta (.com) i službeno je premašio broj do tada dominirajućih računala u edukativnim domenama (.edu).
Savjet
Pogledajte i sljedeće poglavlje! U njemu ćete pronaći zanimljive izvještaje o trenutnom radu World Wide Weba i predviđanja budućnosti!
Što je učinilo World Wide Web tako popularnim izvan istraživačkih i akademskih krugova? Dvije tehnologije koje su objedinjene pod zajedničkim krovom: hipertekst i multimedija.
Teško je povjerovati da se današnji prosječan korisnik osobnog računala nikada nije sreo s pojmom hiperteksta. Bez obzira što radili na računalu, hipertekst je vrlo zastupljen, iako možda ni sami niste toga svjesni. Gotovo svi sustavi pomoći, od onih sadržanih u programima za DOS (poput DOS-ovog Helpa od verzije 5 nadalje ili sustava pomoći u Borlandovom Turbo Pascalu ili Borland C-u), pa do šarenih sustava pomoći u programima za Windowse, Macintosh, OS/2 i X-Windowse, najobičniji su primjeri hiperteksta na djelu.
Ideja hiperteksta potaknuta je knjigama: one su obično prepune napomena i fusnota. Ne bi li bilo lijepo kada biste mogli prstom uprijeti u neku fusnotu ili referentnu knjigu navedenu u popisu literature i odmah je dobiti pred sebe? Tako radi hipertekst. Hipertekst je sustav elektroničkih dokumenata koji su međusobno povezani. Veze su najčešće označene na poseban način (drugom bojom, masnim, kosim ili podcrtanim slovima, u posljednje vrijeme i slikama). Nakon što čitatelj odabere neku vezu, bit će prebačen na novi dokument na koji ta veza pokazuje.
Kao što su dvojica ljudi uglavnom zaslužna za nastanak Weba, tako i hipertekst duguje osnovnu zamisao dvojici: Vannevaru Bushu i Tedu Nelsonu. Bush je, još u računalskoj eri davne 1945., napisao članak “As We May Think” i u njemu udario temelje nekim suvremenim temama, poput umjetne inteligencije. Posebno je razmatrao prva računala i uspoređivao ih s čovječjim sustavom razmišljanja, te gledao kako se jedno prilagođava drugom. Ako malo razmislite, vidjet ćete da je takvo nešto usko povezano s današnjim interaktivnim sustavima, kakav je i hipertekst o kojemu govorimo. Osim toga, tvrdio je da je način rada računala vrlo sličan našem mozgu, pa da je teoretski moguće naučiti računala da oponašaju čovjekovu logiku razmišljanja.
Ted Nelson je krajem sedamdesetih napisao knjigu “Computer Dreams”, čija je osnovna zamisao bila da ćemo preko računala jednog dana imati pristup do svih informacija u svijetu. U toj je knjizi prvi puta spomenuo pojam hiperteksta, objašnjavajući ga upravo onako kako smo mi učinili u prethodnom odjeljku, kao niz međusobno povezanih dokumenata. U priču kasnije ulazi i jedan program za Macintosha: HyperCard. On se isporučivao uz svakog Maca tamo negdje od kraja osamdesetih, te je služio za stvaranje hipertekstualnih dokumenata.
Multimediju zasigurno ne treba mnogo objašnjavati: to je jednostavno naziv za kombinaciju različitih medija koji međusobno stvaraju doživljaj u čovjeka. Bilo kakva prezentacija koja uključuje elemente više medija - grafiku, zvuk, animaciju ili videozapis, pa čak i tekst - može se smatrati multimedijskom. Dakle, to kao sama ideja nije ništa novo, ali multimedija je mogla procvasti tek na računalima. Iako i neki drugi elektronički mediji, poput televizije, sadrže elemente koje sadrži i računalna multimedija, na njima nema nikakve interaktivnosti ni mogućnosti da korisnik (gledatelj) sam odredi što će gledati i kojim tempom.
Uz dodatak hiperteksta, multimedija je postala velika stvar, vezana isključivo uz računala. Veze u hipertekstu više ne moraju biti samo tekstualne, već se može raditi i o slikama; odabirom neke veze možemo pristupati do zvučnih ili video zapisa, tražiti povezana područja, uspoređivati pojmove i stvari na temelju neke multimedijske prezentacije. Simbiozom hiperteksta i multimedije stvoren je termin hipermedije. Ponovno, teško je povjerovati da niste vidjeli ništa hipermedijskoga u zadnjih par godina: jeste li vidjeli neku od interaktivnih multimedijskih enciklopedija? One se danas dijele u gotovo svakom multimedijskom paketu uz CD ROM uređaj (koji predstavlja još jedan važan faktor zaslužan za veliku ekspanziju multimedije u svim područjima). One najpoznatije, poput Microsoftove Encarte ili specijaliziranih enciklopedija poput Microsoftove Cinemanie, daleko su korisniji, privlačniji i bolji mediji od hrpe enciklopedija koje zasigurno imate negdje u stanu gdje samo skupljaju prašinu. Knjiga i dalje zlata vrijedi, ali brzu i točnu informaciju, potkrijepljenu konkretnim primjerima i audio-vizualnim doživljajima, koje nudi multimedija, danas više ne može zamijeniti nijedan neelektronički medij.
I World Wide Web se zasniva na hipermediji, no njena je uporaba ograničena prije svega zbog tehničkih razloga. Multimedijski elementi na raspolaganju su na mnogim World Wide Web dokumentima, a hipertekst ih čini jednostavnima i primamljivima za korištenje. Međutim, Internet s hardverske strane ne uspijeva pratiti broj korisnika, pa je prijenos velikih multimedijskih sadržaja preko Interneta danas dosta otežan i upotreba multimedije na World Wide Webu podosta ograničena upravo zbog slabe propusnosti (bandwidth) pojedinih dijelova mreže. Šaljivčine čak vole reći da je WWW zapravo kratica za Wait, Wait, Wait (“čekaj, čekaj, čekaj... dok ti se prikaže Web stranica”).
Zbog svega toga će raskošna multimedija i dalje ostati svojstvo CD ROM-ova i sličnih optičkih medija velikoga kapaciteta, ali brzina i točnost pristupa informacijama koje nudi elektronički medij poput WWW-a ne mogu se zamijeniti nekim fizičkim medijem. Rješenja su, za sada, u kompromisima: treba odlučiti čime i u kojoj mjeri potkrijepiti hipertekst. Oni koji će stvarati WWW dokumente pronaći će niz savjeta u trinaestom poglavlju naše knjige koji će im pomoći da izbalansiraju zaraženost multimedijskom groznicom i relativno slabu mjestimičnu propusnost veza na Internetu.
U prvim danima World Wide Weba pojam interaktivnosti praktično nije postojao. Prvenstvena namjena Weba jest predstavljanje nekih dokumenata i informacija široj javnosti na jednostavan i pogodan, grafički privlačan, ali potpuno funkcionalan način. Ključna riječ u prethodnoj rečenici jest predstavljanje: prvotna zamisao bila je da korisnici mogu samo čitati i pretraživati dokumente i na tome bi sve stalo. Web je bio interaktivan samo utoliko što je korisnik mogao odabrati što i kada želi vidjeti.
Naravno, gotovo od samog početka postojala je mogućnost pisanja takozvanih CGI skripata koje su omogućavale Web poslužitelju da od klijenta (i njegovog korisnika) primi neke podatke i dalje ih obrađuje. Stvar je bila upotrebljiva, a i danas je, za obradu raznih formulara i možda kakav jednostavniji programčić koji će obraditi neke podatke koje korisnik pošalje. Nije baš neka interaktivnost, zar ne?
Tek bi jezici poput Jave, skriptni jezici poput JavaScripta i Visual Basic Scripta, te koncepcije poput Microsoftove ActiveX tehnologije trebale unijeti znatnu dozu interaktivnosti i živosti na Web. Programiranje u Javi, nasuprot programiranju u CGI-u, vrlo je jednostavno za sve koji već poznaju osnove C-a, a Java osim toga omogućava i rad sa slikama, zvukom, stvaranje korisničkih sučelja s uobičajenim elementima unutar same Web stranice. Slično, JavaScript može na strani klijenta na jednostavan način postići stvari koje bi se bitno zakomplicirale korištenjem CGI skripata na poslužitelju. ActiveX omogućit će nam pristup Webu i razmjenu informacija preko njega iz svih aplikacija koje podržavaju ActiveX kontrole. Više o svim tim lijepim novim stvarima govorit ćemo kasnije.
Iako je World Wide Web dugo vremena bio tek samo deklarativno interaktivan, danas se sve kreće prema što većoj interaktivnosti i korisnosti Weba. On ne bi trebao biti tek medij za objavu informacija nego globalno komunikacijsko sredstvo i alat s kojim mogu surađivati razne aplikacije.
HTML (Hypertext Markup Language) je alat kojim se stvaraju hipertekstualni dokumenti za uporabu na Webu. Nastao je iz općenitijeg jezika SGML (Standard Generalized Markup Language), koji se koristi za stvaranje dokumenata prenosivih među različitim platformama. Pomoću HTML-a opisuje se grafički izgled Web dokumenta, uključujući način ispisa teksta, položaje slika, tablica i drugih elemenata. Više o HTML-u i stvaranju Web stranica saznat ćete u poglavljima 11 i 13.
Hipertekstualni dokument stvara se ubacivanjem HTML oznaka u običnu tekstualnu ASCII datoteku. Primjerice, masna slova označavaju se oznakom <B>, a kosa oznakom <I>. Na sličan se način među tekst uključuju slike, tablice, pobrojane liste ili označavaju veze. Takva ASCII datoteka nalazi se na disku poslužitelja; nakon što je prime, pretraživači za World Wide Web tumače ubačene oznake (kodove, tagove), formatiraju dokument na odgovarajući način i prikazuju ga na ekranu. Budući da se radi o uobičajenim ASCII datotekama, one su čitljive na svim računalima, čime je postignuta univerzalnost i prenosivost Weba. Korisnici laserskih pisača vjerojatno znaju da su PostScript dokumenti također obične ASCII datoteke, pa ih se može ispisati na PostScript laserskom pisaču povezanom na bilo koje računalo (PC, Mac, poneko Unix računalo) .
Napomena
Jezik HTML samo opisuje izgled stranice. U njemu piše, primjerice, “tu i tu ide slika iz te i te datoteke”, ali sama HTML datoteka ne sadrži sliku, već se ona zasebno prenosi od poslužitelja do pretraživačkog programa. Dakle, kad kažemo “WWW dokument”, ne radi se o jednoj datoteci, već o konačnom prikazu dobivenom na ekranu, koji je u pravilu sačinjen od jedne osnovne tekstualne HTML datoteke koja opisuje izgled stranice i od niza grafičkih datoteka.
HTML se stalno razvija: službeno su prihvaćene verzije 0.9, 1.0 i 2.0, dok HTML 3 nikada nije službeno prihvaćen, iako ga vodeći pretraživači djelomično ili u potpunosti podržavaju. Početkom svibnja 1996. objavljen je prvi prijedlog HTML-a 3.2, čime je HTML 3.0 zastario i odbačen je prijedlog njegova standarda. Službeni standardi jezika propisuju sve naredbe koje se smiju koristiti u pojedinoj verziji HTML-a, no kako su reakcije tržišta obično daleko brže od reakcije gospode koja propisuju standarde, mnogi proizvođači pretraživačkih programa za WWW, poput Netscapea, Microsofta i NCSA, samostalno su dodavali nove naredbe jeziku. Danas se uglavnom vodi bitka oko toga tko će što podržavati od takvih proširenja. Kako su Netscape i Microsoft vodeće tvrtke po broju nedavnih dodataka jeziku (dodana je podrška okvirima, slikovnim mapama, tablicama, izradi stilskih predložaka za stranicu, radu s tipovima pisama i mnogim drugim stvarima), sve se na kraju svodi na to da drugi proizvođači samo prihvaćaju njihova proširenja jezika. Pretraživački programi koji ne podržavaju njihova proširenja praktički su odavno ispali iz igre, uključivši i legendarni Mosaic koji se ipak uspijeva održati na površini zahvaljujući staroj slavi, ali prije svega u akademskim krugovima. Netscape Navigator i Microsoft Internet Explorer jedina su dva pretraživačka programa pomoću kojih ćete danas dobro vidjeti stranice koje su napravljene nestandardnim proširenjima jezika HTML.
Nije sasvim ispravno uspoređivati HTML sa stolnim izdavaštvom. HTML je i dan danas dosta slab u nekim stvarima: ne možete sasvim precizno narediti gdje bi se trebala nalaziti slika ili kakvim bi točno slovima trebao biti ispisan tekst. To nisu jako ozbiljna ograničenja i vjerojatno će jednom biti ispravljena, ali HTML-om se još dugo neće moći na ekranu postići mnoge stvari koje bez problema čine programi za stolno izdavaštvo, poput Quark Xpressa ili PageMakera. Osim toga, kada stvarate izgled dokumenta pomoću HTML-a, ne znate tko će ga i kako gledati: konačni izgled stranice na ekranu korisnika ovisit će, ako o ničemu drugom, onda o ekranskoj razlučivosti i količini teksta koja stane u jedan red ekrana. Najvjerojatnije će se takvi problemi riješiti širim prihvaćanjem nekog od prenosivih formata za prikaz dokumenata (npr. Adobeov PDF, Portable Document Format) koji se i danas već vrlo često susreću na Webu.
Neki od problema, poput odabira pisma (tipa, veličine i boje) kojim će se ispisivati naslovi i tekst i preciznijeg smještanja slika na stranici riješeni su Microsoftovim prihvaćanjem standarda HTML 3.2 i ugradnjom tih elemenata u pretraživač Internet Explorer 3.0. Microsoftov Internet Explorer također ima HTML Layout Control, podršku za preciznije definiranje rasporeda objekata (slika, teksta, animacija, Java aplikacija) na Web stranici.
Danas je stvaranje HTML dokumenata olakšano postojanjem mnogih editora. Korisnik više ne mora pamtiti HTML oznake kojima se formatira dokument, već iz izbornika editora bira pojedine naredbe, poput ubacivanja slika ili stvaranja tablica, nakon čega ga program pita za potrebne parametre i sam stvara potpunu HTML naredbu. No, i kod takvih editora pitanje je podržavaju li sva, pa i najnovija proširenja jezika HTML.
Sada ćemo pogledati kako je to ostvarena mogućnost pristupa nekom dokumentu iz cijelog svijeta, s bilo kojeg računala.
Da biste pristupili nekom dokumentu na Internetu, potrebno je znati više stvari. Za početak, ime računala na kojem se nalazi, direktorij u kojem je pohranjen i samo ime dokumenta. No, niti to nije sasvim dosta: trebate znati koju uslugu ćete koristiti za pristup do dokumenta. Iako smo već naglasili da World Wide Web omogućuje i pristup do FTP i Gopher poslužitelja ili poslužitelja novinskih grupa, pretraživaču treba znati “objasniti” gdje da nešto potraži i kako da pristupi udaljenom računalu na kojem se nalazi željeni dokument. Osim toga, za korištenje nekih usluga potrebno je navesti i dodatne informacije, poput broja porta (ukoliko se usluga izvršava na nekom nestandardnom portu; pogledajte prvo poglavlje ako ne znate što su portovi), a u slučaju pristupanja nekim uslugama, primjerice Telnetu, potrebno je navoditi i korisnička imena i lozinke.
Kako bi sve to bilo što jednostavnije, i kako bi se usluge, gledano sa strane korisnika, zaista mogle ujediniti pod jednim zajedničkim sučeljem (što Web i radi), osmišljen je sustav URL adresa. URL je skraćenica od Uniform Resource Locator; to je adresa kojom je jedinstveno ukazano na neki resurs (uslugu, sadržaj) na Internetu. Svaki korisnik World Wide Weba morao bi savladati sustav URL adresa, no srećom je on vrlo jednostavan.
Općeniti način pisanja URL adrese jest:
protokol://ime.računala:port/direktorij/direktorij/.../datoteka
ali i tu postoji nekoliko iznimaka i dodataka, do kojih ćemo uskoro stići.
Pisanje URL-a započinje navođenjem protokola koji će se koristiti za pristup dokumentu navedenom na kraju URL-a. U slučaju World Wide Weba, protokol je, naravno, najčešće http, no vidjet ćemo da se kao protokol mogu navesti i neki drugi, koji omogućavaju pristup do drugih usluga Interneta neposredno iz pretraživačkog programa za World Wide Web.
Nakon naziva protokola dolazi dvotočka, a zatim dvije obične kose crte. Postoji jedna iznimka od toga pravila, a to su lokalni URL-ovi koji se koriste za pristup datotekama što se nalaze na tvrdom disku računala na kojem radite, a ne negdje na nekom udaljenom računalu na mreži. No, o lokalnim URL-ovima govorit ćemo malo kasnije.
Iza druge kose crte slijedi ime računala kojemu se pristupa. Ono može biti pisano ili u obliku IP adrese ili kao uobičajeno slovno ime (FQDN adresa). Ako se poslužitelj za uslugu kojoj pristupamo, a čije smo ime protokola naveli na početku URL-a, izvršava na nekom portu različitom od standardnog, možemo navesti broj porta odmah iza broja računala, razdvajajući ga dvotočkom. Broj porta vrlo rijetko se susreće u World Wide Web adresama. Nakon još jedne kose crte, slijedi put do datoteke ili dokumenta kojemu želimo pristupiti. Prije njegovog imena treba, naravno, navesti i potpuno ime direktorija gdje se nalazi.
Odlučite li pročitati i kratak vodič kroz način rada protokola HTTP koji slijedi kasnije u ovom poglavlju, susrest ćete se i s kraticom URI, Uniform Resource Identifier. URI navodi samo imena direktorija i datoteke na računalu, te ne sadrži, kao URL, i cijelo ime računala zajedno s protokolom koji se koristi. Tako se URI-i koriste kada je veza poslužitelja i klijenta već otvorena, pa nije potrebno ponovno navoditi protokol ili ime poslužitelja s kojim se povezuje. Da bismo izbjegli zbrku, sve ćemo adrese nazivati URL-ovima; tako uostalom čine i svi u svijetu.
Ako vam način pisanja URL-ova još uvijek nije najbistriji, ne brinite: odmah nakon što pogledamo kako se sve mogu pisati URL-ovi, pogledat ćemo kako se pišu URL-ovi za pristup svim mogućim uslugama, i to u svim mogućim varijacijama.
URL-ovi se ne mogu sastojati od bilo kakvih znakova. Dopušteni su samo oni iz standardnog skupa ASCII znakova (pazite: govorimo o standardnom skupu, koji uključuje samo znakove 0-127, a ne o PC proširenom, s ukupno 256 znakova), i to čak niti ne svi.
Velika i mala slova i brojevi mogu se normalno koristiti u URL-u bez ikakvih ograničenja. Ako pomoću URL-a pristupate datoteci koja se nalazi na računalu koje radi s Unixom, morate jedino pripaziti na način imenovanja datoteka pod tim operativnim sustavom. Ovdje u priču uskače naš okvir, pa oni koji nisu dobro informirani mogu o unixovskim konvencijama imenovanja datoteka čitati u njemu. Osim slova i brojeva, URL smije sadržavati i znakove $, _ (podvlaka), - (crtica), . (točka) i Ž.
URL također smije sadržavati znakove =, ; (točka-zarez), /, # (number-sign), ?, : (dvotočka), %, &, i + (plus), ali svi ti znakovi imaju posebne namjene, koje će uglavnom biti objašnjene sada ili kasnije u ovoj knjizi. (Za znatiželjne: & se koristi za navođenje nekih posebnih znakova, a # za skokove unutar istog HTML dokumenta, što ćemo objasniti u jedanaestom poglavlju; +, ? i = obično se koriste kod pozivanja CGI skriptova i obrade formulara, a to je tema dvanaestog poglavlja.) Bilo kakve druge znakove, uključujući i razmake ili pritiske na Enter, te posebne nacionalne znakove ili pritiske na TAB, nije dopušteno koristiti u URL adresama!
Posebni znakovi ipak se mogu navesti u URL-u, no ne tako da se jednostavno napišu, već treba navesti njihov ASCII kôd u heksadecimalnom obliku iza znaka %. Primjerice, ASCII kôd razmaka jest decimalno 32, što se prevodi u heksadecimalno 20, pa se razmak u URL-u može označiti kao %20. Ako negdje u URL-u želite navesti sam znak postotka, pisat ćete %25. Evo i primjera (za sada navodimo samo zadnji dio URL-a, s imenom direktorija i datoteke, jer se posebni znakovi upravo tamo najčešće koriste):
ova%20datoteka%20ima%20razmake%20%u%imenu%20i%20znak%25.
Tablica 3-1 sadrži ASCII kodove nekih znakova koji se moraju navoditi pomoću znaka % ako su sadržani u URL adresi. Potpunu tablicu pronašli biste u mnogim drugim knjigama, ali mi smo, ne želeći štedjeti papir, ubacili još jedan mali dodatak knjizi - dodatak E - gdje ćete pronaći tablicu ASCII znakova.
Savjet
Iako biste na ovaj način teoretski mogli navoditi i nacionalne znakove u URL-u, npr. hrvatska slova po standardu Windows EE (kodna stranica 1250), preporučujemo vam da to izbjegavate. Za početak, ako se vaše Web stranice nalaze na računalu s Unixom, ta slova niti ne mogu biti u imenu datoteke, jer je to ipak samo “standard” koji radi samo pod Microsoftovim Windowsima. Osim toga, korištenjem bilo kakvih posebnih znakova u URL-u zapravo smanjujete mogućnost uspješnog pristupa drugih korisnika. Što se WWW pretraživača tiče, većina njih ipak je dovoljno inteligentna, pa pretvorbu posebnih znakova u % i odgovarajući heksadecimalni kôd obično sami obavljaju ako upišete takvu adresu kao URL.
Tablica 3-1: Neki od posebnih znakova u ASCII skupu i njihovi kodovi
|
Decimalni kôd |
Heksadecimalni kôd |
Znak |
|
33 |
21 |
! |
|
34 |
22 |
“ |
|
35 |
23 |
# |
|
36 |
24 |
$ |
|
37 |
25 |
% |
|
38 |
26 |
& |
|
39 |
27 |
ž |
|
40 |
28 |
( |
|
41 |
29 |
) |
|
42 |
2A |
* |
|
43 |
2B |
+ |
|
44 |
2C |
, |
|
58 |
3A |
: |
|
59 |
3B |
; |
|
60 |
3C |
< |
|
61 |
3D |
= |
|
62 |
3E |
> |
|
63 |
3F |
? |
|
91 |
5B |
Š |
|
92 |
5C |
Đ |
|
93 |
5D |
Ć |
|
94 |
5E |
Č |
|
96 |
60 |
ž |
|
123 |
7B |
š |
|
124 |
7C |
đ |
|
125 |
7D |
ć |
|
126 |
7E |
č |
|
10 |
0A |
LF (line feed) |
|
13 |
0D |
CR (carriage return) |
|
23 |
17 |
TAB |
|
32 |
20 |
Razmak |
Poput imena datoteka na Unixu, i URL adrese mogu biti potpune ili djelomične. Ovdje nema mnogo mudrovanja, pa ćemo dati samo primjere. U potpunom URL-u navodi se sve:
http://moje.računalo/posao/znak/www.html
dok se URL smatra djelomičnim ako se navede samo, primjerice:
/posao/znak/www.html
Kada u WWW pretraživač upišete takvu adresu, on će je protumačiti relativno u odnosu na trenutno prikazani dokument. Protokol, ime računala, port i sve ostale informacije koje se navode u URL-u prije imena dokumenta ostaju isti kao i za dokument koji je trenutno prikazan na ekranu. Ako djelomični URL počinje kosom crtom, znači da direktoriji kreću od korijenskog. URL također može sadržavati i oznaku “..” (dvije točkice) za nadređeni, roditeljski direktorij, slično kao kada koristite naredbu cd u DOS-u ili Unixu.
Relativni URL-ovi su vrlo korisni prilikom stvaranja HTML dokumenata. Kod stvaranja veze na dokument koji se nalazi na istom računalu nije potrebno pisati cijeli URL, već je dovoljno upisati relativni put do novog dokumenta, pa će se tako
stranice/druga.html
odnositi na datoteku druga.html u direktoriju stranice, koji se pak nalazi u direktoriju gdje je i trenutni dokument. (Uočite da nema kose crte na početku, pa se ne kreće od korijenskog, nego od trenutnog direktorija!) Na taj način možete, na primjer, sve slike koje koristite na svojim Web stranicama spremiti u jedan direktorij i pozivati ih iz pojedinih dokumenata koristeći relativne URL-ove. Relativni URL-ovi katkada se također nazivaju URI-ima.
Savjet
Kod stvaranja vlastitih HTML dokumenata, preporučujemo vam da uvijek koristite relativne, a ne apsolutne (potpune) URL-ove! Ako jednom kasnije preselite svoje stranice na neko drugo računalo, relativni odnosi među direktorijima neće se promijeniti i nećete gotovo uopće morati mijenjati svoje stranice!
Konačno, došlo je i vrijeme da pogledamo kako se pišu URL-ovi za pristup pojedinim uslugama. Jednostavno ćemo slijediti već objašnjenu shemu pisanja URL-ova da bismo vam pokazali kako pristupati WWW, FTP i drugim poslužiteljima i mrežnim uslugama, te pogledati specifičnosti pojedinih tipova URL-ova. Pretpostavljamo, naravno, da ste pročitali prvo poglavlje i da znate čemu služe pojedine usluge. Idemo!
HTTP je protokol na kojemu se zasniva World Wide Web, pa je prirodno da ćete ovakve URL-ove najčešće koristiti. Sintaksa uglavnom odgovara općenitoj sintaksi URL-ova koju smo ranije naveli, a navodimo i primjer:
http://ime.računala/put_do_datoteke_i_njeno_ime
http://pubwww.srce.hr/inter-hr/katalog/index.html
U većini slučajeva ne morate navoditi broj porta, jer se 80 podrazumijeva kod pristupa HTTP poslužitelju.
Put do datoteke kroz direktorije i njeno ime piše se po pravilima pisanja imena datoteka na Unixu. Važno je, međutim, upamtiti da ono što je navedeno kao ime datoteke kojoj se pristupa gotovo nikada ne odgovara fizičkom smještaju datoteke na udaljenom računalu. Kada u petom dijelu knjige budemo govorili o konfiguriranju WWW (HTTP) poslužitelja, vidjet ćete da im uvijek treba navesti početni, korijenski direktorij u koji se smještaju HTML dokumenti, a on se obično nalazi unutar direktorija sa samim WWW poslužiteljem. Put do datoteke koji se navodi u URL-u ne odnosi se zbog toga na glavni korijenski direktorij udaljenog računala.
Na primjer, ako je WWW poslužitelj konfiguriran tako da HTML dokumente traži u direktoriju /pub/WWW/htmldocs, a URL glasi http://racunalo.hr/nas_web/pocetna.html, tim ćete URL-om zapravo “dohvatiti” datoteku iz direktorija /pub/WWW/htmldocs/nas_web na udaljenom računalu. Iako vas ovo kao korisnika ne bi trebalo odveć zanimati, ako ćete sami postavljati WWW poslužitelje, to će biti važno.
Vrlo često se URL-ovi navode bez imena datoteke, pa sadrže samo direktorij, primjerice:
http://pubwww.srce.hr/visnjan/
http://www.microsoft.com/
http://www.lotus.com
Napomena
Nije potrebno pisati kosu crtu na kraju takve URL adrese. Većina WWW pretraživača i poslužitelja sama će je dodati.
Ako pretraživačkom programu upišete takvu adresu, on će je sasvim normalno zatražiti od WWW poslužitelja. Ovaj će, pak, u navedenom direktoriju potražiti datoteku index.html, koja sadrži početnu stranicu, i nju poslati. (Prilikom konfiguracije WWW poslužitelja možete odrediti kako će se zvati početna stranica.) U slučaju kad ne postoji datoteka s početnom stranicom, poslužitelj će jednostavno poslati sadržaj navedenog direktorija. Pretraživački program će ga prikazati i omogućiti korisniku da pristupi nekoj od datoteka klikom miša na njenom imenu.
Treći česti slučaj kod ove vrste URL-ova izgleda ovako:
http://ime.računala/čkorisničko_ime
http://jagor.srce.hr/čdsusanj
Znak č (tilda) označava da treba pristupiti početnoj stranici u direktoriju navedenog korisnika. Ponovno, stvar je onoga tko je podešavao WWW poslužitelj na pojedinom računalu da odredi gdje se spremaju korisničke WWW stranice. Najčešće se one nalaze u poddirektoriju public_html koji mora biti smješten u početnom direktoriju svakog korisnika koji želi staviti svoje stranice na raspolaganje drugima. Zatim se u direktoriju public_html obično nalazi datoteka s početnom stranicom, index.html (ili, rjeđe, homepage.html). Ponovno, s korisničke strane nije bitno da znate kako je to sređeno na udaljenom računalu: WWW poslužitelj kojemu pristupate sam zna koje direktorije treba upisati umjesto znaka tilde.
Umjesto http, katkada se protokol označava s https, što je skraćenica od secure HTTP iliti sigurni HTTP. Takav URL koristit ćete kada želite pristupiti nekoj adresi uz korištenje sigurnosnih sustava za financijske i druge transakcije kakve imaju ugrađene Netscape Navigator i Netscapeovi poslužitelji, a vjerojatno će uskoro biti i znatno šire prihvaćeni. Za probu, možete tako posjetiti https://www.att.com.
FTP poslužiteljima pristupa se slično kao i Web poslužiteljima, samo što je protokol ovoga puta drugačiji:
ftp://ime.računala/direktoriji/datoteka
ftp://ime.računala:broj_porta/direktoriji/datoteka
ftp://avalon.irb.hr/pub/incoming/Netscape
ftp://avalon.irb.hr/pub/incoming/Netscape/n32e30b5.exe
Pretraživački program koristit će FTP protokol da bi pristupio udaljenom FTP poslužitelju i prenio neku datoteku. Ako, kao u trećem retku u gornjem primjeru, URL pokazuje na neki direktorij, bit će prikazan njegov cijeli sadržaj i korisnik će moći birati datoteku. Ako FTP URL sadrži i ime datoteke, kao u četvrtom retku, ona će se odmah početi prenositi.
Napomena
Kada koristite FTP URL, pretraživački program pokušava vas prijaviti udaljenom FTP poslužitelju kao anonimnog korisnika. Mnoga računala ne dopuštaju anonimni FTP (pogledajte prvo poglavlje).
Još je jedna mogućnost korištenja FTP URL-a, a to je slučaj kada trebate upisati korisničko ime i lozinku prilikom prijavljivanja na FTP poslužitelj:
ftp://ime:lozinkaŽime.računala/direktorij/datoteka
ftp://perica:olovkaŽjagor.srce.hr/datoteke/tekstovi.zip
Kao što vidite, prije imena računala ovdje se navode korisničko ime i lozinka, odvojeni dvotočkom. Zatim slijedi “majmunčić” i URL se nakon njega nastavlja po starom i sasvim predvidljivom načinu...
URL za pristup Gopher poslužitelju jednostavno sadrži gopher kao naziv protokola, te ime poslužitelja. Vrlo je rijetko da korisnik ima potrebu navođenja direktorija i datoteke, jer ionako Gopherov sustav ugniježđenih izbornika vodi brigu o tome gdje se što nalazi, a korisnik treba samo znati pristupiti osnovnom izborniku:
gopher://ime.računala:port/
gopher://regoc.srce.hr:70/
gopher://regoc.srce.hr/11/hrv/lok-info/firma.txt
gopher://gopher.umc.edu
Ako vas ipak zanima koja je URL adresa nekog određenog dokumenta na Gopheru, samo dođite do njega iz početnog izbornika i pogledajte koja adresa piše u vašem WWW pretraživaču.
Većina WWW pretraživača nema ugrađenu mogućnost samostalnog pristupa udaljenom računalu pomoću Telneta, već za to poziva vanjske aplikacije. To ipak ne utječe na pisanje URL-a, čiji je opći format:
telnet://ime.računala:port/
telnet://korisničko_ime:lozinkaŽime.računala:port/
Nakon što se pomoću Telneta povežete s udaljenim računalom, morate znati korisničko ime i lozinku pod kojom ćete se prijaviti. U prvom slučaju, WWW pretraživač će samo pozvati vanjsku aplikaciju za Telnet i proslijediti joj adresu na koju se treba povezati, dok će u drugom primjeru otvoriti još i jedan dijaloški prozor u kojemu će vam napisati pod kojim imenom se trebate prijaviti i koju lozinku trebate upisati kad vas Telnet to upita. Dakle, korisnik u svakom slučaju mora upisati neko ime i lozinku, a druga varijanta Telnet URL-a koristi se samo kako bi se korisniku reklo što treba upisati za pristup udaljenom računalu. Pomoću Telneta se na taj način često pristupa raznim bazama podataka, katalozima knjižnica i sličnom.
Rjeđe korištena je mogućnost telnetiranja pomoću TN3270. TN3270 je IBM-ova umotvorina: radi se o terminalima međusobno nekompatibilnima s ostatkom svijeta osim sa samima sobom (tipično IBM-ovski). Ipak, za slučaj da vam zatreba - sve je isto, samo je protokol tn3270:
tn3270://ime.računala:port/
tn3270://veliki.plavi.ibm/
tn3270://dsusanj:lozinkaŽveliki.plavi.ibm/
Elektronička pošta je najbolji način da autor WWW stranica prikupi komentare na njihov sadržaj, ili da neka tvrtka sazna mišljenja o svom proizvodu. URL za elektroničku poštu obično nećete upisivati u svoj pretraživač Weba, već se on gotovo uvijek koristi u HTML dokumentima kao veza. Ne omogućavaju svi pretraživački programi za World Wide Web neposredno slanje elektroničke pošte, a i kod onih koji ga podržavaju, način na koji je izvedeno razlikuje se od programa do programa. Neki će vam, poput Netscape Navigatora, ponuditi vlastiti zaseban i odličan program za slanje pošte, dok će drugi imati tek osnovnu mogućnost slanja poruke bez ikakvih naprednih opcija.
URL za elektroničku poštu je vrlo jednostavan:
mailto:elektronička_adresa
mailto:dsusanj@public.srce.hr
Kod URL-ova za elektroničku poštu treba pripaziti na jednu stvar: posebne znakove. Napomenuli smo da URL adrese ne smiju sadržavati pojedine znakove, no neki od njih dopušteni su kod elektroničkih adresa. Primjerice, ako se poruka šalje preko Interneta na neke druge on-line sustave, često se u adresi koriste neki drugi znakovi; prilikom slanja poruka preko Bitneta u elektroničkoj adresi nalaze se oznake postotka, a za prastari sustav elektroničke pošte (zasnovan na protokolu UUCP: Unix-to-Unix Copy) u adresama se nalaze uskličnici (tzv. bang-path adrese). U tim slučajevima treba u URL-u te posebne znakove napisati prema tablici 3-1.
Gotovo svi pretraživački programi za WWW mogu pristupati i novinskim grupama. U većini slučajeva oni mogu samo čitati članke iz novinskih grupa (i to ne baš na najudobniji način) i ne dozvoljavaju vam pisanje. Izuzetak je trenutačno jedino Netscape Navigator koji posjeduje vlastiti i odlični zasebni program za čitanje i pisanje elektroničkih poruka i članaka u novinskim grupama, te Microsoftov Internet Explorer kojemu se sličan modul može naknadno dodati, pa u tim slučajevima nije potrebno pisanje zasebnih URL-ova.
Sintaksa za URL za pristup novinskoj grupi jest:
news:novinska_grupa
news:hr.comp.literature
news:alt.fan.monty-python
Naravno, primjećujete da u samom URL-u nije navedeno ime novinskog (NNTP) poslužitelja na kojemu se može pronaći željena novinska grupa. Međutim, u samom pretraživačkom programu upisuje se adresa NNTP poslužitelja. Uočite i da nema kosih crta nakon naziva protokola.
Umjesto imena novinske grupe možete staviti i zvjezdicu (*), pa će se prikazati ili sve dostupne grupe na određenom poslužitelju:
news:*
ili samo one u određenoj hijerarhiji, primjerice:
news:hr.*
U slučaju kada želite dobiti popis članaka pod određenim rednim brojevima u pojedinoj grupi, možete brojeve članaka navesti iza imena novinske grupe:
news:hr.comp.literature/100-200
što bi prikazalo sve poruke između stote i dvjestote u toj grupi.
Ako želite neposredno pristupati porukama na nekom drugom novinskom poslužitelju, ili ako vaš pretraživački program nema mogućnost upisivanja standardnog poslužitelja, možete koristiti dvije varijante URL-a za pristup novinskoj grupi. Prva je mogućnost:
news:hr.comp.literature/7c8d2g47@news.carnet.hr
koja će prikazati poruku s navedenom jedinstvenom identifikacijskom oznakom (pazite: identifikacijska oznaka jedinstvena je za članak i nije ista kao redni broj poruke u novinskoj grupi, spomenut ranije) i potražiti je na navedenom NNTP poslužitelju (news.carnet.hr). Takav oblik teško da ćete pronaći negdje u primjeni, osim u knjižurinama poput naše, jer se praktički ne koristi.
Druga je mogućnost “normalnija” i najsličnija URL-ovima za World Wide Web:
nntp://ime.poslužitelja/ime.grupe
nntp://news.carnet.hr/hr.comp.literature
Kao protokol se navodi nntp, a zatim slijedi ime novinskog poslužitelja i novinske grupe, koje ćete napisati baš kao da se radi o datotekama. Kose crte iza imena protokola sada su ponovno ovdje.
URL za pristup WAIS-u i bazama podataka postoji, ali većina WWW pretraživača ga čak niti neposredno ne podržava. Obično je pristup WAIS-u realiziran preko posebnih računala koja služe kao veza između WWW-a i WAIS-a. Mosaic i Netscape Navigator imaju direktnu podršku za WAIS URL. Sintaksa je:
wais://ime.računala:port/baza_podataka?upit
Ovdje jedino treba objasniti što su baza_podataka i upit. Ime baze podataka trebate unaprijed znati, a ako ste ikada koristili WAIS (on je malo presložen da bismo ga detaljnije objašnjavali, ali možete pogledati knjigu InternetŽHR, gdje je razrađen do detalja), tada znate i ime baze koju želite pretraživati. Upit se sastoji od ključnih riječi koje se traže; ako ih je više, odvajaju se znakom “+”. Osim toga, dopušteno je korištenje logičkih operatora and (i), not (ne) i or (ili).
Primjerice, kad bismo znali da na računalu marketing.znak.hr postoji baza podataka knjige i u njoj bismo željeli potražiti dokumente u kojima se pojavljuju i riječ Internet i riječ Hrvatska, to bismo učinili ovako:
wais://marketing.znak.hr/knjige?Internet+and+Hrvatska
Katkada je potrebno iz WWW pretraživača pristupiti datoteci koja se nalazi na tvrdom disku lokalnog računala. To ćete učiniti ovako:
file:///datoteka
Pazite! Tri kose crte, a ne dvije kao inače!
Kao što vidite, nema imena računala, jer se radi o lokalnom računalu. Zbog kompatibilnosti sa starijim implementacijama Weba i HTML-a, još je i danas moguće pisati nešto poput file:///avalon.irb.hr/pub/incoming/datoteka.zip, ali tada se takav URL uopće ne tumači kao lokalni URL, već se obrađuje jednako kao URL za FTP. Stoga nemojte niti pokušavati takvo nešto. (Možda vam to nismo niti trebali reći da vas ne dovodimo u iskušenje? A opet... plaćeni smo zato da vam kažemo sve što znamo... I neke poznatije knjige danas jednostavno prešutno tvrde da je file:/// isto što i ftp:// i čude se čemu uopće služi file:///.)
Korisnici Unixa jednostavno će navesti direktorije i ime datoteke kojoj treba pristupiti, a korisnici DOS-a najčešće moraju navesti i oznaku tvrdog diska. Ona se piše odmah iza tri kose crte, a iza nje slijedi okomita crta (|), pa kosa crta, pa tek onda ostatak direktorija i datoteka. Na primjer:
file:///D|/znak/tekstovi/www/chap03.txt
Napomena
Lokalne URL-ove treba koristiti isključivo onda kada sami pristupate stranicama koje se nalaze na lokalnom disku! Oni ne smiju biti sadržani u HTML dokumentima i služiti kao veze na druge dokumente, jer to jednostavno neće raditi. Razlog je sasvim očit: nakon što bi neki korisnik kliknuo na takvu vezu, datoteka bi se tražila na njegovom vlastitom tvrdom disku a ne na Web poslužitelju.
Time bismo završili s URL-ovima: pokazali smo vam zaista svaku moguću kombinaciju. Nemojte se ipak iznenaditi ako se jednom susretnete s nekim novim URL-om. Nedavno su tako predloženi dodaci za protokole finger (za dobivanje informacija o korisnicima na mreži) i mailserver (za primanje dolazne elektroničke pošte). Programski jezici poput Jave također omogućavaju korisnicima da pišu svoje vlastite rukovatelje protokolima (protocol handlere) i definiraju odgovarajuće nazive protokola u URL adresi. Na taj se način WWW pretraživač može programirati da pomoću određenog URL-a pristupa bilo kakvoj drugoj usluzi ili tipu dokumenta. Program u Javi odredit će što se i kako dalje s tim URL-om radi.
Dokumenti koji putuju Internetom, uključivši i World Wide Web stranice, sastoje se od različitih formata datoteka i često ujedinjuju tekst, sliku, zvuk i videozapise. Zbog toga je trebalo uvesti nekakav standard označavanja tipova datoteka, kako bi aplikacija koja datoteku prima znala što treba s njome učiniti. U našem konkretnom slučaju, svaki WWW dokument ima svoj tip jasno definiran. U sljedećem odjeljku upoznat ćete se s načinom rada WWW poslužitelja i HTTP protokolom, no za sada je bitno da znate da poslužitelj mora klijentu naglasiti o kojem se tipu datoteke radi prije nego što je pošalje, a da klijent, u našem slučaju pretraživački program, mora znati što mu je činiti s tom datotekom kad je primi.
Zbog toga je razvijen sustav MIME. Njegovo ime skraćenica je od Multipurpose Internet Mail Extensions ili Multipurpose Internet Multimedia Extensions te je već iz nje vidljivo da je zapravo namjena bila omogućiti slanje multimedijalnih tipova podataka (slike, zvuka, videozapisa i ostalih datoteka) putem elektroničke pošte. No, u međuvremenu je MIME način označavanja tipa datoteke široko prihvaćen na Internetu, te se koristi i kod HTTP protokola na kojem je zasnovan World Wide Web.
Slika 3-8: Pretraživačkim programima možemo objasniti što da rade s pojedinim MIME tipom datoteka
MIME definira tipove i podtipove. To je najlakše objasniti na primjeru: tip image malo nam govori, osim da se radi o nekakvoj slici, no ako se napiše i podtip, primjerice image/jpeg, tada je pretraživaču sasvim jasno da takvu sliku može (i mora) prikazati na ekranu. U načelu svaki klijent (pretraživač) za WWW poznaje i može prikazati barem četiri MIME tipova datoteka: čistu tekstnu datoteku (text/plain), HTML dokument (text/html), te GIF i JPEG sliku (image/gif, image/jpeg).
Podrška ostalim formatima sasvim je opcionalna: neki pretraživač možda će imati ugrađen modul za izvedbu zvučnih zapisa tipa audio/basic (to su na Internetu vrlo rasprostranjene *.au datoteke), dok će drugi možda moći prikazati tip video/mpeg (MPEG video zapis) bez pomoći vanjskog programa. No, svakom se pretraživaču može narediti što da radi s ostalim MIME tipovima i koju vanjsku aplikaciju treba pozvati da bi ona prikazala sadržaj te datoteke. Na slici 3-8 vidite kako se, na primjer, Netscape može konfigurirati da podrži tip datoteke application/msword, odnosno Wordov DOC format: jednostavno mu objasnimo da za taj tip pozove Word i to je sve. Čim s Mreže Netscape preuzme neki DOC, pokrenut će Word kako biste ga mogli pročitati.
Upravo u tome je fleksibilnost MIME označavanja, jer ako se pojavi neki novi tip datoteka, lako je prilagoditi sve programe da znaju što s njim trebaju činiti. Već smo rekli da će poslužitelj, prije nego što uopće pošalje datoteku pretraživaču, naznačiti njezin tip. U sljedećem odjeljku vidjet ćemo kako izgleda ta komunikacija, no to je važno zato što pretraživač unaprijed zna što će mu doći i, ako shvati da on ne prepoznaje taj tip datoteka, može korisniku ponuditi da odabere aplikaciju koja će se pokrenuti nakon primitka dokumenta novog tipa (slika 3-9).
Tablica 3-2: Standardne MIME oznake tipova datoteka
|
MIME tip |
Datoteke formata |
|
application/mac-binhex40 |
hqx (BinHex 4.0 za Macintosh) |
|
application/msword |
doc (Microsoft Word datoteka) |
|
application/octet-stream |
bin |
|
application/oda |
oda |
|
application/pdf |
pdf (Adobe Acrobat datoteke) |
|
application/postscript |
ai eps ps (PostScript datoteke) |
|
application/rtf |
rtf (Rich Text Format) |
|
application/x-compress |
Z (datoteka sažeta Unixovim compressom) |
|
application/x-gzip |
gzip (sažeta gzip datoteka za Unix) |
|
application/x-latex |
latex (LaTeX format) |
|
application/x-mif |
mif |
|
application/x-shar |
shar datoteka (Unix) |
|
application/x-tar |
tar (Tape Archive datoteka za Unix) |
|
application/x-tex |
tex (TeX izvorni kôd) |
|
application/zip |
zip (ZIP arhivirana datoteka) |
|
audio/basic |
au snd (Sunov zvučni zapis) |
|
audio/x-aiff |
aif aiff aifc (AIFF zvučni zapis) |
|
audio/x-wav |
wav (Microsoft Windows WAV zvučni zapis) |
|
image/gif |
gif (GIF slika) |
|
image/jpeg |
jpeg jpg jpe (JPEG slika) |
|
image/tiff |
tiff tif (TIFF slika) |
|
image/x-MS-bitmap |
bmp (Microsoft Windows bitmap slika) |
|
image/x-portable-bitmap |
pbm (Prenosiva bitmap slika za Unix) |
|
image/x-xbitmap |
xbm (Bitmap slika) |
|
message/news |
Format novinskog članka na Usenetu |
|
message/rfc822 |
Format elektroničke poruke |
|
multipart/* |
Miješani podaci različitih tipova |
|
text/html |
html htm (HTML dokument) |
|
text/plain |
txt pl (Obična tekstna datoteka) |
|
text/richtext |
rtx (RFC1523 format) |
|
text/tab-separated-values |
tsv (Vrijednosti u datoteci odvojene tabulatorima) |
|
video/mpeg |
mpeg mpg mpe (MPEG video zapis) |
|
video/quicktime |
qt mov (QuickTime video zapis) |
|
video/x-msvideo |
avi (Microsoftov AVI video zapis) |
|
video/x-sgi-movie |
movie (Video zapis sa Silicon Graphicsa) |
Napomena
Tablica 3-2 navodi ekstenzije datoteka za pojedine MIME tipove datoteka, no imajte na umu da se WWW pretraživači i poslužitelji ne drže ekstenzija “kao pijan plota” kad određuju tip datoteke odnosno dokumenta! Doduše, WWW poslužitelji najčešće posjeduju tablicu sličnu gornjoj sa svim podržanim MIME formatima i odgovarajućim datotečnim ekstenzijama, pa prema njoj određuju MIME tip. Međutim, pretraživači tako ne rade. Ako im poslužitelj javi da je nešto tipa image/gif, onda je to slika tipa GIF, pa bez obzira što datoteka koja dolazi možda ima bezveznu ekstenziju ABC, pretraživač će je pokušati prikazati kao GIF sliku. MIME tip, dakle, ima apsolutni prioritet nad ekstenzijom datoteke i to je dobro, jer su ekstenzije podložne promjenama, a MIME tipove određuje administrator poslužitelja, pa tako ne može doći do zbrke. Ipak, WWW pretraživači traže da im se napiše koja ekstenzija odgovara pojedinom tipu datoteke (pogledajte ponovno sliku 3-8): te će informacije koristiti prilikom pristupanja drugim poslužiteljima i korištenja drugih protokola, poput FTP-a, koji ne podržavaju MIME oznake formata. Tako, ako svojim pretraživačem preuzmete JPEG datoteku s nekog FTP poslužitelja, on je odmah zna prikazati.
Nas dvojica jednom smo, još u svojim ranim danima bavljenja Mrežom (dok smo bili prilično “zeleni”), raspravljali o tome treba li HTML datoteka pohranjena na poslužitelju imati ekstenziju html ili ona može biti i htm. Tablica 3-2 i ova napomena odgovorili su i vama na to pitanje: svejedno je koja je ekstenzija, jer se obje smatraju standardnim MIME tipom text/html i WWW pretraživač će ih dobro prikazati jer će mu poslužitelj dojaviti da stiže HTML datoteka. Dakle, ako radite WWW stranice na PC-u s troslovnom ekstenzijom i šaljete HTML datoteku na poslužitelj, ne morate joj produžavati ekstenziju samo kako biste dodali to jedno jedino l. Međutim, neki poslužitelji zahtijevaju da se početna datoteka zove upravo index.html, pa samo njoj promijenite ekstenziju. Sva ostala imena datoteka u hipertekstualnim vezama i same datoteke mogu imati ekstenziju htm. Osim, naravno, ukoliko je smušeni administrator brljao po datoteci mime.types…
Kada idete u kino, kazalište, na koncert... obično ne razmišljate tko sve stoji iza vama sasvim očitog događanja. Vidite glumce, dirigenta, orkestar ili možete pročitati popis ljudi koji su radili film. U načelu vas ne zanima, ili na to ne obraćate pažnju, tko sjedi u kabini za kinoprojektorom (to vas zanima jedino ako ima grubih rezova i nespretnih lijepljenja filma pa treba izviždati krivca), tko šapće glumcima i tko sjedi za miks-pultom i vodi brigu o tome da “Lisinski” bude dobro ozvučen. Jednako tako, kao običnog korisnika, ne bi vas trebalo zanimati što se nalazi “s druge strane”, odnosno što je u samoj srži World Wide Weba. Budući da ovu knjigu ipak imate u ruci, izgleda da vas takve stvari zanimaju: vrlo je korisno (pa čak i zabavno za nas fanatične zaljubljenike u računala) znati kako cijeli sustav zapravo komunicira i radi kao cjelina.
Svaki protokol koji koristi okružja zasnovana na klijentsko-poslužiteljskom modelu, objašnjenom u prvom poglavlju, zapravo radi na jednak način: korisnički program (klijent) otvara vezu prema poslužitelju (serveru, ili, kako se to nekad naziva u unixovskoj terminologiji, daemonu). Zatim klijent poslužitelju šalje određenu identifikaciju (“Bok! Ja sam FTP klijent verzija 1.12”), te od njega traži određenu radnju (“Daj mi, molim te, pošalji datoteku KNJIGA.ZIP”). Poslužitelj obrađuje zahtjev, te ga ili ispunjava (“Evo, datoteka stiže! Dugačka je 852647 bajtova”.) ili obavještava klijenta da je došlo do pogreške i da se zahtjev ne može ispuniti (“Čuj, izgleda da dečki još nisu napisali tu knjigu do kraja i te datoteke nema!”).
Napomena
Zašto unixaši poslužitelje katkada zovu daemonima? Demonima se na Unixu nazivaju programi koji se neprimjetno, neovisno od korisnikove intervencije, izvršavaju u pozadini. Primjerice, WWW daemon (poslužitelj), nakon što je pokrenut prilikom podizanja računala, čuči u pozadini mirno i neprimjetno opslužujući zahtjeve WWW pretraživača koji ga kontaktiraju na odgovarajućem portu. (Više o portovima pronaći ćete u priči o orgranizaciji i radu Mreže u prvom poglavlju.)
Najvažnija stvar kod protokola jest da su standardizirani; iako je svaki od protokola koji se danas koristi na Internetu prošao kroz svoje mnoge verzije i revizije, uvijek je zadržavana uskladivost sa starijim verzijama, i to potpuna. Klijent ne zna što će ga dočekati s druge strane, jednako kao što poslužitelj nema pojma kakvi će sve klijenti pokušavati ostvariti vezu s njim. Stoga je otvaranje veze klijenta prema poslužitelju, dakle ono što se događa kada pristupate nekom FTP ili World Wide Web poslužitelju, izuzetno važno, jer se tom prilikom razmjenjuju identifikacije (ime i verzija klijenta odnosno poslužitelja), te dodatne informacije. World Wide Web poslužitelj tako može, recimo, znati da s njim pokušava komunicirati klijent koji ne podržava grafiku (npr. tekstualni WWW pretraživač Lynx), pa mu neće slati slike i animacije. Važno je napomenuti da se u slučaju WWW-a sve te informacije razmjenjuju prilikom svakog otvaranja veze od klijenta prema poslužitelju: primjerice, ako gledate neku početnu stranicu i zatim klikntete na neku hipertekstualnu vezu, vaš će se pretraživački program (klijent) ponovno pristojno predstaviti poslužitelju i zatražiti željenu stranicu. Usporedbe radi, klijenti za FTP (prenošenje datoteka) ili Telnet (rad na udaljenom računalu) ne moraju razmjenjivati identifikacijske informacije prilikom prenošenja svakog bloka podataka, jer je njihova veza stalno “otvorena”. Za razliku od njih, WWW poslužitelj će pretraživaču poslati traženu stranicu i oni će se pozdraviti do daljnjega. Nekim novim prijedlozima protokola i te se stvari mijenjaju, no o tome kad za to dođe vrijeme.
HTTP (Hypertext Transfer Protocol) prošao je kroz nekoliko svojih verzija, a trenutna je 1.0. Sam HTTP je vrlo jednostavan i uopće nije čudno da već dulje vrijeme stoji na verziji 1.0. Prastara verzija protokola nosi oznaku 0.9 i danas je prilično rijetka. Toj verziji nedostaju mnoga svojstva koja postoje u HTTP 1.x, pa vjerojatno više nema poslužitelja koji bi podržavali samo 0.9. Za slučaj da naletite na neki takav poslužitelj, on će dobro raditi, ali neće imati neke, ipak važne, mogućnosti. U svibnju 1996. je predložena i verzija 1.1, pa ćemo u ovom odjeljku spomenuti i neke njene specifičnosti i razlike u odnosu na verziju 1.0. Poput svih ostalih protokola, i HTTP radi u dvije faze: u prvoj klijent šalje zahtjev poslužitelju, što ćemo nazvati fazom zahtjeva, a u drugoj poslužitelj odgovara klijentu, što ćemo nazvati fazom odgovora.
Slika 3-10: Tijek komunikacije između klijenta i poslužitelja
Da bi nešto zatražio, klijent šalje samu naredbu za preuzimanje neke stranice ili dokumenta, putanju do nje (dakle, URL), te verziju HTTP protokola koju klijent koristi. Nakon toga je red na poslužitelju, koji će odgovoriti također verzijom protokola koju koristi, brojkom koja pokazuje je li zahtjev uspješno izvršen (statusni kôd), te, konačno, poslužitelj šalje i sve tražene podatke. Kao što vidimo, u komunikaciji HTTP protokolom ima nešto viškova: ako se gornji postupak ponavlja za više HTML dokumenata, dosta podataka nepotrebno putuje mrežom. Iako se ne radi o velikoj količini informacija koju poslužitelj i klijent razmjenjuju, svakako bi bilo zgodno to otkloniti. U pripremi je stoga nova verzija HTTP protokola, koja će cijelu WWW stranicu - zajedno s potpunim tekstom, svim slikama i ostalim elementima - poslati klijentu odjednom. Time će se postići da klijent i poslužitelj kroz gornji postupak “rukovanja” prolaze samo jednom za jednu stranicu, a ne više puta, kako to izgleda danas. Više o tim novim prijedlozima HTTP protokola pronaći ćete u okviru na kraju ovog poglavlja.
Klijent i poslužitelj komuniciraju međusobno šaljući si najobičnije naredbe pisane u standardnom 7-bitnom skupu ASCII znakova. Neki poslužitelji osjetljivi su na razliku velikih i malih slova, dok drugi nisu. Specifikacija protokola HTTP zaista kaže da naredbe i zahtjevi razlikuju velika i mala slova. No, kao korisnik WWW-a ionako nećete imati priliku slati naredbe neposredno poslužitelju; to je posao vašeg pretraživača, ali je zanimljivo znati kako on radi. Na kraju ove priče o HTTP-u pokazat ćemo vam kako sve to možete i provjeriti, a da uopće ne posjedujete WWW pretraživač. Dakle, ostanite s nama i obećavamo sate i sate zabave!
Preskačemo objašnjavanje identifikacijskih podataka (verzija protokola i slično), jer nam one nisu previše zanimljive, te krećemo s naredbama koje klijent može poslati poslužitelju. Mnoge naredbe predlažu se za novije verzije HTTP-a, no u verziji 1.0 prihvaćeno je samo njih pet: GET, HEAD, POST, PUT i DELETE. Verzija 1.1 dodaje još i OPTIONS i TRACE. Neki poslužitelji također podržavaju svoje specifične naredbe, ali uglavnom nezanimljive široj javnosti kojoj ova knjiga ipak mora biti zanimljiva, pa njih radije preskačemo.
Naredba GET koristi se, naravno, najčešće. Njome klijent jednostavno traži da mu poslužitelj pošalje određeni dokument. Iza naredbe navedu se URL i verzija protokola koji se koristi, primjerice:
GET /serv/data/WWW/nas_web/primjer.html HTTP/1.0
Tip protokola ne mora nužno biti HTTP: sjetite se da postoje URL-ovi za pristup ostalim uslugama Interneta. Klijentski program može zatražiti da mu poslužitelj odgovori nekim drugim protokolom.
Napomena
Ako se ne navede tip protokola, podrazumjeva se HTTP 0.9. Kako to obično nije baš ono što se želi, potrebno je izričito navesti da se želi koristiti HTTP 1.0.
Naredba HEAD također se često koristi, jer njome klijent može od poslužitelja zatražiti samo podatke koji se inače nalaze u zaglavlju komunikacije. (O tome malo kasnije kada budemo govorili o odgovorima poslužitelja.) Iza nje se također navodi URL i tip protokola.
Tablica 3-3: Zahtjevi klijenta (WWW pretraživača) poslužitelju
|
Naredba |
Što radi |
|
GET |
Traži od poslužitelja da pošalje dokument s navedenim URL-om. |
|
HEAD |
Traži samo opće informacije o dokumentu s navedenim URL-om (datum, veličinu dokumenta, format zapisa i slično). Ne šalje sam sadržaj dokumenta. |
|
POST |
Šalje obrađene podatke poslužitelju, koji ih dalje može obrađivati s CGI skriptima. Pogledajte 12. poglavlje. |
|
PUT |
Dokument s navedenim URL-om zamjenjuje drugim podacima ili dokumentom. Većina poslužitelja i pretraživača ne podržava ovu naredbu iz sigurnosnih razloga. Vjerojatno će ona ili neka slična naredba biti podržana budućim standardima za HTTP, ali tek pošto se riješe sigurnosna pitanja. Time će se omogućiti da korisnik pošalje neku datoteku WWW poslužitelju. |
|
DELETE |
Briše dokument određen zadanim URL-om. Kao i u slučaju naredbe PUT, većina pretraživača i poslužitelja ne podržava ovu naredbu iz sigurnosnih razloga. Naredba ionako ima smisla samo za administratora koji s udaljene lokacije želi izbrisati sadržaj nekog dokumenta. |
|
OPTIONS |
Omogućava klijentu da dobije informacije od poslužitelja o tome što sve poslužitelj podržava (protokoli, metode-naredbe, zahtjevi itd). (HTTP 1.1) |
|
TRACE |
Omogućava klijentu da prati razmjenu poruka između poslužitelja i klijenta tako što se poruke sa zahtjevima vraćaju natrag klijentu a da nisu izvršene. To je tzv. povratna petlja - loopback. Koristi se za dijagnostičke svrhe. (HTTP 1.1) |
Napomena
Neki ove naredbe poslužitelju nazivaju metodama. Nama se izraz naredba ipak u ovom poglavlju učinio prikladnijim. Kasnije, kad u poglavljima 11 i 12 naučite kako se stvaraju formulari i pišu CGI (Common Gateway Interface) skripti, vidjet ćete da se u jeziku HTML koriste izrazi poput METHOD=”POST” kako bi se naznačilo slanje nekih podataka poslužitelju. No, bez obzira govorimo li o naredbama ili metodama, to se odnosi na ovih nekoliko naredbi koje klijent-pretraživač može poslati WWW poslužitelju. (Ovime smo sigurno barem malo dignuli tlak našem glavnom uredniku i lektoru, koji će nas sigurno nekoliko puta upitati ne bismo li se mogli odlučiti za jedno ili drugo. Eto, na žalost, ovoga puta ne bi išlo...)
U dvanaestom poglavlju upoznat ćete se s pisanjem CGI skripata, pa ćete tada vidjeti da se vrlo često koristi i naredba POST. Ona naređuje poslužitelju da primljeni dokument tumači kao izvršivi program i da mu proslijedi neke informacije. Sama zamisao HTTP-a predviđala je da bi se ta naredba koristila za ugrađivanje dokumenata u dokumente i povezivanje s drugim uslugama, primjerice slanje elektroničke pošte, no u praksi se danas naredba POST koristi za nešto sasvim drugo: formulare. Poslužitelj pošalje klijentu neki formular koji se prikaže na ekranu (npr. za naručivanje knjiga), a klijent će, nakon što korisnik ispuni narudžbenicu, koristeći naredbu POST poslati poslužitelju ispunjena polja formulara. To administratorima poslužitelja omogućava da, koristeći CGI programe, obrađuju poslane informacije. Ovo je, trenutno, i jedini način da klijent nešto šalje poslužitelju što se podataka tiče: trenutna verzija HTTP-a ne omogućava ono što na BBS-ovima nazivamo upload, tj. da korisnik svojim WWW pretraživačem pošalje cijelu datoteku na poslužitelj. Predlaže se dodavanje i te mogućnosti HTTP protokolu, no zasada naredba POST, i sljedeća naredba, ostaju jedini načini da bilo što pošaljete poslužitelju.
PUT također šalje podatke poslužitelju, no njima će se zamijeniti trenutni dokument na disku poslužitelja (mora se, kao i kod ostalih naredbi, navesti cijeli URL). Slično, naredba DELETE pobrisat će dokument čiji se URL navede. Te su dvije naredbe prije svega korisne administratorima WWW poslužitelja, jer im omogućavaju da iz daljine mijenjaju sadržaj dokumenata na svom poslužitelju. Naravno, te su dvije naredbe najčešće zabranjene na poslužiteljima koje koriste obični smrtnici, jer bi neki zlobnik mogao odlučiti da Web stranica ne valja i elegantno je ukloniti s tuđeg diska. Većina WWW pretraživača čak ih uopće niti ne podržava.
Nakon što pošalje naredbu, klijent može poslati još neke dodatne zahtjeve. Primjerice, može detaljnije precizirati što želi primiti (“Daj šalji samo slike sa stranice, ovo ostalo već imam!”) i u kojem formatu (“Čuj, bila je neka frka oko autorskih prava na GIF, pa šalji samo JPEG-ove!”), ili može poslati elektroničku adresu korisnika koji koristi pretraživač. Zato vas neki WWW poslužitelji, kada gledate stranice koje se na njima nalaze, može pozdraviti (“Hello user dsusanjŽpublic.srce.hr”) i može znati koji WWW pretraživač koristite. Dakle, to su informacije koje administrator poslužitelja može koristiti kako bi napradio statistiku pristupa svojim stranicama ili pogledao koji se pretraživač najviše koristi.
Tablica 3-4 prikazuje te moguće dodatne zahtjeve i njihovu namjenu, a najznačajnije od njih podrobno ćemo objasniti.
Tablica 3-4: Dodatni zahtjevi poslužitelju
|
Dodatni zahtjev |
Što radi |
|
Accept |
Ovim zahtjevom klijent naglašava koji formati datoteka su mu prihvatljivi. Može ih navesti i više koristeći MIME standard označavanja tipova. |
|
Accept-Charset |
Zahtijeva da dokumenti budu pisani navedenim skupom znakova. |
|
Accept-Encoding |
Ovim zahtjevom klijent naglašava koji tipovi sažimanja su mu prihvatljivi, primjerice gzip ili compress na Unixu. Tip se označava MIME standardom. |
|
Accept-Language |
Navodi prihvatljive jezike kojima mogu biti pisani dokumenti. |
|
Authorization |
Šalje podatke poput korisničkog imena i lozinke WWW poslužitelju. Vrlo je jednostavno izvesti autorizaciju na ovaj način. |
|
Connection |
Zahtijeva održavanje veze s poslužiteljem ili je zatvara. Tumači se različito ovisno o verziji protokola HTTP. Pogledajte okvir “Zahtjev za održavanjem veze”. |
|
Content-Length |
Zahtjev se koristi kada klijent (pretraživač) treba poslati poslužitelju neke podatke koristeći naredbe PUT ili POST. Uz ovaj zahtjev navodi se količina podataka koja se šalje, u bajtovima. |
|
Content-Encoding |
Odabir načina kodiranja sadržaja. Koristi se kada klijent šalje podatke poslužitelju (PUT ili POST naredbom). |
|
Content-Language |
Odabir jezika kojim je pisan dokument koji se šalje (PUT ili POST naredbama). |
|
Content-Range |
Omogućava klijentu da pošalje samo jedan dio dokumenta. (Samo kod korištenja PUT ili POST naredbe.) |
|
From |
Šalje elektroničku adresu korisnika pretraživača. Obično u opcijama vašeg WWW pretraživača možete odrediti čini li se ovo ili ne, te upisati svoju adresu za elektroničku poštu. |
|
Host |
Navodi URI adresu dokumenta kojemu treba pristupiti. Takav će zahtjev klijenti slati proxy poslužiteljima ukoliko preko njih komuniciraju s WWW poslužiteljem. |
|
If-Modified-Since |
Šalje dokument (zatražen naredbom GET), samo ako nije promijenjen nakon navedenog datuma. Koristan je prilikom upotrebe proxy poslužitelja i međusobne komunikacije dva WWW poslužitelja. Postoji i slična varijanta If-Unmodified-Since (ako dokument nije mijenjan nakon nekog datuma). |
|
Pragma |
Zahtjev specifičan za pretraživač/poslužitelj. Rijedak kod komunikacije klijent-poslužitelj (osim kod korištenja CGI skripata), no upotrebljiv kod međusobne komunikacije dva WWW poslužitelja za razmjenu nekih specifičnih informacija. (Oba sudionika u komunikaciji trebaju moći prepoznati Pragma zahtjev i tumačiti njegovo značenje.) |
|
Referer |
URL zadnjeg dokumenta koji je bio uspješno prenesen do klijenta i prikazan. Poslužitelj tako zna koji je drugi poslužitelj uputio klijenta na njega. |
|
User-Agent |
Šalje ime i verziju WWW pretraživača (klijenta) koji se koristi. Može se koristiti za izradu statistike pristupa, tako da se vidi koji pretraživač se najviše koristi. |
Zahtjevi User-Agent i From zanimljivi su, no od njih nema neke velike koristi. Primjerice, pretraživač može poslužitelju poslati sljedeća dva retka:
From: dsusanjŽpublic.srce.hr
User-Agent: Mozilla/3.0b4 (Win95; I) via proxy gateway
i tako poslužitelju reći elektroničku adresu onoga tko koristi pretraživač i koji pretraživač koristi. Administrator WWW poslužitelja mogao bi koristiti te informacije za vođenje statistike pristupa svom poslužitelju (i da tako, primjerice, zaključi da 98% korisnika ima Netscape ili MS Internet Explorer, pa prilagođava svoje stranice tako da najbolje izgledaju kad su gledane iz tih pretraživača) ili šalje automatizirane poruke korisniku. Neki pretraživači pošalju i platformu pod kojom se izvršavaju, točnu verziju programa i ekransku razlučivost, pa administrator Web poslužitelja može koristiti i te informacije za izradu statistike ili prilagođavanje izgleda stranice.
Kao što vidite, Netscape se predstavlja kao “Mozilla”, a u sedmom poglavlju otkrit ćemo vam i tajnu zašto. Za sada samo jedna zanimljivost: i Microsoft je odlučio da se Internet Explorer predstavlja kao Mozilla samo radi kompatibilnosti, da ne bi slučajno neki WWW poslužitelj odlučio uskratiti odgovor njihovom pretraživaču. Evo i dokaza:
Mozilla/2.0 (compatible; MSIE 3.0; Windows 95; 1024,768)
Dok je sadržaj User-Agent zahtjeva najvjerojatnije sasvim točan, jer korisnik nema utjecaja na to kako će se pretraživač predstaviti, u načelu ne treba računati da je podatak o elektroničkoj adresi korisnika točan. Neki korisnici ne upisuju svoje e-mail adrese u WWW pretraživačima, a neki pretraživači čak niti ne šalju sadržaj tog polja.
Neki pretraživači, poput Internet Explorera, osim polja User-Agent šalju i druge podatke o korisnikovom računalu, primjerice o razlučivosti na ekranu, operativnom sustavu i tipu procesora:
UA-DISP: 1024,768,8
UA-OS: Windows 95
UA-CPU: x86
Već je zahtjev Authorization znatno više korišten: pomoću njega se može nadzirati pristup nekom WWW poslužitelju. Na primjer, Dario je pretplaćen na britanski servis NewsDESK. Radi se o najobičnijem poslužitelju čije je korištenje besplatno, a na čijim se stranicama objavljuju najnovije vijesti iz svijeta računala. Prilikom prvog posjeta NewsDESK-u, trebate se predstaviti i ostaviti svoje podatke, poput osobnih podataka i naziva časopisa za koji pišete. Time administratori NewsDESK-a znaju tko ih sve čita. Nakon toga ćete dobiti svoje korisničko ime i lozinku. Kada pokušate pristupiti stranicama tog poslužitelja, vaš će vas pretraživač upitati za ta dva podatka, zato što mu je stigao takav zahtjev od poslužitelja. Čim ih upišete, pretraživač šalje podatke poslužitelju koristeći Authorization zahtjev:
Authorization: dsusanj:znak5555
Savjet
Još se uvijek vode žestoke diskusije o tome koliko je slanje nekih podataka, poput brojeva kreditnih kartica i bankovnih računa, sigurno preko Interneta. Zahtjevom Authorization obično se ne šalju takvi podaci (brojeve kartica najčešće ostavljate kad popunjavate formulare, a za to je odgovorna naredba POST), a mnoge tvrtke, na čelu s Netscapeom, podržavaju mnoge svjetski priznate standarde za šifriranje i provjeru autentičnosti. Dakle, procijenite sami koliko je pametno slati neke “osjetljive” podatke preko mreže i pogledajte drugi dio knjige da biste vidjeli kako se vaš WWW pretraživač može konfigurirati tako da posebno pazi na slanje takvih podataka bez autorizacije i šifriranja. Slanje korisničkih imena i lozinki sigurno je utoliko što nije vjerojatno da nekoga zanimaju ti podaci, pa već mnogi WWW poslužitelji koriste mogućnost autorizacije kako bi pratili tko pristupa njihovim stranicama ili naplaćivali pristup. Spomenuti NewsDESK samo je jedan od njih.
Najčešće se ipak koristi zahtjev Accept, pa smo ga ostavili za kraj (kako bismo inače znali da ćete pročitati cijeli tekst do kraja?). Nakon što zatraži neki dokument naredbom GET, klijent može dodatno odrediti kakve datoteke želi primiti i koji su mu formati datoteka najprihvatljiviji. Uz zahtjev se navodi željeni MIME tip ili se može navesti i džoker-znak, zvjezdica (*), koja označava sve tipove ili podtipove. Primjerice, pošalje li pretraživač poslužitelju niz naredbi
GET /serv/data/WWW/nas_web/primjer.html HTTP/1.0
Accept: text/*
Accept: image/gif
Accept: image/jpeg
time je zapravo rekao poslužitelju koji dokument želi primiti, te da želi prihvatiti samo tekstualne datoteke bilo kog tipa (dakle, i text/plain, običan tekst, i text/html, tekst formatiran HTML oznakama, te ostale text/* tipove navedene u tablici 3-2 koja popisuje osnovne MIME tipove). Osim toga, poslužitelj želi primiti i sve slikovne datoteke u formatima GIF i JPEG. Jednostavno, zar ne?
Pojedinim tipovima datoteka mogu se dodijeliti i prioriteti, koji su označeni od 0 (“šalji samo ako baš moraš“) do 1 (“super, obožavam ovaj tip datoteka”) i navode se iza tipa datoteka dodajući parametar q=prioritet. Na primjer, kombinacija sljedećih linija:
Accept: image/*; q=0.1
Accept: image/gif; q=0.8
Accept: image/jpeg; q=1
Accept: image/tiff; q=0.2
objašnjava poslužitelju da su pretraživaču najmilije slike u JPEG formatu, zatim u formatu GIF, pa onda TIFF, a ako baš nema niti jednog od ta tri formata, da može poslati bilo koji drugi format slike. Brojevi koji označavaju prioritet u našem primjeru sasvim su slučajni; umjesto 0.8 moglo bi pisati 0.4 i stvar bi bila ista: bitan je samo odnos tih vrijednosti. Također, gornje su s naredbe mogle napisati i u jednom retku, odvajajući ih zarezima:
Accept: image/*; q=0.1, image/gif; q=0.8, image/jpeg; q=1, image/tiff; q=0.2
Napomena
Ako prioritet označite nulom, to ne znači, kako biste mogli pomisliti, da se taj tip datoteka neće poslati. Čim je zatražen zahtjevom Accept, dobit ćete taj tip datoteka. Nula zapravo znači da taj tip datoteka ne želite primiti ako zaista nije nužno. Također, redoslijed Accept zahtjeva nije bitan: poslužitelj će ih sve “pročitati” i proučiti prije nego išta pošalje, te će sam poredati prioritete po veličini, bez obzira kako su navedeni u zahtjevima.
Slično, zahtjevom Accept-Encoding klijent može odrediti koji je format sažimanja prihvatljiv. Naime, WWW dokument može biti sažet prije slanja, no tada ga poslužitelj mora znati otpakirati. Primjerice, da bi zatražio dokument sažet Unixovim gzipom, klijent će to ovako zatražiti:
Accept-Encoding: x-gzip
Na žalost, na raspolaganju su samo sažimanja gzipom (oznaka x-gzip) i compressom (x-compress), od kojih su oba za Unix. Zbog toga se ova oznaka rijetko koristi, jer pretraživači za PC, Macintosh i druga računala u načelu ne poznaju ove oblike sažimanja bez dodatnih programa.
Klijent može također zahtjevati da dokumenti budu pisani nekim skupom znakova (kodnom stranicom), pomoću zahtjeva Accept-Charset:
Accept-Charset: iso-8859-5
ili nekim jezikom pomoću zahtjeva Accept-Language:
Accept-Language: en-gb;q=0.8, en;q=0.7
Accept-Language: hr, en
U ovim primjerima također vidite kako se može koristiti parametar q=vrijednost za preciziranje i ovakvih zahtjeva. Posljednjim zahtjevom naglašeno je da nam je dokument pisan britanskim engleskim povoljniji od onog pisanog nekom drugom verzijom engleskog (npr. američkim engleskim). Trenutno su takvi zahtjevi rijetki, ali bi, kako Internet sve više dobiva na važnosti u cijelom svijetu, mogli postati vrlo česti. Velike međunarodne organizacije, poput Ujedinjenih naroda, već danas nude svoje dokumente na Webu pisane na mnogim jezicima. Jezik koji vam je najprihvatljiviji možete odabrati u svom pretraživačkom programu, a zatim on šalje zahtjev Accept-Language poslužitelju s kojim je povezan.
Drugi zahtjevi, navedeni u tablici 3-4, nisu nam u ovom poglavlju toliko zanimljivi. Zahtjevi If-Modified-Since i Pragma koriste se prvenstveno u komunikaciji dvaju WWW poslužitelja, a posebno ako je jedan od njih konfiguriran kao proxy. (Okvir koji objašnjava što su proxy poslužitelji je u drugom poglavlju, a više o tome kako se neki značajni poslužitelji konfiguriraju da rade kao proxy naći ćete u petom dijelu knjige.) Tako se zahtjevom If-Modified-Since mogu zatražiti samo dokumenti i datoteke koji su mijenjani nakon nekog datuma. Primjerice, to je korisno kod izrade mirrora, tj. zrcaljenja sadržaja WWW poslužitelja. Poslužitelji se povežu i dogovore da će prenijeti samo promijenjene datoteke kako bi se uskladio sadržaj oba poslužitelja.
Zahtjev Pragma čak je nedefiniran. On se može koristiti da bi poslužitelji razmijenili neke specifične informacije, ako to oba podržavaju. Ako poslužitelj ne shvaća što mu je drugi poslužitelj pokušao reći zahtjevom Pragma, jednostavno će ga ignorirati. Korisnicima koji se neće baviti pisanjem skriptata (i samih poslužitelja ili pretraživača) ovaj je zahtjev posve nezanimljiv. U dvanaestom poglavlju vidjet ćete da se tako mogu razmjenjivati neki podaci prilikom rada s CGI programima. Primjerice, poslužitelj može naglasiti pretraživaču, koriteći zahtjev poput Pragma: no-cache, da ne smije dokument spremati u svoju internu predmemoriju, zato što je on rezultat izvršavanja nekog skripta i može se ubrzo promijeniti ili idući put dati sasvim drugačije rezultate.
Dodatni zahtjev Content-Length bit će vam zanimljiv također tek nakon 12. poglavlja, u kojem ćete saznati što su i kako se pišu CGI skripti. Kada klijent (pretraživač) želi poslati neke podatke poslužitelju (koje će on dalje obrađivati u nekom skriptu) koristeći POST naredbu (ili PUT, iako smo rekli da ona nije podržana u većini poslužitelja i pretraživača), pomoću retka Content-Length naglasit će koliko bajtova šalje. Odmah nakon toga klijent šalje i same podatke, čiji format nije bitan, ali je važno da budu dugački točno onoliko bajtova koliko je najavio. Uz ostale naredbe iz tablice 3-3 koje ništa ne šalju poslužitelju (GET, HEAD i obično nepodržani DELETE), redak Content-Length nema nikakvog smisla.
Napomena
Zapravo se svi zahtjevi koji počinju s Content- vrlo rijetko susreću u porukama koje klijent šalje poslužitelju. Klijent svoje zahtjeve najčešće ostvaruje naredbom GET u kombinaciji s Accept- zahtjevima. Zahtjevi Content- koriste se samo kada klijent šalje neke podatke Web poslužitelju (npr. podatke koje ste upisali u neki obrazac i poslali skriptu na obrađivanje). Stoga se poruke Content- uglavnom susreću samo u odgovorima poslužitelja.
O zahtjevima Content-Type, Content-Encoding i Content-Language bit će malo više riječi kasnije, jer je sintaksa njihova pisanja jednaka kao kad poslužitelj odgovara klijentu. Spomenimo zasada još samo mogućnost da klijent zatraži samo dio neke datoteke, koristeći zahtjev Content-Range:
Content-Range: bytes 777-888/1000
Gornji bi zahtjev poslao samo bajtove između 777. i 888. u traženoj datoteci koja ima 1000 bajtova.
Sada poslužitelj treba odgovoriti na zahtjev klijenta. Prvo što će mu poslati jest poruka koja sadrži ime i verziju protokola koju klijent koristi, brojčani kôd koji označava uspješnost klijentovog zahtjeva, te tekstualno objašnjenje brojčanog statusnog koda. Na primjer, moguć je odgovor poput:
HTTP/1.0 200 OK
Broj 200 označava da je sve u redu, a “OK” je tekstualno objašnjenje statusnog koda. Ili:
HTTP/1.0 404 Not Found
što znači da se dogodila (omražena) greška 404: poslužitelj ne može pronaći dokument s URL-om koji je klijent zatražio.
Tablica 3-5: Značenje prve brojke u statusnom kodu
|
Ako je prva brojka... |
Greška... |
|
1 |
… ne postoji. Poruka je informativnog sadržaja. (Samo HTTP 1.1 i viši) |
|
2 |
... ne postoji. Sve je u redu. |
|
3 |
... traženi URL nije na raspolaganju (preseljen je na neku drugu adresu) |
|
4 |
... je na strani klijenta. |
|
5 |
... je na strani poslužitelja. |
Popis i značenje svih poruka o statusu pronaći ćete u tablici 3-6. Iako poslužitelj šalje i tekstualno objašnjenje greške, njega svi pretraživači zanemaruju, te samo čitaju statusni kod i tumače ga. Tekstualno objašnjenje je zgodno ako komunicirate neposredno s poslužiteljem, kao što ćemo mi probati na kraju ovog poglavlja, pa odmah vidite i poruke o greškama koje su čitljive i ljudima, a ne samo brojke koje mogu popamtiti samo naši prijatelji od silicija.
Sve su poruke o statusu sasvim jasne iz naše tablice i bez dodatnih objašnjenja: jedino one koje se kriju iza brojki 204, 301 i 302 treba objasniti. Poruka broj 204 (No Response) označava da je klijent tražio dokument koji je prazan. Kako dokument može biti prazan? Može, primjerice, ako je korisnik kliknuo na neku sliku koja sadrži ikone, ali je kliknuo izvan bilo koje ikone, na prazan prostor. Ta se poruka može pojaviti i ako skript koji se izvršavao na poslužitelju nema nikakvih informacija koje želi poslati natrag klijentu, odnosno korisniku pretraživačkog programa. Taj je slučaj vrlo rijedak, jer će svi skripti obično pristojno odgovoriti (“Hvala, primio sam vašu narudžbu knjiga!”). Poruku ćete ipak možda vidjeti ako tražite neke ključne riječi pomoću nekih pretraživačkih alata (pogledajte 10. poglavlje) i alat nije ništa pronašao ili ako se dokument ne nalazi u cijelosti na proxy poslužitelju, odnosno ako je došlo samo njegovo zaglavlje. No, pretraživački programi koji ispravno tumače tu poruku ne bi je uopće trebali prikazati, već samostano “obraditi” na taj način što će ostati na istoj stranici na kojoj su i bili.
Slika 3-11: Poruka o pogreški prikazana u pretraživačkom programu
U slučajevima kad je dokument preseljen na novu adresu, poslužitelj će to naznačiti pomoću statusnih kodova 301 (Moved) ili 302 (Found). Nakon te poruke, poslužitelj će klijentu poslati novu URL adresu. Razlika između kodova 301 i 302 mala je: 301 označava da je traženi dokument trajno preseljen na novu lokaciju, a 302 da je promjena privremena. Vama kao korisniku to je svejedno, osim što po tome možete odlučiti isplati li se mijenjati vaš popis omiljenih adresa u pretraživačkom programu (bookmark) ili ne. Novi URL slijedi odmah nakon poruke o greški i naveden je iza Location: zaglavlja. Primjerice, ako poslužitelj ne može pronaći traženi URL, može odgovoriti ovako:
HTTP/1.0 301 Moved
Location: http://www.carnet.hr
Moguće je i izostaviti oznake protokola i imena računala, ako se novi dokument nalazi na istom računalu, pa navesti samo relativni put do novog dokumenta:
Location: /WWW/data/index.html
Zanimljiva je i “stojedinica”. (Ne, ne naša omiljena radiostanica, nego kôd 101.) Njome poslužitelj obavještava klijenta da će se koristiti neki drugi protokol za razmjenu informacija. Primjerice, poslužitelj može odabrati korištenje HTTP 1.1 umjesto HTTP 1.0, ako klijent to podržava (i zatraži). Prema službenim specifikacijama protokola HTTP, poslužitelj ovo smije dopustiti samo ako se prelazi na novu i napredniju verziju protokola. Kodovi 100 i 101 postoje samo u HTTP 1.1. Zapravo, većinu preostalih kodova uveo je tek HTTP 1.1, jer su u HTTP 1.0 postojali samo oni s oznakama 200-204, 300-304, 400-404 i 500-504. U trenucima kada privodimo ovu knjigu kraju, HTTP 1.1 je predložen, ali još uvijek nije službeno prihvaćen. No, najvjerojatnije će prijedlog uskoro biti prihvaćen i kao službena specifikacija protokola.
Tablica 3-6: Statusni kodovi i poruke o pogreškama
|
Statusni kod |
Tekstualna poruka |
Značenje |
|
100 |
Continue |
Klijent može nastaviti s traženjem dokumenata od poslužitelja. (HTTP 1.1 ili viši) |
|
101 |
Switching Protocols |
Poslužitelj obavještava klijenta da je promijenjen protokol kojim će se komunicirati. (HTTP 1.1 ili viši) |
|
200 |
OK |
Sve je u redu, dokument označen traženim URL-om je pronađen i slijedi u nastavku odgovora poslužitelja. |
|
201 |
Created |
Stvoren je novi URL, s imenom koje poslužitelj također dojavlja. Ovaj je odgovor moguć nakon naredbe POST. |
|
202 |
Accepted |
Zahtjev će se obraditi kasnije. (Vrlo rijetka poruka.) |
|
203 |
Partial Information |
Poslužitelj je poslao samo dio dokumenta, odnosno ono što je dostupno neautoriziranom korisniku. (Vrlo rijetka poruka. Obično nećete dobiti ništa ako ste neautorizirani.) |
|
204 |
No Content |
Potražen je zadani URL, no on je prazan |
|
205 |
Reset Content |
Zahtijeva se od klijenta da ponovno omogući upisivanje podataka na nekom obrascu i njihovo slanje. (HTTP 1.1 ili viši) |
|
206 |
Partial Content |
Poslan je samo djelomičan sadržaj dokumenta. Pogledajte tablicu 3-4 i naredbu Content-Range. (HTTP 1.1 ili viši) |
|
300 |
Multiple Choice |
Dokument je raspoloživ na više adresa; klijent mora birati |
|
301 |
Moved |
URL je trajno premješten na novu lokaciju |
|
302 |
Found |
URL je privremeno premješten na drugu lokaciju |
|
303 |
See Other |
Dokument je raspoloživ na toj adresi (s tehničke strane postoje manje razlike u načinu tumačenja od strane klijenta između kodova 301 i 303). |
|
304 |
Not Modified |
Dokument nije mijenjan. Ovaj se zahtjev koristi kod komunikacije s proxy poslužiteljima. |
|
305 |
Use Proxy |
Klijent mora koristiti proxy za pristup tom dokumentu. Adresa proxy poslužitelja navedena je u polju Location (tablica 3-7). (HTTP 1.1 ili viši) |
|
400 |
Bad Request |
Pogreška u sintaksi zadanog URL-a |
|
401 |
Unauthorized |
Nemate pristup traženom dokumentu, odnosno korisničko ime i lozinka nisu ispravni. |
|
402 |
Payment Required |
Trebate platiti da biste pristupili tom URL-u. (Ovaj odgovor još je vrlo rijedak, no kako će se sve više usluga na Internetu naplaćivati, bit će toga više.) |
|
403 |
Forbidden |
URL je jednostavno zabranjen za javnost i ne možete mu pristupiti, ma što god učinili. |
|
404 |
Not Found |
Dokument sa zadanim URL-om ne postoji. |
|
405 |
Method Not Allowed |
Nije dopušteno korištenje tražene metode (GET, HEAD, POST…) u kombinaciji s traženim protokolom. (HTTP 1.1 ili viši) |
|
406 |
Not Acceptable |
Poslužitelj ne može poslati dokumente traženog sadržaja (zahtjev Accept) klijentu. (HTTP 1.1 ili viši) |
|
407 |
Proxy Authentication Required |
Klijent mora zatražiti autorizaciju od proxy poslužitelja pomoću dodatnog zahtjeva. (HTTP 1.1 ili viši) |
|
408 |
Request Timeout |
Poslužitelj je čekao na zahtjev klijenta i nije ga dobio u određenom vremenu. Zahtjev treba ponoviti. (HTTP 1.1 ili viši) |
|
409 |
Conflict |
Poslužitelj ne može odgovoriti na zahtjev zbog sukoba u pristupu dokumentima (npr. pomoću zahtjeva PUT neki drugi klijent također pokušava pisati u istu datoteku na poslužitelju). (HTTP 1.1 ili viši) |
|
410 |
Gone |
Dokumenta više jednostavno nema na poslužitelju i ne postoje informacije o novoj adresi. (HTTP 1.1 ili viši) |
|
411 |
Length Required |
Poslužitelj zahtijeva od klijenta da pošalje informaciju o duljini podataka pomoću zahtjeva Content-Length (tablica 3-4). (HTTP 1.1 ili viši) |
|
412 |
Precondition Failed |
Klijenti mogu uvjetovati koje dokumente žele primiti po nekim kriterijima, npr. po imenu. Poruka označava da ne postoje dokumenti koji odgovaraju zahtjevu. (HTTP 1.1 ili viši) |
|
413 |
Request Too Large |
Zahtjev je prevelik. Poslužitelj nakon ovoga može zatvoriti vezu kako bi spriječio klijenta da nastavi s takvim zahtjevima. (HTTP 1.1 ili viši) |
|
414 |
Request URI Too Long |
Zahtjev je odbijen zbog predugačke adrese. (Neki poslužitelji pokazivali su sigurnosne rupe kod uporabe dugačkih adresa.) (HTTP 1.1 ili viši) |
|
415 |
Unsupported Media Type |
Nepodržani tip datoteke. (HTTP 1.1 ili viši) |
|
500 |
Internal Error |
Poslužitelj se “srušio” zbog neke interne greške. (Bag? Tko zna!) |
|
501 |
Not Implemented |
Ovom porukom odgovara poslužitelj ako neka svojstva ili naredbe nisu u njega ugrađene. |
|
502 |
Bad Gateway |
Poslužitelj preko kojega poslužitelj pristupa do dokumenta (pristupnik, gateway) ne odgovara na zahtjev. |
|
503 |
Service Overloaded |
Poslužitelj se guši pod prevelikim brojem zahtjeva klijenata. Pokušajte kasnije. |
|
504 |
Gateway Timeout |
Poslužitelj je pokušao preuzeti podatke s nekog drugog mjesta na Mreži, no udaljeni poslužitelj nije mu ništa odgovorio. |
|
505 |
HTTP Version Not Supported |
Poslužitelj ne podržava zatraženu verziju protokola HTTP. (HTTP 1.1 ili viši) |
Nakon prvog retka s odgovorom poslužitelja (HTTP/1.0 200 OK), ponovno, kao i kod zahtjeva klijenta, slijede neke opcionalne informacije. Primjerice, poslužitelj može poslati odgovor
Server: Netscape-FastTrack/2.0a
koji sadrži ime poslužitelja i verziju, ili informacije o datumu izrade dokumenta, zadnje promjene i trajnosti (valjanosti dokumenta): za to se koriste oznake Date, Last-Modified i Expires. Datumi su napisani u formatu koji smo već opisali u okviru “Format datuma” nekoliko stranica prije.
Svi mogući odgovori poslužitelja navedeni su u tablici 3-6, a mi ćemo ukratko objasniti one važnije. Iz same je tablice jasno čemu služe svi ostali, ali oni se vrlo rijetko koriste.
Najzanimljivije su nam poruke koje počinju s Content-. Tako porukom poput
Content-Length: 10589
poslužitelj obavještava klijenta da će poslati ukupno 10589 bajtova. Pretraživački programi mogu koristiti (i koriste) taj podatak da bi na dnu ekrana ispisivali korisniku poruku o tome koliko još podataka očekuju od poslužitelja. Za razliku od Content-Length retka koji se koristi kad klijent šalje podatke poslužitelju (pogledajte tablicu 3-4 i odjeljak “Slanje zahtjeva”), ovaj Content-Length je opcionalan i ne mora sadržavati točan broj bajtova koji će se poslati. Ako ga nema, klijent će primati podatke sve dok poslužitelj ne kaže da je kraj.
Content-Type navodi MIME tip datoteke koja se šalje, s tim da neki poslužitelji i pretraživački programi uz njega prosljeđuju i druge informacije, poput skupa znakova koji se koristi:
Content-Type: image/jpeg
Content-Type: text/html;charset=iso-8859-1
a Content-Encoding način sažimanja:
Content-Encoding: x-gzip
što označava da je datoteka koja se šalje sažeta gzipom. Neki pretraživači to mogu otpakirati, a neki, najčešće na PC-u, ne mogu, pa je rijedak slučaj da se datoteke koje čine jedan WWW dokument šalju sažete. Ipak, ako klijent može primati sažete datoteke koje čine WWW stranicu, to će naznačiti poslužitelju slanjem zahtjeva poput Accept-Encoding: x-zip (pogledajte tablicu 3-3 s popisanim zahtjevima klijenta).
Poruka Content-Transfer-Encoding zapravo je nepotrebna: njome se označava prenose li se podaci koji slijede kao čisti ASCII znakovi ili kao binarni podaci. Mogućnosti su:
Content-Transfer-Encoding: 7bit
Content-Transfer-Encoding: 8bit
Content-Transfer-Encoding: binary
Prvi slučaj označava da se radi o standardnom ASCII skupu znakova (do 127. znaka), a drugi da je taj skup proširen (8-bitni skup kakav se koristi na PC-u). No, najčešći je treći slučaj, prenošenje binarne datoteke. Poruka Content-Transfer-Encoding najčešće se uopće ne šalje klijentu ili je klijenti ignoriraju, budući da oni komuniciraju neposredno s poslužiteljem i binarni način prijenosa je najpogodniji, pa se on i podrazumijeva ako nije ništa navedeno.
Odgovor Web poslužitelja može sadržavati međusobno različite tipove podataka u jednom paketu, što je vrlo rijedak slučaj, ali je potpuno moguć. Do njega najčešće dolazi kada klijent naredbom Content-Range odredi da želi primiti samo neki dio pojedine datoteke. Odgovor poslužitelja tada najčešće izgleda ovako:
HTTP/1.10 206 Partial content
Date: Thu, 16 Nov 1995 07:33:19 GMT
Last-modified: Tue, 14 Nov 1995 04:44:14 GMT
Content-type: multipart/byteranges;
---
Content-type: application/pdf
Content-range: bytes 500-999/8000
---
Content-type: application/pdf
Content-range: bytes 7000-7999/8000
Poslužitelj je prvo prijavio status 206 (djelomični sadržaj, Partial content), a nakon toga porukom Content-type: multipart/byteranges naznačen je MIME tip podataka koji slijede. Naravno, radi se o međusobno različitim podacima, pa odatle i ovaj naziv MIME tipa. Potom slijede definicije Content-type za svaku od datoteka čiji se dijelovi šalju, te rasponi (u bajtovima) tih dijelova datoteke pod zaglavljem Content-range. Konkretno, u gornjem primjeru poslužitelj je obavijestio klijenta da pristižu bajtovi 500-999 i 7000-7999 od datoteke koja ukupno ima 8000 bajtova.
Tablica 3-7: Mogući odgovori WWW poslužitelja
|
Poruka |
Značenje |
|
Allow |
Navodi naredbe koje može izvršavati klijentski program. Primjerice, Allow: GET, HEAD, POST znači da klijent može koristiti te tri naredbe. Pogledajte tablicu 3-3 za popis osnovnih naredbi klijenta. Pogledajte i poruku Public u ovoj tablici. |
|
Content-Encoding |
Tip sažimanja podataka (MIME tip). |
|
Content-Language |
Jezik kojim je napisan dokument. |
|
Content-Length |
Duljina svih podataka koje će poslužitelj poslati klijentu. |
|
Content-Range |
Navodi raspon podataka (u bajtovima) koji slijede. |
|
Content-Transfer-Encoding |
Način prenošenja podataka (npr. označava da li će se podaci prenositi kao čisti ASCII znakovi ili kao binarne informacije). |
|
Content-Type |
Tip podataka koji se šalju (MIME tip). |
|
Cost |
Cijena za preuzimanje i gledanje dokumenta. (Koristit će se u budućnosti kada proradi sustav naplaćivanja usluga preko Interneta. Bit će usko povezan s porukom o greški 402 iz naše tablice 3-6.) |
|
Date |
Trenutno vrijeme (GMT format). |
|
Expires |
Datum nakon kojega dokument postaje nevažeći (GMT format). |
|
Keep-Alive |
Potvrđuje zahtjev za održavanjem veze s klijentom (HTTP 1.1 ili viši). |
|
Last-Modified |
Datum i vrijeme zadnje promjene dokumenta (GMT format). |
|
Link |
Dokument koji je “matični”, odnosno “roditeljski” tom dokumentu (jednu razinu iznad). Ova poruka se obično ne koristi, jer je jednostavnije napraviti hipertekstnu vezu u samom HTML dokumentu. |
|
Location |
Upućuje klijenta na neku drugu adresu (lokaciju) na kojoj se nalazi traženi dokument. |
|
Message-ID |
Identifikacijski broj dokumenta. |
|
MIME-Version |
Verzija MIME kodiranja koja se koristi. |
|
Public |
Slično kao Allow, ali se odnosi općenito na sve koji pristupaju poslužitelju. To znači da se s Public dozvoljava opće korištenje naredbi (npr. Public: GET, HEAD, POST), a s Allowed se može dozvoliti samo administratorima WWW poslužitelja da, nakon autorizacije, šalju nove dokumente i brišu stare (npr. Allow: PUT, DELETE). Pogledajte tablicu 3-3. |
|
Server |
Iza ove poruke slijedi ime i verzija poslužitelja. |
|
Title |
Naziv dokumenta. Obično se ne koristi, jer naziv dokumenta piše u njemu samom, tj. u njegovoj HTML varijanti koja se šalje klijentu, a klijent (pretraživački program) ga prikazuje na vrhu ekrana. |
|
URI |
Nova lokacija preseljenog dokumenta (nakon poruka o statusu 301 i 302). Korišteno samo u starijim verzijama protokola, a sada se preporučuje korištenje odgovora Location. |
|
WWW-Authenticate |
Koristi se za autorizaciju pristupa nekim WWW stranicama ili poslužitelju |
Konačno! Nakon razmjene svih ovih informacija (za koje vas još jednom podsjećamo da ih je većina sasvim opcionalna), WWW poslužitelj šalje i same podatke, koliko god ih ima, i zatim zatvara vezu prema klijentu. Klijent prima podatke sve dok poslužitelj ne zatvori vezu.
Izuzetak je jedino slučaj kada je klijent naredbom HEAD zatražio samo osnovne informacije o dokumentu. Poslužitelj će mu tada odgovoriti koristeći samo poruke iz tablica 3-6 i 3-7, te će odmah nakon toga zatvoriti vezu. Drugi izuzetak je slučaj kada se koristi tehnika poslužiteljskog guranja - server push, podrobnije opisana u poglavlju 12. Tada će veza između klijenta i poslužitelja stalno ostajati otvorena.
Postoji vrlo jednostavan način da provjerite kako WWW poslužitelj i HTTP protokol rade, a za to vam nije potreban WWW klijent, tj. pretraživački program. Potrebno vam je samo računalo na kojemu imate pristup do Telneta, koji omogućava povezivanje s udaljenim računalom.
Koristeći Telnet, povezat ćemo se na port na kojemu radi HTTP poslužitelj, a to je gotovo uvijek port 80:
telnet jagor.srce.hr 80
Nakon te naredbe, na ekranu ćete ugledati:
Trying 161.53.2.130...
Connected to jagor.srce.hr.
Escape character is 'ČĆ'.
i naizgled je računalo mrtvo jer se na ekranu ništa više ne pojavljuje. Ali, stupili smo u vezu s WWW poslužiteljem. Otipkajte sada:
GET /čdsusanj/pozdrav.html
Time ste poslali naredbu direktno WWW poslužitelju da pošalje navedenu datoteku. Trebali biste ugledati poruku:
Pozdrav svim čitateljima Znakove knjige o World Wide Webu!
To je poruka koju je Dario ostavio u svom direktoriju čitateljima ove knjige! Nakon toga ćete ugledati poruku:
Connection closed by foreign host.
što znači da je WWW poslužitelj zatvorio vezu odmah nakon što je poslao dokument, baš onako kako smo u prethodnom odjeljku opisali. Ako želite ponovno poslati neki zahtjev poslužitelju, morate ponovno otvarati vezu prema njemu, a tako upravo rade i WWW pretraživači.
Time, međutim, nismo još iskoristili mnoge opisane mogućnosti HTTP poslužitelja. Budući da uz naredbu GET nismo naveli verziju protokola, poslužitelj je odmah poslao sadržaj datoteke čim ste pritisnuli Enter. Poslužitelj, rekosmo, podrazumijeva da se koristi HTTP 0.9 ako se ništa ne navede, a on ne podržava dodatne zahtjeve iz tablice 3-3, poput Accept, niti omogućava poslužitelju da pošalje neke dodatne identifikacijske podatke prije slanja samih datoteka.
Ponovno se povežite, koristeći Telnet, na WWW poslužitelj, ali mu nakon toga pošaljite naredbe:
GET /čdsusanj/pozdrav.html HTTP/1.0
Accept: text/html
Sada smo u naredbi GET eksplicitno naglasili korištenje verzije 1.0 HTTP protokola. Zato poslužitelj nakon pritiska na Enter još ništa ne šalje, pa možete upisati i dodatni Accept zahtjev. Da biste poslužitelju naglasili da ste gotovi sa slanjem zahtjeva, nakon zadnjeg retka morat ćete pritisnuti Enter na praznom retku. Poslužitelj će vam odgovoriti s:
HTTP/1.0 200 Document follows
MIME-Version: 1.0
Server: CERN/3.0
Date: Friday, 12-Apr-96 19:13:47 GMT
Content-Type: text/html
Content-Length: 52
Last-Modified: Friday, 12-Apr-96 19:10:07 GMT
Pozdrav svim čitateljima Znakove knjige o World Wide Webu!
Connection closed by foreign host.
Kao što vidite, poslužitelj je prvo javio da koristi HTTP 1.0 (kao što smo od njega tražili) i da je s vašim zahtjevom sve u redu (rekli smo da tekstualna poruka nije značajna, već je bitan samo statusni kod - 200 - pa tako CERN-ov poslužitelj šalje tekst Document follows, a ne OK), zatim je javio trenutno vrijeme i uredno se predstavio (CERN/3.0), navevši pritom verziju MIME koja se koristi (MIME-Version: 1.0). Nakon toga javio je tip datoteke koju šalje (text/html), njen datum i veličinu (52 bajta), te je poslao sam sadržaj i zatvorio vezu. Nemojte se začuditi ako vidite kodove poput <TITLE> i sličnih: rekli smo poslužitelju da nam je i HTML format prihvatljiv. Telnet, sasvim razumljivo, ne može formatirati takav tekst onako kako to mogu World Wide Web pretraživači. On vam jednostavno pokazuje sve što HTTP poslužitelj šalje, ma što to bilo.
Savjet
Na CD-u se nalaze potpune specifikacije HTTP protokola 1.0 i 1.1, pa ih možete pročitati ako vas takve tehničke sitnice zanimaju više nego što smo o njima pisali u ovom poglavlju! Tamo ćete pronaći opise svih ostalih naredbi, metoda i zahtjeva kojima nismo ovdje posvetili pažnju, te detaljniji opis komunikacije između poslužitelja i klijenta, zajedno s razlikama među pojedinim verzijama protokola. Ta će vam dokumentacija poslužiti i ako ćete pisati CGI skriptove.
Toliko o HTTP-u i osnovama Weba i Interneta od Darija. Više o tome kako rade World Wide Web poslužitelji saznat ćete u petom dijelu knjige. Dragan će vas upoznati s njihovim osnovama u devetnaestom poglavlju, a nakon toga ćemo nas dvojica podijeliti posao i prekopati po svim značajnim poslužiteljima za Unix, Windowse 95 i Windowse NT, te OS/2.