HTTP (HyperText Transfer Protocol)
informasjon
oppdatert: 11. mars 2005
HTTP
HTTP (HyperText Transfer Protocol) er kommunikasjonsstandarden mellom nettleseren og webserver. HTTP er en klient-server protokoll designet for rask uthenting av informasjon spredd på ulike lokasjoner. En HTTP samtale består av at klienten oppretter en forbindelse til server og sender en "request". Serveren svarer med en "respons"-melding. Klienten kobler ned forbindelsen. I versjon 1.1 av HTTP ble det en standardisert mulighet for å holde forbindelsen åpen slik at det kan utføres flere etterfølgende "request-respons" utvekslinger uten å koble opp og ned forbindelsen.

Syntaks til "requester"-meldinger er som følger:

  • request-linje
  • hodelfelt
  • blank-linje
  • body
Der "requst-linje" er på formen:
  • request-metode URI HTTP/1.1
Der "request-metoder" er: GET, POST, HEAD, PUT ...
Der "URI" er adressen til noden (web-siden) uten protokoll og domenenavn, eks: /whois/index.html
Der 1.1 angir HTTP versjon. Lovlige verdier er 0.9, 1.0, 1.1 og 1.2
Hodefelt er omtalt i eget avsnitt om Hodefelt nedenfor

"Respons"-meldinger har tilsvarende syntaks som "request"-meldinger, med unntak av at de starter med en respons-linje istedet for request-linje):

  • HTTP/1.1 statuskode kommentar
Statuskoden er et 3 sifferet tall som tilhører en av følgende 5 grupper:
  • 100-199: Server trenger mer informasjon av klient
  • 200-299: Request ble utført med suksess
  • 300-399: Request må modifiseres for å kunne utføres.
  • 400-499: Feil av klient.
  • 500-599: Feil av server
Se eget avsnitt nedenfor for omtale av de ulike Statuskoder og Hodefelt

På første siden i denne dokumentasjonen blir weben omtalt som et nodenettverk, se her. Det ble definert tre typer HTML-lenker: "lese"-, "søke"- og "oppdatere"-lenker. De to første av disse lenketypene er i HTTP implementert ved GET-requst, men oppdateringslenker er implementert ved POST-request. Her følger eksempler på HTTP-implementasjon av de tre lenketypene. Eksemplene på "lese"- og "søke"-lenker er hentet fra dokumentasjon av HTML "Form to mail", og eksemplet på "oppdatere"-lenke er hentet fra dokumentasjon av PHP "Form to mail".

 
 
R
E
Q
E
S
T
Lese-lenke  Søke-lenke  Oppdatere-lenke    
GET /html/a1.html HTTP/1.1
GET /html/a2.html?mail=in@registrar.no HTTP/1.1 POST /php/a2.php HTTP/1.1
1.linje
Host: www.servlets.no
User-Agent: Mozilla/4.0 (compatible; MSI 6.0; Windows NT 5.0)
Referer: http://servletno/html/a1.html
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Accept-Charset: iso-8859-1, *, utf-8
Connection: Keep_alive
Accept: application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, image/gif, image/x-xbitmap, image/jpeg, image/pgjepeg, */*
Host: www.servlets.no
User-Agent: Mozilla/4.0 (compatible; MSI 6.0; Windows NT 5.0)
Referer: http://servletno/html/a1.html
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Accept-Charset: iso-8859-1, *, utf-8
Connection: Keep_alive
Accept: application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, image/gif, image/x-xbitmap, image/jpeg, image/pgjepeg, */*
Host: www.servlets.no
User-Agent: Mozilla/4.0 (compatible; MSI 6.0; Windows NT 5.0)
Referer: http://servletno/php/a2.html
Accept-Language: en-us
Connection: Keep_alive
Content-length: 33
Content-type:: application/x-www-form-urlencoded
Accept: application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, image/gif, image/x-xbitmap, image/jpeg, image/pgjepeg, */*

epost=in@registrar.no

Hodefelt
   +
Blanklinje
   +
Kroppen
R
E
S
P
O
N
S
HTTP/1.1 200 Ok HTTP/1.1 200 Ok HTTP/1.1 200 Ok 1. linje
Date: Thue,01 Oct 2002 07:35:16 GMT
Server: Apache/1.3.24 (Unix) mod_jk/1.2.0 PHP/4.2.1
Last-Modified: Mon, 30 Sep 2002 15:14:01 GMT
ETag: "8bc3b-379-3d086a39"
Accept-Ranges: bytes
Content-Length: 889
Content-Type: text/html

<html>
<head>
<title>Testskjema</titl>
</head>

<body>
.....
</body>
</html>

Date: Thue,01 Oct 2002 07:35:16 GMT
Server: Apache/1.3.24 (Unix) mod_jk/1.2.0 PHP/4.2.1
Transfer-Encoding: chunked
Content-Type: text/html

217
<html>
<head>
<title>Testskjema</titl>
</head>

<body>
.....
&nsbsp;E-post sendt til: &nbsp;
</td>
<td>
17
info@registrar.no

92
...
<body>

Date: Thue,01 Oct 2002 07:35:16 GMT
Server: Apache/1.3.24 (Unix) mod_jk/1.2.0 PHP/4.2.1
X-Powered-By: PHP/4.2.1
Transfer-Encoding: chunked
Content-Type: text/html

307
<?xml version="1.0" encoding="UTF-8" ?>
<<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
.....
<body>
</html>

Hodefelt
   +
Blanklinje
   +
Kroppen

I eksempelen over går lange hodefelt over flere linjer. Dette er ikke vanlig i praksis og uansett skal det benyttes en "\"-skråstrek på slutten av linjen for å markere at hodefeltet forsetter på neste. Dette er ikke gjort over.

VIKTIG! GET-request kan benyttes til å lese alle typer objekter. Benyttes GET-request i søkelenker skal formelt sett ikke søkestrengen være lenger enn 256-tegn, men alle vanlige implementasjoner av klienter og servere tillater lengre strenger. POST kan aksessere filer med ekstensjon: .pl .plx .php .php4 .jsp og servlet. Legg her merke til at .shtml-filer ikke kan aksesseres av POST-request.

I HTML benyttes kun request-metoden GET og POST, men webservere besvarere også andre HTTP request-metoder. Her skal kort nevnes PUT- og HEAD-request. HEAD leser ut hodefeltene til nodene og benyttes av klienter for å sjekke om cachet-versjoner av siden forsatt er gyldig. PUT-request kan benyttes til å lagre en fil på webserveren.

Historisk sett finnes det også to typer requester: "enkel" og "full". Over er det vist eksempler på "full"-request. "Enkel"-request innholder ikke hodefelt og responsmeldingen skal heller ikke innholde hodefelt. "Full"-request ble innført som standard fra HTTP/1.0.

Hodefelt

Hvilke hodefelt request- og respons-meldinger innholder og deres verdier vil variere fra for ulike klienter, servere og situasjoner. En del feltnavn og noen tilhørende verdier er definert i HTTP 1.1 standarden, se RFC 2068.

Hodefelt settes vanligvis automatisk av klientene og webserverene. Ved bruk av "meta"-taggen i HTML kan en instruere webserveren til å legge til ekstra hodefelt eller overskrive default hodefelt. For å legge til ekstra hodefelt settes atributtet "name", i "meta"-taggen, til navnet på hodefeltet og atributtet "content" til verdien i hodefeltet, eks <meta name=keyword content="manual, documentation">. For å overskrive hodefelt som blir default satt av webserveren angis felt navn i atributtet "http-equiv" og verdien i atributtet "content", eks: <meta http-equiv="Content-type" content="text/html; charset=iso-8859-1">.

I webserverprogrammering er mer eller mindre utsendelse av hodefelt overlatt til programmereren. Hodefelt kan benyttes til å bestemme hvordan klienten cacher siden, utlesning av brukerid og cookies. HTTP-standarden setter få krav til bruk av hodefelt, men en må merke at responsmeldinger på GET- og POST-requst må innholde følgende:

  • Må innholde "Content-Type".
  • Lengden på body i responsmeldingen må signaliseres hvis en ønker å utveksle flere meldinger i samme forbindelse. I eksemplene over indikeres lengden ved bruk av hodefeltene "Content-Length" og "Transfer-Encoding: chunked"
Klienter må i hodefeltet "Host" oppgi hvilket domenavn som aksesserer. Dette er krav i HTTP/1.1, men var ikke påkrevet i HTTP/1.0. Alle vanlige klienter setter feltet, selv om versjon 1.0 benyttes. Våre webhotell er avhengig av dette feltet for å rute weboppslag til korrekt katalog.

Nedenfor er en del hodefelt omtalt. Felt som er definert i HTTP 1.1 standarden er krysset av i feltet "HTTP/1.1".

Navn Request Respons HTTP/1.1 Forklaring
Accept: X   X Hodefeltet angir hvilke MIME-typer klienten kan vise. Hva nettleseren støtter via plugin-blir ikke listet.
Accept-charset: X   X Angir hvilke karaktersett nettleseren forstår.
Accept-Encoding: X   X Benyttes gjerne til å angi ulike måter for kompresjon nettleseren forstår. Vanlige verdier er "gzip" og "compress". Benytter serveren seg av en av disse komrpresjonsteknikkene må metode benytte spesifiseres i hodefeltet "Content-Encoding"
Accept-Language: X   X Foretukket språk en ønsker innholdet i om server kan tilby flere ulike varianter. Verdien skal følge spefikasjonen rfc 1766
Allow:   X X Angir hvilken request-methoder server støtter. Feltet benyttet i samspill med statuskode 405, samt ved OPTIONS-request.
Authorization: X   X Feltet innholder brukerid og passord. Brukes i samspill med statuskode 401 og "WWW-autorization"-hodefeltet
Cache-Control:   X X Feltet benyttes av server for å fortelle klient hvordan noden trygt kan cache's:
  • public Noden kan cache's
  • private Noden kan cache's på privat maskin, men ikke i av proxy i nettet.
  • no-cache Noden skal ikke cache's. Eldre klienter benytter "Pragma"-feltet. Normalt sett vil ikke klienter cache noder hentet ved søke- og oppdaterings-lenker.
  • no-store Noden skal ikke bli cached og heller ikke lagret på andre midlertidig måter på disk.
  • must-revalidate Noden må sjekkes for endringer på orginal server og ikke på en mellomliggende proxy før visning
  • proxy-revalidate Tilsvarende "must-revalidate" men gjelder kun for proxy.
  • max-age=x "X" angir her antall sekunder noden er gyldig. Eldre klienter benyter feltet "Expires"
  • s-max-age=x "X" angir her antall sekunder noden er gyldig i proxy (shared cache).
Connection: X X X For å muligjøre utveksling av flere request/respons-sesjoner uten å koble opp og ned forbindelsen for hver gang kunne klientene i HTTP/1.0 tilordne dette felte verdien "keep-alive". Dette er nå default forbindelses-type i HTTP/1.1. Både klient og server kan signalisere at de ønsker å stenge forbindelsen etter at responsmelding er mottatt/utsendt ved sette verdien til "close".
Content-Encoding:   X X Angir kompression algoritme benyttet av server. Server kan kun benytte en av de metodene som er oppgitt i "Accept-Encoding".
Content-Language:   X X Indikerer hvilket språk noden er innholdet. Verdien skal følge spefikasjonen rfc 1766
Content-Length: X X X Feltetverdien er antall byte som body i meldingen er på. Klienten setter feltet ved POST-request. Ved utveksling av flere request/respons- meldinger i samme forbindelse må servere indikere lengen på kroppen i responsmeldingen. Lengen kan settes i dette feltet.
Content-Type: X X X Feltet angir MIME (Multipurpose Internet Mail Extension) til body i meldingen. I eget avsnitt nedenfor er det liste hvordan våre webservere default mapper filekstensjoner til MIME-typer. Se kapittel om Webklient-programmering for hva nettleseren gjør med MIME-typer den ikke direkt har støtte for. Feltet må alltis settes om meldingen innholder body.
Cookie: X     Feltet benyttes av klient til å sende cookie's til server, se eget avsnitt lengre ned på siden
Description:   X   Feltet innholder en kort beskrivelse av innholdet på siden. Benyttes av søkemotorer for kort presentasjon av siden.
Expires:   X X Angir i sekunder etter 1970 hvor lenge noden er gyldig. Feltet er erstattet av "Cache-Controll".
Host: X   X Første-linjen i request innholder aldri domenenavn og webklient er i henhold til HTTP/1.1 pålagt angi domenavn i dette feltet. Alle vanlige klienter setter feltet, selv om versjon 1.0 benyttes. Våre webhotell er avhengig av dette feltet for å rute weboppslag til korrekt katalog.
If-Modified-Since: X   X Feltet indikere at klienten ønsker request utført bare om angitt node er modifisert etter oppgitt dato. Server responderer med statuskode 304 om noden ikke er endret. Klienten feltet for å sjekke om cachet versjon av noden forsatt er gyldig.
If-Unmodified-Since: X   X Feltet indikere at klient ønkser request skal utføres bare om noden er eldre enn oppgitt dato. Dette aktuelt ved PUT-metoden der en kan overskrive en node på serveren.
Last-Modified:   X X Feltet fortelle når noden sist ble endret. Ved cache'ing av noden kan klienten sjekke om noden er endret på serveren før den vises på nytt. Dette utføres i samspill med "If-Modified-Since" og statuskode 304.
Location:   X X Feltet bør settes av server for statuskoder fra 300 til 399. Feltet inneholder URL til noden. Ved statuskode 302 er dette redirect lokasjonen til noden.
Page-Enter:   X   Kan benyttes til å sette handlinger som skal skje når brukeren kommer til siden. I IE kan en spesifisere et RevealTran-filter, f.eks Page-Enter: RevealTrans(Duration=20, Transition=3). Her angir "Duration" hvor lenge transformasjonen skal pågå, i dette tilfelle 2-to sekunder. Verdien Transation tar verdier mellom 0 til 23 som indikerer ulike filter i IE
Page-Exit:   X   Kan benyttes til å sett handler som skal skje når brukeren forlater siden. Mulighet for angi tilsvarende filter i IE som ved Page-Enter
Pragma:   X X Verdien settes til "no-cache" for å at klient cache'r siden. Feltet er erstatet av "Cache-Control".
Keyword:   X   Feltet tar en komma separert liste med ord. Disse ordene blir lest av søkeroboter som sveiper rundt på nettet. Tilhørende søkemotoren matcher dine ord mot kriterer som brukeren taster inn.
Referer: X   X Ved trykk på HTML-lenker setter vanligvis klienten dette feltet. Feltet indikerer URL noden brukeren kom fra. Dette er nyttig logginformasjon, særlig med tanke på å måle respons på bannere-annonser.
Refresh:   X X Angir i sekunder hvor ofte klienten bør sprørre et en ny oppdatert versjon av noden. Hver etterfølgende versjon av noden må også innholde hodefeltet for å oppnå kontinuerlig oppdatering. Det er også mulig å oppgi hvilken url som skal hentes etter oppgitte sekunder, eks: Refresh: 5; URL=http://servlets.no/eksempel.html
Retry-After:   X X Kan benyttes i samspill med statuskode 503 om hvor rask klienten bør prøve igjen.
Robots:   X   Feltet kan tilordnes verdien "noindex" og "nofollow". "Noindex" anmoder søkeroboter om ikke føre opp sidne sin index. "Nofollow" anmoder søkeroboter til ikke å følger linker på siden.
Set-Cookie:   X X Benyttes til å sette en cookies tilhørende siden. Det må spesifisers et felt for hver cookie.
User-Agent: X   X De fleste browsere utgir seg for å være "Mozilla" som er Netscape browser kjerne. Dette er fordi mange JavaScript bruker feltet for å sjekk hvilken DOM-model som skal benyttes. Det virkelig navnet på browseren er skrevet i parantes etter "Mozilla". Hverken MSIE eller Opera benytter Mozilla.
WWW-Authenticate: X   X Feltet brukes i samspill med "Authorization" og statuskode 401. Ved statuskode 401 angir feltet hvordan brukernavn og passord skal kodes. Det er bare to utbredte kode muligheter: BASIC og DIGIST. BASIC betyr koding BASE64.

Cookie
Cookie er liten stykke informasjon som klienten sender til webserveren. Server lagrer cookies i klienten ved bruk av hodefeltet Set-Cookie, eks:
  • Set-Cookie: Kunde=henrik_berg; expires=Wedensday, 09-Nov-99 23:12:40 GMT
Cookie med eksakt samme navn, domene og path vil bli overskrevet hos klienten.

Klienten sender cookies i hodefeltet "Cookies", eks:

  • Cookie: KUNDE=henrik_berg.
Her sendes KUNDE-cookie med verdien "henrik_berg" til serveren. Ved request av en webside vil det sjekkes om URL matcher en eller flere cookies. Domenenavndelen av URL må være et underdomen av "domain"-atributtet. Stien i URL må våre innenfor katalogen spesifisert av "path"-atributtet. Default verdier til domain- og path-atributtene settes til URL i request.

Ved å spesifisere opp "domain"- og "path"-atributtet i respons-meldingen kan en utvide URL-område som cookien vil bli returnert for. For domain-atributtet er dette er begrenset oppad til 2.nivå domener, slik at du ikke kan lage cookies som returners f.eks for alle .no-domener. Det er ikke lov å sette domain og path-atributtet verdier som gir et mindre område enn det som er default.

  • Set-Cookie: Kunde=henrik_berg; domain=registrar.no path=/; expires=Wedensday, 09-Nov-99 23:12:40 GMT
Denne cookies vil vedlegges alle request til http://registrar.no og http://www.registrar.no

Følgende er mimimskrav til klienter som støtter cookies:

  • Totalt 300 cookies
  • 4kByte pr cookies
  • 20 cookies pr domene
Netscape definerte versjon 0 av cookies i 1995, se http://wp.netscape.com/newsref/std/cookie_spec.html. IETF har i etterkant kommet med en versjon 1 som benytter hodefeltene "Cookie2" og "Set-Cookie2", se RFC 2965. Versjon 0 er default og den som er mest utbredt.

Statuskoder
Statuskoden settes automatisk av webserveren, men kan overstyres ved php- og sevlet-programmering.

Statuskode Forklaring
100 (Continue) Gir beskjed til klient at server godtar tilleggsinformasjon i neste request. Tilleggsinformasjon kan være fil som skal lagres på disk i webhotellet.
200 (OK) Request er utført med suksess
202 (Accept) Request er acceptert, men ikke ferdig utført
204 (No Content) Noden innholder ikke noe data. Kan være nyttig å returne når brukeren trykker gjentatte ganger på refresh uten at innholdet er endret.
205 (Reset Content) Anmoder klient om å refreshe visningen av noden, tømme form-feltetc, istedet for å returner nytt dokument.
301 (Moved Permanently) Noden er flyttet til URL angitt i Location-feltet
302 (Found) Tilsvarende 301. I HTTP/1.0 var statuskoden assosiert med teksten "Moved temporarily".
303 (See Other) Tilsvarende 302, men klienten blir anmodet om å hente node fra ny lokasjon ved methoden GET selv om opprinnelig request-metode var POST
304 (Not Modified) Noden klient spør etter er ikke endret siden "If-Modified-Since"-feltet i request.
307 (Temporary Redirect) Tilsvarende302, men kun redirect av GET-request
400 (Bad Request) Indikerer feil syntaks i request-meldingen
401 (Unauthorized) Noden er passordbeskyttet. Vedlegger "WWW-Authenticate"-felt som angir hvilken måte brukernavn og passord må kodes i. Vanligvis vil nettlesere som mottar denne meldingen vil vise en popup vindu der brukeren kan oppgi navn og passord
403 (Forbidden) Serveren avslår å sende noden, uavhengig av autorisering. Dette kan være filrettigheter er satt på noden slik at webserveren ikke kan lese filen. Våre webserevere svarer dette når en benytter url som slutter på katalognavn og det ikke eksisterer noen index.-fil
404 (Not found) Ikke lovlig request-metode
405 (Method Not Allowed) Request-metoden er ikke lovlig. I feltet "Allowed" oppgis hvilke methoder som kan benyttes
415 (Unsupported Media Type) Body i request har MIME-type som ikke webserver vet hvordan den skal behandle
417 (Expectation Failed) Når server mottar er en request for å sende ytterlige informasjon i neste request kan server besvare denne med statuskode 100 eller denne 417.
500 (Inernal Server Error) Interne feil som gjøre at request ikke kan utføres. Årsaken kan være feil i webserverprogrammer requsten ikke blir fullført.
501 (Not implemented) Benyttes ved request av metoder som ikke er støttet av webserveren.
503 (Service Unavailable) Benyttes når midlertid opptatt eller tjenester er overbelastet.
505 (HTTP Version Not Supported) Støtter i oppgitt versjon i request

Webserver mapping av filekstensjoner til MIME-type
Våre webhotell setter automatisk hodefeltet "Content-type" til følgende MIME-typer for følgende eksensjoner. Ønsker om flere assosiasjoner på våre webservere sendes til firmapost@registrar.no:

MIMEekstensjon
application/andrew-inset ez
application/mac-binhex40 hqx
application/msword doc
application/octet-stream bin dms lha lzh exe class so dll
application/oda oda
application/pdf pdf
application/postscript ai eps ps
application/smil smi smil
application/vnd.mif mif
application/x-bcpio bcpio
application/x-cdlink vcd
application/x-chess-pgn pgn
application/x-cpio cpio
application/x-csh csh
application/x-director dcr dir dxr
application/x-dvi dvi
application/x-gtar gtar
application/x-hdf hdf
application/x-koan skp skd skt skm
application/x-latex latex
application/x-netcdf nc cdf
application/x-sh sh
application/x-shar shar
application/x-stuffit sit
application/x-sv4cpio sv4cpio
application/x-sv4crc sv4crc
application/x-tar tar
application/x-tcl tcl
application/x-tex tex
application/x-texinfo texinfo texi
application/x-troff t tr roff
application/x-troff-man man
application/x-troff-me me
application/x-troff-ms ms
application/x-ustar ustar
application/zip zip
audio/basic au snd
audio/midi mid midi kar
audio/mpeg mpga mp2 mp3
audio/x-aiff aif aiff aifc
audio/x-mpegurl m3u
audio/x-pn-realaudio ram rm
audio/x-wav wav
chemical/x-pdb pdb
chemical/x-xyz xyz
image/bmp bmp
image/gif gif
image/ief ief
image/jpeg jpeg jpg jpe
image/png png
image/tiff tiff tif
image/vnd.wap.wbmp wbmp
image/x-cmu-raster ras
image/x-portable-anymap pnm
image/x-portable-bitmap pbm
image/x-portable-pixmap ppm
image/x-rgb rgb
image/x-xbitmap xbm
image/x-xpixmap xpm
image/x-xwindowdump xwd
model/iges igs iges
model/mesh msh mesh silo
model/vrml wrl vrml
text/css css
text/html html htm
text/plain asc txt
text/richtext rtx
text/rtf rtf
text/sgml sgml sgm
text/vnd.wap.wml wml
text/vnd.wap.wmlscript wmls
text/xml xml xsl
text/x-setext etx
video/mpeg mpeg mpg mpe
video/quicktime qt mov
video/vnd.mpegurl mxu
video/x-msvideo avi
video/x-sgi-movie movie
x-conference/x-cooltalk ice

Oversikt over standardiserte MIME-typer