Specifikation

Cookies er ikke en del af HTTP/1.0 specifikationen men en udvidelse til denne, som er designet af Netscape. Dette betyder, at ikke alle browsere understøtter cookies. Udvidelsen giver ikke mulighed for at en klient kan fortælle en server, at den ikke understøtter cookies.

En cookie gives til en klient ved enten at inkludere en Set-Cookie HTTP Response Header i en HTTP Response Header genereret af et CGI-script, eller ved at benytte JavaScript, hvor Set-Cookie HTTP Response Headers ikke benyttes, men hvor cookien skrives direkte på brugerens harddisk.

Syntaksen for Set-Cookie HTTP Response Headeren er følgende:

Set-Cookie: name=VALUE; expires=DATE; path=PATH; domain=DOMAIN_NAME; secure

Med parameteren name angives navnet på den ønskede cookie efterfulgt af den værdi, som denne cookie skal have. Name er den eneste parameter, som skal angives. Derefter angives med expires en udløbsdato for cookien, som har betydning for cookiens levetid. Så følger path, som angiver det subset af adresser (URL's), hvor cookien skal gælde, efterfulgt af domain, som er navnet på den server, som har sat denne cookie. Endelig findes flaget secure, som angiver, hvorvidt denne cookie skal sendes over en sikker forbindelse, hvilket p.t. betyder forsendelse via HTTPS-protokollen (HTTP over Secure Socket Layer). For en uddybning af de enkelte muligheder, se venligst specifikationen for Persistent Client State HTTP Cookies hos Netscape [www.netscape.com/newsref/std/cookie_spec.html].

Når klienten senere vender tilbage til den samme server, sørger klienten for at sende de cookies tilbage til serveren, som svarer til den pågældende URL. Klienten sender disse cookies tilbage ved at inkludere Cookie HTTP Request Headeren som en del af HTTP requestet til serveren. Syntaksen for Cookie HTTP Request Headeren er følgende:

Cookie: name1=VALUE1; name2=VALUE2; ...

Cookies giver mange muligheder, men har også mange begrænsninger. Det følgende er en liste af muligheder og begrænsninger, som man skal huske på ved brug af cookies [Netscape]:

  • Klienten kan kun forventes at lagre 300 cookies ad gangen. Overstiges dette antal, må man forvente, at klienten sletter de ældste cookies.
  • En cookies navn og tilhørende værdi kan maksimalt fylde 4 kb. Hvis en cookies navn og værdi alligevel fylder mere, bliver alt over 4 kb skåret væk. Udover de 4 kb gemmes hos klienten også path, domain, udløbsdato og angivelse af secure.
  • Hvert domæne kan kun gemme 20 cookies. Dette skyldes, at et enkelt domæne ikke skal have mulighed for at "oversvømme" en bruger med cookies. Hvis cookie nr. 21 fra et bestemt domæne ankommer, må man forvente, at den ældste cookie fra dette domæne vil blive slettet for at gøre plads til den nye cookie.
  • Flere Set-Cookie headers kan sendes i et enkelt HTTP Response fra en server til en klient.
  • En cookie med samme path og navn som en tidligere cookie vil slette den tidligere.
  • Der kan sættes cookies med samme path men med forskellige navne.
  • Der kan sættes cookies med samme navn, hvis de blot har forskellig path. Alle cookies med match vil så blive sendt til serveren af klienten.
  • Klienten kan behandle cookies, som er udløbet pga. en expires-variabel, som den har lyst. Klienten er ikke tvunget til at slette cookien. Klienten må godt slette cookien, før den udløber, hvis antallet af cookies overstiger klientens interne begrænsning, som minimum er 300.
  • Skal flere cookies sendes til serveren, sendes cookies med en mere specifik path (f.eks. www.g-b.dk/torben/cookies/guestbook) til serveren før cookies med en mindre specifik path (f.eks. www.g-b.dk/torben/cookies).
  • En cookie kan slettes ved at sende en cookie med nøjagtig samme navn og path, som blot har en expires-variabel sat til en dato i fortiden.
  • Ved caching på en proxy-server må Set-Cookie HTTP Response Headeren ikke caches.
  • Proxy-servere skal altid sørge for at videresende alle Set-Cookie HTTP Response Headers fra en server til klienten. Proxy-servere skal ligeledes sørge for, at Cookie HTTP Request Headers fra klienten videresendes til den ønskede server, selvom den ønskede HTML-side på serveren ikke er ændret i forhold til HTML-siden på proxy-serveren.

På grund af ovenstående begrænsninger på antallet af cookies, som den enkelte server kan have liggende hos en browser, kan man implementere cookies på en måde, som vi vil kalde compressed cookies. En compressed cookie er en enkelt struktureret cookie, som indeholder flere forskellige informationer svarende til indholdet af flere forskellige cookies. Dermed kan man opbevare op til 4096 bytes data i en cookie uden risiko for at støde på begrænsningen med 20 cookies.

« Teori: HTTP client-server interaktion - Teori: Client-side vs. server-side cookies »