A HTTP működése
A HTTP-t remélhetőleg senkinek sem kell bemutatni.
Egy tipikus tranzakció így néz ki:
Kliens:
GET / HTTP/1.0 If-Modified-Since: Thu, 14 Sep 2006 10:30:58 GMT Host: chardonnay.math.bme.hu User-Agent: NutScrape/1.0 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Connection: keep-alive
Erre a szerver:
HTTP/1.1 200 OK Date: Thu, 14 Sep 2006 22:46:45 GMT Server: Apache Last-Modified: Thu, 14 Sep 2006 22:46:00 GMT Content-Length: 6730 Keep-Alive: timeout=15, max=100 Connection: Keep-Alive Content-Type: text/html
Azt érdemes megfigyelni, hogy egy IP:port kombináción több virtuális webszerverünk is lehet a Host: headernek köszönhetően.
HTTPS esetén ugyanez nem működik, mert az SSL handshake megelőzi a HTTP-kérést, így a szerver nem tudja, melyik tanúsítványt mutassa; ha viszont nem ahhoz a szervernévhez tartozót mutatja, amelyikről a kliens le akar tölteni valamit, az egyrészt sechole, másrészt sopánkodik is miatta a böngésző.
HTTPS esetén vagy minden hosztot külön IP:portra kell rakni, vagy minden virtuális hosztnak ugyanabba a domainbe kell tartoznia, és *.domain.com-ra érvényes tanúsítvány kell. (Minden kliens elfogadja?)
1 Hibakódok
Több más internetes protokollhoz hasonlóan a HTTP-nél is háromjegyű hibakódokkal találkozunk, amelyek első jegyéből lehet következtetni a probléma lényegére. Inkább csak felsorolásszinten:
- 1-essel kezdődő: elvileg van ilyen, pl. egy kapcsolat protokoll-upgrade-je esetén lehetne használni. Látott már ilyet élő ember?
 -  2-essel kezdődő: nincs gond, a művelet sikerült.
- 200 OK
 - 201 Created
 - 202 Accepted
 - 203 Non-Authoritative Information
 - 204 No Content
 - 205 Reset Content
 - 206 Partial Content
 
 -  3-assal kezdődő: átirányítás
- 300 Multiple Choices
 - 301 Moved Permanently
 - 302 Found
 -  303 See Other
- POST eredménye lehet
 
 - 304 Not Modified
 - 305 Use Proxy
 - 306 volt, de megszűnt
 - 307 Temporary Redirect
 
 -  4-essel kezdődő: kliensoldali hiba
- 400 Bad Request
 - 401 Unauthorized
 -  402 Payment Required
- "Reserved for future use"
 
 - 403 Forbidden
 - 404 Not Found
 - 405 Method Not Allowed
 - 406 Not Acceptable
 - 407 Proxy Authentication Required
 - 408 Request Timeout
 - 409 Conflict
 - 410 Gone
 - 411 Length Required
 - 412 Precondition Failed
 - 413 Request Entity Too Large
 - 414 Request-URI Too Long
 - 415 Unsupported Media Type
 - 416 Requested Range Not Satisfiable
 - 417 Expectation Failed
 
 -  5-össel kezdődő: szerveroldali hiba
- 500 Internal Server Error
 - 501 Not Implemented
 - 502 Bad Gateway
 - 503 Service Unavailable
 - 504 Gateway Timeout
 - 505 HTTP Version Not Supported
 
 
2 Potenciális zh-kérdések
-  Milyen problémával kell számolnunk, ha http virtualhostingot használunk, és SSL-re is szükségünk van? Milyen megoldásai vannak a problémának?
-  A fejléc Host mezejének köszönhetően a szerver tudja, hogy melyik virtualhostot kell mutatnia a kliensnek. SSL használata esetén ez azért problémás, mert az SSL handshake a HTTP tranzakció előzz zajlik le, így a webszerver nem tudja, hogy melyik virtualhost tanusítványát mutassa az adott kliensnek. A problémára megoldás, ha az összes SSL-t használó virtualhost 1 domain alá tarozik, es a *.domain.com számára készül tanusítvány, vagy minden SSL-t használó virtualhost legyen megkülönböztethető {ip:port} alapján.
- Remek. :) Esetleg még annyival lehetne kiegészíteni, hogy mi következik ebből a megkülönböztethetőségből: az, hogy a webszerver a TCP-kapcsolat felépülésekor már tudja, melyik virtualhost tanúsítványát kell mutatnia. --Korn András 2006. november 13., 17:48:44 (CET)
 
 
 -  A fejléc Host mezejének köszönhetően a szerver tudja, hogy melyik virtualhostot kell mutatnia a kliensnek. SSL használata esetén ez azért problémás, mert az SSL handshake a HTTP tranzakció előzz zajlik le, így a webszerver nem tudja, hogy melyik virtualhost tanusítványát mutassa az adott kliensnek. A problémára megoldás, ha az összes SSL-t használó virtualhost 1 domain alá tarozik, es a *.domain.com számára készül tanusítvány, vagy minden SSL-t használó virtualhost legyen megkülönböztethető {ip:port} alapján.
 -  Írja le egy tipikus HTTP-tranzakció során kicserélt alkalmazási rétegbeli üzeneteket! (Az üzenetek felépítése fontosabb, mint a konkrét tartalmuk.) Hogyan csoportosíthatók a szerver által küldött numerikus kódok?
-  GET üzenet
- if-modified since (le kell-e egyáltalán tölteni)
 - host
 - user-agent (a nem megfelelő html rendereléseket elkerülő hackek használhatják)
 - accept-* (milyen típusú, nyelvű, stb. dokumentumot fogad el a felhasználó)
 -  connection (kapcsolatra jellemző paraméterek, pl. keep-alive beállítása)
- Az összes fejléc opcionális; a Host: is (az is ugyanolyan fejléc, mint a többi); lemaradt a HTTP/verzió, és az, hogy üres sor zárja le a kérést. --Korn András 2006. november 13., 17:48:44 (CET)
 
 
 -  OK üzenet
- date
 - server
 - last modified
 - content-length
 - keep-alive (oldalszám és időkorlát)
 -  content-type
- Lemaradt, hogy háromjegyű hibakód van, ahol az első számjegy jelentése ez és ez. --Korn András 2006. november 13., 17:48:44 (CET)
 
 
 
 -  GET üzenet