GunnarD skrev:
Nja, GET ligger i URL'en medans POST ligger i headern.
Jag gör väl en utläggning jag då...
Vi börjar med http://www.webforum.nu/index.php?threads=40
http talar om att vi ska använda http-protokollet.
www.webforum.nu talar om vilken server som ska anropas.
/index.php?threads=40 talar om vilken sida vi ska begära.
Först så måste vi veta vilken adress servern har som vi ska kontakta, så vi tar fram A-record för www.webforum i DNS:en:
www.webforum.nu canonical name = wf1.webforum.nu.
Name: wf1.webforum.nu
Address: 193.13.74.84
Okej, så servern heter egentligen wf1.webforum.nu, men det intressanta i sammanhanget är att adressen är 193.13.74.84 för då har vi en server att kontakta...
Vi kontaktar 193.13.74.84 på port 80 (standard för http) och något vaknar i andra änden och vi kan skicka vår begäran om att få se sidan.
GET /index.php?threads=40 HTTP/1.1
Host: www.webforum.nu
Det är allt, med GET så skickar man bara en header. Men sen får vi ett svar tillbaka från webforum, och det innehåller både en header och en body. Headern slutar med en tomrad och därefter börjar bodyn. Men för att veta när bodyn slutar så måste man tala om längden på den i headern. Så här ser svaret ut:
HTTP/1.1 200 OK
Connection: close
Date: Thu, 12 Jul 2007 12:45:37 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: PHP/4.3.6
Set-Cookie: bbsessionhash=25232de2f7b25ee4e3145e6035b6f92b; path=/; domain=www.webforum.nu
Set-Cookie: bblastvisit=1184244336; expires=Fri, 11-Jul-2008 12:45:36 GMT; path=/; domain=www.webforum.nu
Set-Cookie: bblastactivity=1184244336; expires=Fri, 11-Jul-2008 12:45:36 GMT; path=/; domain=www.webforum.nu
Expires: 0
Cache-Control: private, post-check=0, pre-check=0, max-age=0
Pragma: no-cache
Content-Type: text/html; charset=ISO-8859-1
Content-Length: 104667
Notera några saker som är intressanta...
Set-Cookie, det är så en cookie skapas. Webbservern skickar med den i headern och nu är det upp till webbläsaren att komma ihåg den och vid alla följande requests lägga med den i headern ("Cookie:").
Content-Type, det är innehållsdeklarationen som talar om vad bodyn innehåller för slags data. Det är det som styr vad webbläsaren ska göra, om den ska visas det själv, om den ska använda ett plugin eller om den ska spara det som fil.
Content-Length är hur många bytes som bodyn är på, i det här fallet alltså html-sidan vi får som svar (index.php).
Det var GET och svaret på det, men om nu går över till POST, vilket till exempel används när man skriver ett inlägg...
Då är URL:en http://www.webforum.nu/newreply.php
POST /newreply.php HTTP/1.1
Host: www.webforum.nu
Inledningen ser nästan likadan ut (man kan skicka med "GET-variabler" här också om man vill) men sen måste vi lägga till några ytterligare headerrader:
Content-Type: application/x-www-form-urlencoded
Content-Length:
Content-Typen anger att det är ett urlkodad formulärdata vi ska skicka, och så måste vi ha antalet bytes på Content-Length. Sedan måste vi också ha med vår cookie som talar om vem vi är inloggade som, annars kommer inte inlägget att accepteras.
Men därefter kommer en tomrad och så börjar bodyn som innehåller datat vi ska POST:a...
do=postreply&s=&t=158652p=1333913&title=&message=Hello+World
Det kompletta meddelandet blir alltså:
POST /newreply.php HTTP/1.1
Host: www.webforum.nu
Cookie: Den-inloggades-cookie
Content-Type: application/x-www-form-urlencoded
Content-Length: 60
do=postreply&s=&t=158652p=1333913&title=&message=Hello+World
Först har vi alltså header, sen en tomrad och därefter bodyn. Observera att jag bara har visat ett utdrag av de variabler som är med i postdatat.