25/10/2016
Internettet, som vi kender det, er bygget på en konstant kommunikation mellem din browser (klienten) og de webservere, der hoster de hjemmesider, du besøger. Denne kommunikation styres af et sæt regler kendt som Hypertext Transfer Protocol (HTTP). Kernen i HTTP er anmodnings-svar-modellen, hvor klienten sender en anmodning, og serveren returnerer et svar. For at specificere formålet med en anmodning bruges forskellige metoder eller 'verber'. De to mest almindelige er GET og POST. Mens GET bruges til at hente data, har POST en anden, afgørende rolle: at sende data til en server for at oprette eller opdatere en ressource. Denne artikel vil dykke ned i, hvad en POST-anmodning er, hvordan den fungerer, og hvorfor den er så fundamental for den moderne weboplevelse.

Hvad er en POST-anmodning?
En POST-anmodning er en HTTP-metode, der bruges til at sende data til en webserver. I modsætning til en GET-anmodning, hvor data sendes som en del af URL'en (hvilket gør dem synlige og begrænsede i længde), sender en POST-anmodning dataene i anmodningens 'krop' (request body). Dette gør metoden ideel til at håndtere følsomme oplysninger, store datamængder og handlinger, der medfører en ændring på serveren, såsom at oprette en ny bruger, indsende en kontaktformular eller uploade en fil.
Tænk på det som at sende et brev. Med en GET-anmodning skriver du din besked på ydersiden af konvolutten for alle at se. Med en POST-anmodning lægger du beskeden inde i en forseglet konvolut, hvilket holder indholdet privat og sikkert under transporten.

Nøgleegenskaber ved POST-anmodninger
POST-metoden har flere distinkte egenskaber, der adskiller den fra andre HTTP-metoder:
- Ikke cachelagret: POST-anmodninger bliver aldrig gemt i browserens cache. Hver anmodning behandles som unik af serveren.
- Ingen browserhistorik: Data sendt via POST gemmes ikke i browserhistorikken. Dette er en vigtig sikkerhedsfunktion, især for loginoplysninger.
- Kan ikke bogmærkes: Da anmodningen indeholder data, der skal behandles, kan den ikke gemmes som et bogmærke.
- Ingen datalængdebegrænsninger: Der er ingen teoretiske begrænsninger for mængden af data, du kan sende i en POST-anmodning, i modsætning til GET, som er begrænset af URL'ens maksimale længde.
Sammenligning: GET vs. POST
For fuldt ud at forstå styrken ved POST er det vigtigt at sammenligne den direkte med dens modpart, GET. Selvom begge er essentielle, tjener de vidt forskellige formål. Nedenstående tabel fremhæver de vigtigste forskelle.
| Egenskab | GET | POST |
|---|---|---|
| Tilbage-knap / Genindlæs | Ufarlig. Siden genindlæses normalt. | Data vil blive genindsendt. Browseren advarer typisk brugeren om dette for at undgå duplikerede handlinger (f.eks. at bestille en vare to gange). |
| Bogmærker | Kan bogmærkes. | Kan ikke bogmærkes. |
| Cache | Kan cachelagres. | Bliver ikke cachelagret. |
| Browserhistorik | Parametre gemmes i browserhistorikken. | Parametre gemmes ikke i browserhistorikken. |
| Datalængde | Begrænset af URL'ens maksimale længde (typisk omkring 2048 tegn). | Ingen begrænsninger. |
| Datatyper | Kun ASCII-tegn er tilladt. | Alle datatyper, inklusive binære data (f.eks. filer), er tilladt. |
| Sikkerhed | Mindre sikker, da data er synlige i URL'en. Bør aldrig bruges til følsomme oplysninger. | Mere sikker, da data er skjult i anmodningens krop. Dette er standarden for følsomme data. |
| Synlighed | Data er synlige for alle i URL'en. | Data vises ikke i URL'en. |
Forskellen på POST og PUT
En anden metode, der ofte forveksles med POST, er PUT. Begge bruges til at sende data til en server, men der er en afgørende filosofisk og teknisk forskel: idempotens.

En handling er idempotent, hvis det at udføre den flere gange har samme resultat som at udføre den én gang. PUT-anmodninger er idempotente. Hvis du sender en PUT-anmodning for at opdatere en brugers profil med de samme oplysninger flere gange, vil resultatet på serveren være det samme efter den første anmodning. Du opdaterer den specifikke ressource (f.eks. `/brugere/123`) til en bestemt tilstand.
POST-anmodninger er derimod ikke idempotente. Hvis du sender den samme POST-anmodning for at oprette en ny bruger flere gange, vil du sandsynligvis oprette flere identiske brugere. Hver anmodning resulterer i en ny ressource. Derfor bruges POST typisk til at oprette nye underordnede ressourcer (f.eks. at sende til `/brugere` for at oprette en ny bruger).

Praktisk anvendelse af POST
Du interagerer med POST-anmodninger hver dag uden at tænke over det. Her er nogle almindelige eksempler:
- Login-formularer: Når du indtaster dit brugernavn og din adgangskode, sendes disse oplysninger via en POST-anmodning for at holde dem skjulte.
- Oprettelse af konto: Når du tilmelder dig en ny tjeneste, sendes alle dine oplysninger (navn, e-mail osv.) via POST for at oprette din profil i databasen.
- Upload af filer: Når du uploader et billede til sociale medier eller en fil til en cloud-tjeneste, bruges POST til at sende selve fil-dataene.
- Indsendelse af kommentarer: At skrive en kommentar til en blog eller et forum indebærer at sende teksten i en POST-anmodning.
I HTML-formularer styres dette typisk via `method="post"`-attributten i `
application/x-www-form-urlencoded: Standardkodningen for simple tekstdata. Nøgle-værdi-par adskilles med `&`.multipart/form-data: Bruges, når formularen indeholder filer, binære data eller ikke-ASCII-tegn. Hver værdi sendes som en separat datablok.
Ofte Stillede Spørgsmål (FAQ)
Er en POST-anmodning fuldstændig sikker?
Nej. POST skjuler data fra URL'en, browserhistorikken og serverlogs, hvilket gør den markant mere sikker end GET til følsomme data. Dog sendes dataene stadig i klartekst over netværket, medmindre du bruger en krypteret forbindelse. For ægte sikkerhed er det afgørende at kombinere POST med HTTPS (HTTP Secure), som krypterer hele kommunikationen mellem klient og server.
Hvornår skal jeg bruge POST i stedet for GET?
Du bør altid bruge POST, når:
- Handlingen medfører en ændring på serveren (oprettelse, opdatering, sletning).
- Du sender følsomme oplysninger som adgangskoder, personlige data eller betalingsoplysninger.
- Du skal sende en stor mængde data, der overstiger URL-længdebegrænsningen.
- Du har brug for at sende binære data, f.eks. en fil.
Hvad sker der, hvis jeg genindlæser en side, der blev vist efter en POST-anmodning?
De fleste moderne browsere vil vise en advarsel, der spørger, om du er sikker på, at du vil indsende formularen igen. Dette er en sikkerhedsforanstaltning for at forhindre utilsigtede duplikerede handlinger, som f.eks. at foretage det samme køb to gange.
Hvis du vil læse andre artikler, der ligner HTTP POST-anmodning: En dybdegående guide, kan du besøge kategorien Teknologi.
