HTML

method: GET eller POST

Attributet method i <form> talar om hur data från ett formulär ska skickas dit den ska via HTTP-protokollet. method har två möjliga värden: get respektive post (fler HTML-metoder finns, men de brukar inte användas till formulär) och det är inte helt enkelt att förstå vad som skiljer dem åt.

På en nivå är det oftast bara att använda den metod som anges i dokumentationen till det skript eller den funktion som ska behandla formulärdatan. Man kan också testa och se om det funkar. I och med att det bara finns två alternativ är det ju lätt att testa sig fram.

På en annan nivå kan det vara bra att veta hur de fungerar, rent tekniskt. Om du skriver dina egna funktioner som ska använda formulärdata är det bra om du förstår vad som händer, bland annat ur säkerhetshänseende. Värt att tänka på är ju att formulärdata kan användas till så många olika sätt. Så här ska jag försöka beskriva vad som händer på ett lite djupare sätt, som förhoppningsvis kan hjälpa dig att förstå vad som egentligen händer.

Vad är en HTTP-request?

Det jag kallar HTTP-metoder ovan är egentligen för metoder för HTTP-request. HTTP-förfrågan skulle man kunna översätta det till på svenska, vad det hela handlar om är hur kommunikation mellan klient och server fungerar enligt konnunikationsprotokollet HTTP. I det här fallet är klienten ditt webbläsarprogram, som i det här sammanhanget formellt kallas UA, user agent. Servern är webbserverprogrammet på serverdatorn.

Att man använder begreppet UA snarare än "webbläsaren" eller "browser" beror på att inte bara webbläsaren, utan även andra program kan kommunicera med servern via HTTP. UA är alltså ett mer generellt begrepp för en HTTP-klient.

Kommunikationen över HTTP kan beskrivas som följer. Klienten, UA, skickar en förfrågan, request på engelska till servern. Om förfrågan är korrekt formulerad skickar servern tillbaks ett svar, response till klienten, vanligen de filer som begärts, eller ett felmeddelande om det inte fungerar.

Requestmeddelandet som skickas kan bestå av två delar, head och body (lite som en HTML-sida, men ändå rätt annorlunda).

Det som händer när du skriver in en adress i adressfältet i din vanliga webbläsare och trycker på enter-tangenten kan alltså förklaras som att du skickar iväg en HTTP-request till en server, och får en webbsida som svar på din begäran. I det fallet innehåller din request en metod (get), information om din programvara, maskin, eventuella cookies som finns lagrade av programmet, med mera, och URL-en till den resurs du efterfrågar från servern.

När du skickar en request med metoden get skrivs all data från formuläret in i head-delen som en enda lång URL. Bortsett från att det begränsar hur mycket data som kan skickas (URL har en maxlängd på 2 048 tecken) och att den måste kodas om till ett textmeddelande (vilket kan vara ett problem när data som inte är text ska skickas), innebär detta att all data finns kvar i webbläsarhistoriken. URL:en går också att enkelt kopiera.

När requesten skickas med metoden post hamnar i stället formulärdatan i body-delen av requesten, den är alltå inte en del av URL:en och kommer inte finnas kvar i webbläsarhistoriken.

Jämförelse mellan get och post

  GET POST
Tillbakaknappen eller omladdning av sidan Helt riskfritt. Data kommer skickas igen, webbläsaren ska normalt varna om att detta är på väg att göras.
Bokmärken Kan bokmärkas. Kan inte bokmärkas.
Cachning Kan cacheas. Cacheas inte.
Datakodning application/x-www-form-urlencoded. application/x-www-form-urlencoded eller multipart/form-data. För binärdata (filer som inte är text) används multipart/form-data.
Webbläsarhistorik Data finns kvar i webbläsarhistoriken. Data finns inte kvar i webbläsarhistoriken.
Begränsningar i datamängd som kan skickas Ja. Eftersom allt måste formuleras som en URL, som inte kan vara längre än 2 048 tecken Obegränsat med data kan skickas (om inte den mottagande funktionen eller formuläret själv begränsar det).
Typ av data som kan skickas Enbart tecken i ASCII:s teckenuppsättning kan skickas. Obegränsat. Alla sorters text och binärdata kan skickas.
Säkerhet Get anses som mindre säkert, eftersom all data är synlig i URL:en. Använd inte get för att skicka lösenord eller annan känslig information. Post är säkrare i och med att data inte visas i URL:en, sparas i webbläsarhistoriken eller i webbserverns loggar.
Synlighet Data visas i URL:en. Data visas inte i URL:en.

En annan bra jämförelse och förklaring finns på www.guru99.com