HTTP
Huh!
What is it good for?
HTTP
-Hypertext transfer protocol
- Började utvecklas 1989 av Tim Berners-Lee
- Första officiella definitionen släpptes 1997
- Ny version släpptes 1999
- HTTP/2 släpptes 2015
Men vad är det då?
Ett protokoll för kommunikation mellan en server och en klient. Klienten skickar ett HTTP-meddelande till servern som i sin tur svarar med olika resurser som tex html.
Protokollet säger ingenting om hur datan skickas utan är en definition av hur informationen mellan server och klient skall vara strukturerad.
Definitionen innehåller ett antal request-metoder
Säkra metoder
HEAD, GET, OPTIONS, TRACE
Osäkra metoder
POST, PUT, DELETE, PATCH
Och ett antal statuskoder
Statuskoderna delas in i 5 sektioner
-
Information - 1XX
-
Framgång! - 2XX
-
Omdirigering - 3XX
-
Klientfel - 4XX
-
Servefel - 5XX
De viktigaste statuskoderna
- 200 OK
- 300 Multiple Choices
- 301 Moved Permanently
- 302 Moved Temporarily
- 304 Not Modified
- 307 Temporary Redirect
- 400 Bad Request
- 401 Unauthorized
- 403 Forbidden
- 404 Not Found
- 410 Gone
- 500 Internal Server Error
- 501 Not Implemented
- 503 Service Unavailable
- 550 Permission denied
HTTP är stateless

Exempel
Klient
GET /index.html HTTP/1.1
Host: www.example.com
Server
HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Content-Type: text/html; charset=UTF-8
Content-Encoding: UTF-8
Content-Length: 138
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
ETag: "3f80f-1b6-3e1cb03b"
Accept-Ranges: bytes
Connection: close
Statusrad
Headers
Exempel
- A Status-line
- Zero or more header (General|Response|Entity) fields followed by CRLF
- An empty line (i.e., a line with nothing preceding the CRLF) indicating the end of the header fields
- Optionally a message-body
Hur påverkar man responsen själv?
Två generella sätt
- Via webbservern (Apache, Nginx etc)
- Via kod i backend (PHP, .Net, Nodejs)
Webbservern (Apache)
Förkrav: modulen mod_headers måste vara aktiverad
Manual: https://httpd.apache.org/docs/2.4/mod/mod_headers.html
<IfModule mod_headers.c>
Header unset Server
Header always unset X-Powered-By
Header unset X-Powered-By
Header unset X-CF-Powered-By
Header unset X-Mod-Pagespeed
Header unset X-Pingback
Header set MyHeader "Hello Joe. It took %D microseconds for Apache to serve this request."
</IfModule>I kod (PHP)
<?php
header("HTTP/1.0 404 Not Found");
header("Location: http://www.example.com/"); /* Redirect browser */
/* Make sure that code below does not get executed when we redirect. */
exit;
?>Om ni behöver påverka headers via PHP så görs detta via den inbyggda funktionen header
Funktionen kan även användas för omdirigeringar och för att sätta http-statuskoder.
I kod (PHP)
<?php
/* This will give an error. Note the output
* above, which is before the header() call */
header('Location: http://www.example.com/');
exit;
?> Funktionen måste anropas FÖRE någon output skrivs till webbläsaren.
Nedanstående exempel fungerar inte. OBS att inställningen output_buffers kan "gömma" det här felet.
Övningar
https://github.com/raket/wieg16-http
- Undersök fem (5) valfria sidor och läs deras http-responser i nätverkspanelen i Chrome. Skriv ner vilken information du kan utröna genom att bara läsa http-headers
- Gör en sida med ett formulär på. Formuläret kan POST:a till samma sida som det ligger på. Aktivera "preserve log" i Chrome och studera request och response.
- Gör ändringar i formuläret (byt namn på formulärfält, lägg till/ta bort formulärfält) och notera hur request/respons förändras.
Övningar
- PHP:s header-funktion är ganska klumpig. Skriv en egen funktion med namnet status_header vars syfte är att skicka statuskoder till webbläsaren. Signatur: status_header($code = 200)
När funktionen anropas så skall rätt statuskod skickas till webbläsaren tillsammans med lämplig text.
Exempel: "HTTP/1.0 404 Not Found" - Skriv en funktion med namnet headers som kan användas för att sätta flera headers samtidigt.
Signatur: headers(array $headers = [])
Arrayen som skickas in skall ha strukturen [header => värde] där header är den header som skall sättas och värdet är det värde som headern skall ha.
Övningar
- Skriv en funktion som heter redirect som använder PHP:s inbyggda header-funktion för att göra omdirigeringar.
Signatur: redirect($url, $code = 302)
Obligatorisk kunskap
- Vad http står för
- Innebörden av att http är stateless
- Säkra vs osäkra http-metoder
- De viktigaste statuskoderna (listan)
HTTP
By marcusdalgren
HTTP
- 316