[[oktatas:web|< Web]] ====== HTTP ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2015, 2021 * Licenc: GNU Free Documentation License 1.3 * Web: https://szit.hu ===== Bevezetés ===== A HTTP a **HyperText Transfer Protocol** szavakból alkotott betűszó. Hipermédiás adatok átvitelének protokollja. A **World Wide Web Consortium** és az **Internet Engineering Task Force** együtt fejlesztik. Három verzióját tartjuk számon, amelyből kettő lett szabvány, vagyis kettő rendelkezik valamilyen RFC szabvánnyal. {{:oktatas:web:http_tortenet.png|}} Az utolsó 1.1 verzióhoz két RFC is tartozik, mivel egyszer írtak hozzá egy kiegészítést. A 2.0 verziót a httpbis munkacsoport fejleszti a IETF-en belül. Alapul a SPDY és a HTTP Speed+Mobility áll rendelkezésre. Az új HTTP2.0 szabvány a SPDY-ra épül, egy részét egy az egyben átvette. 2015 az HTTP2.0-s szabvány már túl is lép a SPDY keretein. Ezért a Chorome fejlesztői, SPDY nevet dobják és továbbiakban a HTTP2.0 specifikációt valósítják meg a Chrome-ban. A HTTP **kliens-szerver** alapon működik, TCP felett, attól persze függetlenül. {{:oktatas:web:web_kliens_szerver.png|}} ===== Erőforrások ===== Amikor beírom a böngészőbe, hogy szit.hu a böngésző megpróbálja értelmezni. A böngészők általában arra következtetnek ebből, hogy http protokollon keresztül szeretnék elérni egy weboldalt, vagyis lefordítja http://szit.hu kérésre. Megjegyzem néhány böngészőgyártónál vannak olyan törekvések, hogy ha nem írjuk be a protokollt, akkor minősüljön keresésnek az alapértelmezett keresőszolgáltatással. ==== Erőforrás-mutató ==== Amikor leírom http://szit.hu, ez egy URL. Angolosan uniform resource locator, egységes erőforrás-mutató. Tehát tudhatjuk, hogy valamilyen webszerveren lévő erőforrásról van szó. Az erőforrások lehetnek szövegek, képek, videók és egyéb fájlok. Az Interneten minden egy URL segítségével érhető el. Ha azt írom http://freepascal.org szintén elérhető számomra egy webhely. Ha azt írom http://lazarus.freepascal.org egy másik webhelyhez jutok. A két weboldal lehet egymástól teljesen független. De ha azt írom http://szit.hu/swbin/, akkor ugyanazon webhely egy újabb oldalát érem el. Vegyük szemügyre a http://szit.hu/swbin/ URL-t. Három részre osztható: * http:// * szit.hu * /swbin/ A http után a :// csak szeparátor. Maga a http egy protokoll. Megmondjuk a böngészőnek, hogy http protokollt használjon. A böngészők általában más protokollt is ismernek. Ilyenek a https, vagy az ftp. A szit.hu a tartománynév. A /swbin/ egy útvonal a webhelyen belül. ==== Port ==== Az URL-ben megadható portszám is: http://szit.hu:80/swbin/ Megadható, hogy milyen porton várja a webszerver a http kéréseket. Az alapértelmezett port http esetén 80. Néhány böngésző ezt ki is törli. Mivel 80 az alapértelmezett port, ezért nem szoktuk beírni. A webmesterek néha más portot is használnak tesztelési, hibakövetési céllal. ==== Lekérő karaktersorozatok ==== Figyeljük meg a következő URL-t: http://szit.hu/doku.php?id=oktatas A kérdőjel után egy kérés van, angolosan query. A lekérő karaktersorozatok két név-érték párokból állnak, amelyet (&) jel karakterrel tagolunk: név1=érték1&név2=érték2&névn=értékn ==== Töredékek ==== Vegyük a következő URL: * http://szit.hu/doku.php?id=oktatas:grafika:svg:alapok#svg_weblapon A http://szit.hu/doku.php?id=oktatas:grafika:svg:alapok weblap egy hosszabb weboldal. A végén a #svg_weblaon az oldal egy részére (egy töredékére) mutat. Ha van egy több képernyőoldalas weblapunk a böngésző a lap tetejét fogja nekünk megnyitni, ha nem jelezzük a töredékkel, hogy melyik részt szeretnénk látni. Ez természetesen csak akkor lehetséges, ha webmester megjelölte az adott weboldal, adott részét. ==== URL általánosan ==== URI = "http:" "//" gép [ ":" port ] [ absz_útvonal [ "?" kérés ]] ---- ===== Média típusok ===== Az Interneten több ezer különböző adattípus érhető el. A sok különböző típus átvitelére a MIME típusokat használunk. A **MIME** a **Multipurpose Internet Mail Extendsions** szavakból alkotott rövidítés. Eredetileg elektronikus levelezéshez találták ki, a különböző levelező rendszerek átjárhatósága érdekében. A MIME olyan sikeres lett, hogy adaptálták a HTTP protokollra is. A webszerver minden HTTP objektumhoz egy MIME típust határoz meg. A böngésző a MIME típus alapján tudja eldönteni, hogyan kell megjeleníteni az érkező adatokat. Például le kell játszani videóként, vagy csak meg kell jeleníteni képként, vagy HTML oldalként kell értelmezni, vagy be kell hozzá tölteni egy kiterjesztést (plugint). kliens <-- Content-type: image/jpeg Content-length: 34500 --- szerver A MIME típus egy elsődleges objektumtípusból és egy másodlagos típusból áll. A kettőt egymástól (/) karakterrel választjuk el. ^ Néhány MIME típus ^^ ^ Típus ^ Jelentés ^ | text/plain | ASCII szöveg | | text/html | HTML oldal | | image/jpeg | JPEG kép | | image/gif | GIF kép | | image/png | PNG kép | | application/x-7z-compressed | 7-Zip fájl | | application/pdf | PDF állomány | | application/x-bittorrent | Torrent fájl (.torrent) | | application/vnd.openxmlformats-officedocument.wordprocessingml.template | MS Word | Az IANA táblázat [[http://www.iana.org/assignments/media-types/media-types.xhtml|itt]]. ===== Üzenetek ===== A HTTP az Internet küldönce, a HTTP üzenetek csomagokban utaznak. ==== Az üzenetek folyama ==== A HTTP alkalmazások a üzeneteket blokkokra osztják. Ezek a blokkok metainformációkkal kezdődnek, amelyeket opcionálisan adatok követik. Ezek az üzenet folynak kliens és szerver között. Az olyan szakszavak mint a inbound, outbound, upstream, downstream az üzenet folyásának irányát írják le. Az üzenetek inbound módon közlekednek a szerver fele, amikor a szerver válaszol outbound utaznak vissza. {{:oktatas:web:web_uzenet_inbound_outbound.png|}} Szokás még mondani, hogy a HTTP üzenetek lefolynak, azaz downstream, függetlenül attól, hogy kérés vagy válasz. Magát a küldőt nevezhetjük az alatta lévők upstream-jének. {{:oktatas:web:web_folyamok.png|}} ==== Az üzenet szintaxisa ==== Az üzenetek kétfélék lehetnek. Kérés (request) és válasz (response). A kérések mindig egy webszervernek szólnak. A webszerver mindig válaszol. Egy kérés szintaktikailag így néz ki: Egy válasz szintaktikailag így néz ki: {{:oktatas:web:web_http_uzenet_reszei.png|}} ==== A HTTP alaptulajdonságai ==== * állapotmentes - a kapcsolat állapota nincs tárolva - stateless * kapcsolatmentes - egy kérés után várjuk a választ de utána megszakad a kapcsolat - offline * médiafüggő - MIME típus használata ==== Kérés ==== GET /hello.htm HTTP/1.0 (A kliens küld egy kérést) HTTP/1.1 200 OK (A szerver küld egy státuszsort) ==== Metódusok ==== {{:oktatas:web:http_metodusok.png|}} A TRACE azért hasznos, mert a visszaküldött kérést ellenőrizni tudjuk, hogy a közbenső átjárók változtattak-e az elküldött adatokon. ===== Státuszkódok ===== A HTTP státuszkódjai öt kategóriába sorolhatók. A státuszkód segít megérteni a szervertől érkező válaszokat. ==== 100-199 Információs kódok ==== | 100 | továbbfolytatom | | 101 | protokollcsere | ==== 200-299 Sikert jelölő kódok ==== | 200 | ok | | 201 | kész | | 202 | elfogadva | | 203 | nem hiteles információ | | 204 | üres tartalom | | 205 | rejtett tartalom | | 206 | részleges tartalom | ==== 300-399 Átirányítást jelölő kódok ==== | 300 | több választási lehetőség | | 301 | átmenetileg átmozgatva | | 302 | megvan | | 303 | lásd máshol | | 304 | nem változott | | 305 | használj proxyt | | 307 | átmenetileg átirányítva | ==== 400-499 Klienshibákat jelölő kódok ==== | 400 | rossz kérés | | 401 | azonosítás, felhatalmazás hiánya | | 402 | előfizetőknek | | 403 | tiltott | | 404 | a szerver elérhető, de kért tartalom nem elérhető; \\ de lehet jövőben még elérhető lesz | | 405 | a metódus nem engedélyezett | | 406 | nem elfogadható | | 407 | proxy azonosítás szükséges | | 408 | időtúllépés | | 409 | konfliktus | | 410 | eltűnt, véglegesen megszűnt | | 411 | hossz szükséges | | 412 | előfeltétel nem teljesült | | 413 | kérés túl nagy | | 414 | az URL túl hosszú a kérésben | | 415 | a média típusa nem támogatott | | 416 | a keresett tartomány meghatározhatatlan | | 417 | nem teljesített elvárás | ==== 500-599 Szerverhibákat jelölő kódok ==== | 500 | hiba a szerveren belül | | 501 | nincs megvalósítva | | 502 | hibás átjáró | | 503 | a szolgáltatás elérhetetlen | | 504 | átjáró időtúllépés | | 505 | a HTTP verzió nem támogatott | ---- ===== HTTP kapcsolatok ===== A HTTP kapcsolatok jellemzői TCP feletti kapcsolat, szerver kliens alapokon. {{:oktatas:web:bongeszo_kapcsolata_szerverrel.png|}} A TCP egy biztonságos csővezetéket biztosít a HTTP protokoll számára. A bájtok halmaza a TCP kapcsolaton keresztül megfelelő sorrendben megérkezik a másik oldalra. A TCP folyamban az adatok több részre bontva utaznak IP csomagok formájában. A HTTP titkosított variációja a HTTPS. A HTTP után az "S" betű, egy titkosító réteget jelent a HTTP és a TCP között. {{:oktatas:web:http_es_https.png|}} Amikor a HTTP szeretne egy üzenet átvinni, az adatokból folyamot alkot, és megnyit egy TCP kapcsolatot. Az adatokat több részre osztjuk fel, majd átadjuk az IP verem számára. Az IP verem hozzáteszi a saját fejléc információit az egyes csomagokhoz. Egy IP csomag ezek után a következőket tartalmazza: * IP fejléc (rendszerint 20 bájt) * TCP fejléc (rendszerint 20 bájt) * Adatok rész (0 vagy több bájt) Az IP fejléc tartalmazza a forrás és cél IP címet. A TCP fejléc tartalmazza a portszámokat, néhány TCP jelzőt és az integritást ellenőrző számokat. {{:oktatas:web:tcp_ip_csomag.png|}} ^ TCP kapcsolatok ^^^^^ ^ kapcsolat ^ forrás IP ^ forrásport ^ célcím ^ célport ^ | A | 210.190.5.45 | 1025 | 195.200.150.1 | 80 | | B | 212.90.4.45 | 1027 | 195.200.15.1 | 80 | | C | 195.160.80.25 | 3045 | 195.200.150.1 | 80 | | D | 195.160.80.25 | 3046 | 95.111.112.5 | 80 | {{:oktatas:web:tcp_kapcsolatok.png|}} ===== Felhasznált források ===== ==== Irodalom ==== * David Gourley, Brian Totty, Marjorie Sayer, Sailu Reddy, Anshu Aggarwal * HTTP The Definitive Guide (O'REILLY) ==== Linkek ==== * http://www.w3.org/Protocols/rfc2616/rfc2616.html (2015) * https://tools.ietf.org/html/draft-ietf-httpbis-http2-16 (2023) * https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview (2023)