031.3 Lecke 1
Tanúsítvány: |
Web Development Essentials |
---|---|
Verzió: |
1.0 |
Témakör: |
031 Szoftverfejlesztés és webtechnológiák |
Fejezet: |
031.3 A HTTP alapjai |
Lecke: |
1/1 |
Bevezetés
A HyperText Transfer Protocol (HTTP) határozza meg, hogy egy kliens hogyan kér egy adott erőforrást a szervertől. Működési elve igen egyszerű: a kliens létrehoz egy kérést, amely azonosítja a szükséges erőforrást, és ezt az üzenetet a hálózaton keresztül továbbítja a kiszolgálónak. A HTTP-szerver pedig kiértékeli, hogy honnan kell kinyerni a kért erőforrást, és válaszüzenetet küld vissza a kliensnek, ami tartalmazza a kért erőforrás adatait, valamint magát az erőforrást.
Pontosabban, a HTTP azon szabályok összessége, amelyek meghatározzák, hogy az ügyfélalkalmazás hogyan formázza a kiszolgálónak küldött request (kérés) üzeneteket. A kiszolgáló ezután a HTTP-szabályokat követve értelmezi a kérést és formázza a reply (válasz) üzeneteket. A HTTP-üzenetek a kért tartalom kérésén vagy továbbításán kívül további információkat tartalmaznak az érintett ügyfélről és kiszolgálóról, magáról a tartalomról, sőt annak elérhetetlenségéről is. Ha egy erőforrás nem küldhető el, a válaszban egy kód megmagyarázza az elérhetetlenség okát, és ha lehetséges, jelzi, hogy az erőforrás hová került.
Az üzenetnek az a része, amely meghatározza az erőforrás adatait és egyéb kontextusinformációkat, az üzenet fejléce (header). A fejlecet követő részt, amely a megfelelő erőforrás tartalmát tartalmazza, az üzenet payload-jának nevezzük. Mind a kérési, mind a válaszüzeneteknek lehet payloadja, de a legtöbb esetben csak a válaszüzenetnek van.
A kliensoldali kérés
A kliens és a szerver közötti HTTP-adatcsere első szakaszát a kliens kezdeményezi, amikor kérést küld a szervernek. Vegyünk például egy gyakori böngészőfeladatot: egy HTML-oldal betöltése például a https://learning.lpi.org/en/
oldalnak otthont adó szerverről. A cím, vagyis az URL, több fontos információt is tartalmaz. Ebben a konkrét példában három információ is megjelenik:
-
A protokoll: HyperText Transfer Protocol Secure (
https
), a HTTP titkosított változata. -
A webtárhely hálózati neve (
learning.lpi.org
) -
A kért erőforrás helye a szerveren (az
/en/
mappa—ebben az esetben a honlap angol nyelvű változata).
Note
|
Az egységes erőforrás-helymeghatározó (Uniform Resource Locator - URL) egy olyan cím, amely egy internetes erőforrásra mutat. Ez az erőforrás általában egy távoli kiszolgálóról másolható fájl, de az URL-ek dinamikusan generált tartalmakat és adatfolyamokat is jelölhetnek. |
Hogyan kezeli a kliens az URL-t?
A szerverrel való kapcsolatfelvétel előtt a kliensnek át kell alakítania a learning.lpi.org
címet a megfelelő IP-címre. A kliens egy másik internetes szolgáltatást, a Domain Name System (DNS)-t használja, hogy egy vagy több előre meghatározott DNS-kiszolgálótól lekérje egy állomásnév IP-címét (a DNS-kiszolgálókat általában az internetszolgáltató (ISP) határozza meg automatikusan).
A szerver IP-címével a kliens megpróbál csatlakozni a HTTP vagy HTTPS porthoz. A hálózati portok a Transmission Control Protocol (TCP) által meghatározott azonosítószámok, amelyekkel a kliens/szerver kapcsolaton belül a különböző kommunikációs csatornák összekapcsolhatók és azonosíthatók. Alapértelmezés szerint a HTTP-szerverek a 80-as (HTTP) és a 443-as (HTTPS) TCP-porton fogadják a kéréseket.
Note
|
A webes alkalmazások más protokollokat is használnak a kliens/szerver kommunikáció megvalósítására. Az audió- és videóhívásokhoz például célszerűbb a WebSocket-ek használata, ami egy alacsonyabb szintű protokoll, amely a HTTP-nél hatékonyabb az adatfolyamok mindkét irányú átvitelére. |
A kliens által a szervernek küldött kérési üzenet formátuma megegyezik a HTTP és a HTTPS esetében. A HTTPS-t már szélesebb körben használják, mint a HTTP-t, mivel a kliens és a szerver közötti összes adatcsere titkosítva van, ami nyilvános hálózatok esetén elengedhetetlen az adatvédelem és a biztonság garantálásához. A titkosított kapcsolat a kliens és a szerver között még a HTTP-üzenetek cseréje előtt létrejön a Transport Layer Security (TLS) kriptográfiai protokoll segítségével. Ezáltal az összes HTTPS-kommunikáció a TLS által egységbezárva történik. A titkosítás feloldása után a HTTPS-en keresztül továbbított kérés vagy válasz nem különbözik a kizárólag HTTP-n keresztül továbbított kéréstől vagy választól.
Az URL harmadik elemét, az /en/
-t a szerver a kért erőforrás helyeként vagy útvonalaként értelmezi. Ha az URL-ben nem adjuk meg az elérési utat, akkor az alapértelmezett /
helyet fogja használni. A HTTP-kiszolgálók legegyszerűbb megvalósítása az URL-ekben szereplő elérési utakat a kiszolgálót futtató fájlrendszeren lévő fájlokkal társítja, de ez csak egy a kifinomultabb HTTP-kiszolgálókon rendelkezésre álló számos lehetőség közül.
A kérés üzenete
A HTTP az ügyfél és a kiszolgáló között már létrehozott, általában TCP-ben megvalósított és TLS-sel titkosított kapcsolaton keresztül működik. Valójában amint a szerver által támasztott követelményeknek megfelelő kapcsolat készen áll, egy egyszerű szövegként kézzel begépelt HTTP-kérelem is generálhatja a szerver válaszát. A gyakorlatban azonban a programozóknak ritkán kell rutinokat implementálniuk a HTTP-üzenetek összeállításához, mivel a legtöbb programozási nyelv olyan mechanizmusokat biztosít, amelyek automatizálhatják a HTTP-üzenet elkészítését. A példában szereplő URL, a https://learning.lpi.org/en/
esetén a lehető legegyszerűbb kérési üzenet a következő tartalmú lenne:
GET /en/ HTTP/1.1 Host: learning.lpi.org User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:87.0) Gecko/20100101 Firefox/87.0 Accept: text/html
Az első sor első szava a HTTP metódust azonosítja. Meghatározza, hogy a kliens milyen műveletet szeretne végrehajtani a szerveren. A GET metódus informálja a szervert, hogy a kliens az /en/
után következő erőforrást kéri. A kliens és a szerver is támogathatja a HTTP-protokoll több verzióját, ezért az adatcserében elfogható verziót is megadjuk az első sorban: HTTP/1.1
.
Note
|
A HTTP protokoll legújabb verziója a HTTP/2. Egyéb különbségek mellett a HTTP/2-ben írt üzeneteket bináris struktúrában kódolják, míg a HTTP/1.1 esetén az üzeneteket egyszerű szövegként küldik el. Ez a változás optimalizálja az adatátviteli sebességet, de az üzenetek tartalma alapvetően nem változik. |
A fejléc az első sor után több sort is tartalmazhat, hogy kontextusba helyezze és segítsen azonosítani a szervernek küldött kérést. A Host
fejlécmező például feleslegesnek tűnhet, mivel a szerver hosztját a kliens nyilvánvalóan azonosította a kapcsolat létrehozásához és ésszerű azt feltételezni, hogy a szerver ismeri a saját identitását. Ennek ellenére fontos, hogy a kérés fejlécében tájékoztassuk a hosztot a várható hosztnévről, mivel általános gyakorlat, hogy ugyanazt a HTTP-kiszolgálót egynél több weboldal tárolására használják. (Ebben az esetben az egyes konkrét hosztokat virtuális hosztnak nevezzük.) Ezért a Host
mezőt a HTTP-kiszolgáló arra használja, hogy azonosítsa, melyikre vonatkozik a kérés.
A User-Agent
fejlécmező a kérést végző kliensprogram adatait tartalmazza. Ezt a mezőt a szerver arra használja, hogy a választ egy adott kliens igényeihez igazítsa, de gyakrabban használják arra, hogy statisztikát készítsenek a szervert használó kliensekről.
Az Accept
mező közvetlenebb értékű, mert tájékoztatja a szervert a kért erőforrás formátumáról. Ha a kliensnek nem fontos az erőforrás formátuma, az Accept
mezőben megadható a */*
formátum.
Sok más fejlécmező is használható egy HTTP-üzenetben, de a fenti példában bemutatottak elegendőek ahhoz, hogy erőforrást kérjünk a szervertől.
A kérés fejlécében szereplő mezőkön kívül a kliens más kiegészítő adatokat is megadhat a szervernek küldött HTTP-kérelemben. Ha ezek az adatok csak egyszerű szöveges paraméterekből állnak, a name=value
formátumban, akkor a GET-metódus útvonalához adhatók hozzá. A paraméterek az elérési útvonalba egy kérdőjel után ágyazódnak be és az és-jel (&
) karakterekkel kerülnek elválasztásra:
GET /cgi-bin/receive.cgi?name=LPI&email=info@lpi.org HTTP/1.1
A fenti példában a /cgi-bin/receive.cgi
a kiszolgálón lévő szkript elérési útvonala, amely feldolgozza és esetleg fel is használja a kérés útvonalából kapott name
és email
paramétereket. A mezőknek megfelelő name=LPI&email=info@lpi.org
formátumú sztring a query string, amelyet a kérést fogadó HTTP-kiszolgáló ad a receive.cgi
szkriptnek.
Ha az adatok nem csak rövid szöveges mezőkből állnak, akkor célszerűbb az üzenet hasznos részében (payload) elküldeni. Ebben az esetben a HTTP POST módszert kell használni, hogy a szerver megkapja és feldolgozza az üzenet hasznos részét a kérés fejlécében megadott specifikációnak megfelelően. A POST metódus használata esetén a kérés fejlécének meg kell adnia a következőként elküldendő payload méretét és a törzs (body) formázási módját:
POST /cgi-bin/receive.cgi HTTP/1.1 Host: learning.lpi.org Content-Length: 1503 Content-Type: multipart/form-data; boundary=------------------------405f7edfd646a37d
A Content-Length
mező a payload bájtban kifejezett méretét, a Content-Type
mező pedig a formátumát jelzi. A multipart/form-data
formátum a POST módszert használó hagyományos HTML űrlapoknál leggyakrabban használt formátum. Ebben a formátumban a kérés payloadjába minden egyes beillesztett mezőt a boundary
kulcsszó által jelzett kóddal választanak el. A POST metódust csak akkor szabad használni, ha szükséges, mivel valamivel nagyobb adatmennyiséget használ, mint egy GET módszerrel végrehajtott egyenértékű kérés. Mivel a GET közvetlenül a kérés fejlécében küldi el a paramétereket, a teljes adatcsere kisebb késleltetéssel jár, mivel az üzenettörzs továbbításához nem lesz szükség egy további kapcsolati szakaszra.
A válasz fejléce
Miután a HTTP-szerver megkapta a kérés fejlécét, a szerver válaszüzenetet küld vissza a kliensnek. Egy HTML-kérés jellemzően ilyen válaszfejléccel rendelkezik:
HTTP/1.1 200 OK Accept-Ranges: bytes Content-Length: 18170 Content-Type: text/html Date: Mon, 05 Apr 2021 13:44:25 GMT Etag: "606adcd4-46fa" Last-Modified: Mon, 05 Apr 2021 09:48:04 GMT Server: nginx/1.17.10
Az első sor a válaszüzenetben használt HTTP-protokoll verzióját adja meg, amelynek meg kell egyeznie a kérés fejlécében használt verzióval. Ezután, szintén az első sorban, a válasz állapotkódja jelenik meg, amely azt jelzi, hogy a kiszolgáló hogyan értelmezte és generálta a kérésre adott választ.
A státuszkód egy háromjegyű szám, ahol a bal szélső számjegy határozza meg a válasz osztályát. Az állapotkódoknak öt osztálya van, 1-5-ig számozva, amelyek mindegyike a kiszolgáló által végrehajtott művelet típusát jelzi:
- 1xx (Tájékoztató)
-
A kérés beérkezett, a folyamat folytatódik.
- 2xx (Sikeres)
-
A kérés fogadva, megértve és elfogadva lett.
- 3xx (Átirányítás)
-
További lépéseket kell tenni a kérés befejezéséhez.
- 4xx (Kliensoldali hiba)
-
A kérés rossz szintaxist tartalmaz vagy nem teljesíthető.
- 5xx (Szerveroldali hiba)
-
A szerver nem tudott teljesíteni egy látszólag érvényes kérést.
A második és a harmadik számjegy további részletek feltüntetésére szolgál. A 200-as kód például azt jelzi, hogy a kérés minden probléma nélkül megválaszolható. A példában látható módon a válaszkódot (OK
) követő rövid szöveges leírás is megadható. Néhány specifikus kód különösen érdekes annak érdekében, hogy a HTTP-kliens kedvezőtlen helyzetekben is hozzáférhessen az erőforráshoz, vagy hogy sikertelen kérés esetén segítsen azonosítani a hiba okát:
301 Moved Permanently
-
A célerőforráshoz új állandó URL-t rendeltek, amelyet a válaszban található
Location
fejléc mező ad meg. 302 Found
-
A célerőforrás ideiglenesen egy másik URL alatt található.
401 Unauthorized
-
A kérés nem került elfogadásra, mivel nem rendelkezik a célerőforrás érvényes hitelesítési adataival.
403 Forbidden
-
A
Forbidden
válasz azt jelzi, hogy bár a kérés érvényes, a kiszolgáló úgy van beállítva, hogy ne engedje azt elérni. 404 Not Found
-
A kiindulási szerver nem talált aktuális reprezentációt a célerőforráshoz, vagy nem hajlandó közölni, hogy létezik ilyen.
500 Internal Server Error
-
A szerver olyan váratlan körülménybe ütközött, amely megakadályozta a kérés teljesítésében.
502 Bad Gateway
-
A szerver, miközben átjáróként (gateway) vagy proxyként működött, érvénytelen választ kapott egy olyan bejövő szervertől, amelyhez a kérés teljesítésének kísérlete során hozzáfért.
Bár ezek azt jelentik, hogy a kérést nem lehetett teljesíteni, a "4xx" és "5xx" állapotkódok legalább azt jelzik, hogy a HTTP-kiszolgáló fut és képes kéréseket fogadni. A 4xx
kódok a kliens részéről igényelnek intézkedést, mivel az URL vagy a hitelesítő adatok helytelenek. Ezzel szemben az 5xx
kódok azt jelzik, hogy a szerveroldalon valami nem stimmel. Ezért a webes alkalmazások kontextusában az állapotkódok e két osztálya azt jelzi, hogy a hiba forrása magában az alkalmazásban van, akár kliens, akár szerver, nem pedig a mögöttes infrastruktúrában.
Statikus és dinamikus tartalom
A HTTP-kiszolgálók két alapvető mechanizmust használnak a kliens által kért tartalom teljesítésére. Az első mechanizmus statikus tartalmat biztosít: azaz a kérési üzenetben megadott útvonal megfelel a kiszolgáló helyi fájlrendszerében lévő fájlnak. A második mechanizmus dinamikus tartalmat biztosít: azaz a HTTP-kiszolgáló továbbítja a kérést egy másik programnak - valószínűleg egy szkriptnek -, amely különböző forrásokból, például adatbázisokból és más fájlokból állítja össze a választ.
Bár különböző HTTP-kiszolgálók léteznek, mindegyik ugyanazt a HTTP kommunikációs protokollt használja, és többé-kevésbé ugyanazokat a konvenciókat alkalmazza. Egy olyan alkalmazás, amelynél nem merül fel különleges igény, bármilyen hagyományos szerverrel, például Apache vagy NGINX szerverrel megvalósítható. Mindkettő képes dinamikus tartalom generálására és statikus tartalom szolgáltatására, de enyhe különbségek vannak a konfigurációjukban.
A kiszolgálandó statikus fájlok helyét például az Apache és az NGINX különböző módon határozza meg. A konvenció az, hogy ezeket a fájlokat egy erre a célra létrehozott könyvtárban tartják, amelynek neve a hoszthoz kapcsolódik, például /var/www/learning.lpi.org/
. Az Apache-ban ezt az elérési utat a DocumentRoot /var/www/learning.lpi.org
konfigurációs utasítás határozza meg a virtuális hosztot definiáló szakaszban. Az NGINX-ben a használt irányelv a root /var/www/learning.lpi.org
a konfigurációs fájl server
szakaszában.
Bármelyik szervert is választjuk, a /var/www/learning.lpi.org/
fájlokat a HTTP-n keresztül szinte ugyanúgy fogják kiszolgálni. A válaszfejléc néhány mezője és azok tartalma eltérő lehet a két szerver esetén, de az olyan mezőknek, mint a Content-Type
, jelen kell lenniük a válaszfejlécben és minden szerveren konzisztensnek kell lenniük.
Cachelés (gyorsítótárazás)
A HTTP-t úgy tervezték, hogy bármilyen típusú internetkapcsolaton működjön, legyen az gyors vagy lassú. Ezenkívül a legtöbb HTTP-forgalomnak számos hálózati csomóponton kell áthaladnia az internet elosztott felépítése miatt. Ennek eredményeképpen fontos valamilyen tartalmi gyorsítótárazási stratégia alkalmazása, hogy elkerülhető legyen a korábban letöltött tartalom felesleges átvitele. A HTTP-adattovábbítás két alapvető gyorsítótár-típussal működhet: megosztott és privát.
A megosztott gyorsítótárat nem csak egy kliens használja. Egy nagy tartalomszolgáltató például használhat földrajzilag elosztott szervereken lévő gyorsítótárakat, így a kliensek a hozzájuk legközelebbi szerverről kapják meg az adatokat. Ha egy kliens kérést indított, és a válaszát egy megosztott gyorsítótárban tárolták, akkor az ugyanazon a területen ugyanezt a kérést intéző többi kliens is megkapja a gyorsítótárban tárolt választ. A privát gyorsítótárat maga a kliens hozza létre a saját kizárólagos használatára. Ez az a fajta gyorsítótárazási mód, amelyet a webböngésző a képek, CSS-fájlok, JavaScript vagy a HTML-dokumentum esetében végez, így ezeket nem kell újra letölteni, ha a közeljövőben szükség van rájuk.
Note
|
Nem minden HTTP-kérést kell gyorsítótárazni. A POST-metódust használó kérés például kizárólag az adott kéréshez kapcsolódó választ jelent, így a válasz tartalmát nem szabad újra felhasználni. Alapértelmezés szerint csak a GET-metódust használó kérésekre adott válaszok kerülnek gyorsítótárba. Továbbá csak a 200 (OK), 206 (részleges tartalom), 301 (véglegesen áthelyezve) és 404 (nem található) státuszkóddal rendelkező válaszok alkalmasak a gyorsítótárazásra. |
Mind a megosztott, mind a privát gyorsítótár-stratégia a HTTP fejlécek segítségével szabályozza a letöltött tartalom gyorsítótárazásának módját. A privát gyorsítótár esetében a kliens megnézi a válaszfejlécet, és ellenőrzi, hogy a helyi gyorsítótárban lévő tartalom még mindig megfelel-e az aktuális távoli tartalomnak. Ha igen, a kliens lemond a válasz payloadjának átvételéről, és a helyi verziót használja.
A gyorsítótárazott erőforrás érvényessége többféleképpen is értékelhető. A szerver megadhat egy lejárati dátumot a válaszfejlécben az első kérésnél, így a kliens a lejárati idő végén eldobja a gyorsítótárazott erőforrást, és a frissített változat megszerzéséhez újra lekérdezi azt. A szerver azonban nem mindig tudja meghatározni az erőforrás lejárati dátumát, ezért az erőforrás verziójának azonosítására általában az ETag
válaszfejlécmezőt használják, például Etag: "606adcd4-46fa"
.
Annak ellenőrzéséhez, hogy egy gyorsítótárazott erőforrás frissítésre szorul-e, a kliens csak a válaszfejlécet kéri le a szervertől. Ha az ETag
mező megegyezik a helyileg tárolt változatéval, a kliens újra felhasználja a gyorsítótárazott tartalmat. Ellenkező esetben az erőforrás frissített tartalma letöltésre kerül a szerverről.
HTTP munkamenetek
Egy hagyományos weboldalon vagy webes alkalmazásban a munkamenetvezérlést kezelő funkciók a HTTP-fejléceken alapulnak. A szerver nem feltételezheti például, hogy az azonos IP-címről érkező összes kérés ugyanattól a klienstől származik. A leghagyományosabb módszer, amely lehetővé teszi a szerver számára, hogy a különböző kéréseket egyetlen klienshez rendelje, a cookiek (sütik) használata. A süti egy azonosító címke, amelyet a szerver a HTTP fejlécben ad meg a kliensnek.
A sütik lehetővé teszik a szerver számára, hogy megőrizze az adott kliensre vonatkozó információkat, még akkor is, ha a klienst használó személy nem azonosítja magát kifejezetten. A sütik segítségével olyan munkamenetek valósíthatók meg, amelyekben a bejelentkezések, bevásárlókosarak, preferenciák stb., megmaradnak a különböző kérések között, amelyeket ugyanahhoz a szerverhez intéznek, amely ezeket a kéréseket biztosította. A sütiket a felhasználó böngészésének nyomon követésére is használják, ezért fontos, hogy a küldésük előtt hozzájárulást kérjenek.
A kiszolgáló a "Set-Cookie" mező segítségével állítja be a sütit a válaszfejlécben. A mező értéke egy kulcs=érték
pár, amelyet úgy választanak ki, hogy egy adott klienshez kapcsolódó attribútumot képviseljen. A szerver például létrehozhat egy azonosítószámot egy olyan kliens számára, aki először kér egy erőforrást, és ezt a válaszfejlécben átadhatja a kliensnek:
HTTP/1.1 200 OK Accept-Ranges: bytes Set-Cookie: client_id=62b5b719-fcbf
Ha a kliens engedélyezi a sütik használatát, akkor az ugyanahhoz a kiszolgálóhoz érkező új kérelmek fejlécében szerepel a cookie-mező:
GET /en/ HTTP/1.1 Host: learning.lpi.org Cookie: client_id=62b5b719-fcbf
Ennek az azonosítószámnak a segítségével a szerver lekérdezheti a kliens speciális definícióit, és testreszabott választ generálhat. Lehetőség van egynél több Set-Cookie
mező használatára is, hogy különböző sütiket adjon át ugyanannak a kliensnek. Ily módon egynél több definíció is megőrizhető a kliensoldalon.
A sütik adatvédelmi problémákat és potenciális biztonsági réseket is felvetnek, mivel fennáll annak a lehetősége, hogy átkerülhetnek egy másik klienshez, akit a szerver az eredeti kliensként azonosít. A munkamenetek megőrzésére használt sütik hozzáférést biztosíthatnak az eredeti kliens bizalmas információihoz. Ezért nagyon fontos, hogy a kliensek helyi védelmi mechanizmusokat alkalmazzanak, hogy megakadályozzák a sütik jogosulatlan eltávolítását és újrafelhasználását.
Gyakorló feladatok
-
Melyik HTTP-metódust hasznája a következő üzenet?
POST /cgi-bin/receive.cgi HTTP/1.1 Host: learning.lpi.org User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:87.0) Gecko/20100101 Firefox/87.0 Accept: */* Content-Length: 27 Content-Type: application/x-www-form-urlencoded
-
Ha egy HTTP-kiszolgáló több weboldalt is tárol, hogyan tudja azonosítani, hogy melyikhez szól a kérés?
-
Milyen paramétert adunk meg az alábbi URL lekérdezésben
https://www.google.com/search?q=LPI
? -
Miért nem alkalmas az alábbi HTTP-kérés gyorsítótárazásra?
POST /cgi-bin/receive.cgi HTTP/1.1 Host: learning.lpi.org User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:87.0) Gecko/20100101 Firefox/87.0 Accept: */* Content-Length: 27 Content-Type: application/x-www-form-urlencoded
Gondolkodtató feladatok
-
Hogyan lehet a böngésző segítségével nyomonkövetni egy HTML-oldal kéréseit és válaszait?
-
A statikus tartalmat nyújtó HTTP-kiszolgálók általában a kért elérési utat a kiszolgáló fájlrendszerében lévő fájlhoz rendelik. Mi történik, ha a kérelemben szereplő elérési út egy könyvtárra mutat?
-
A HTTPS-en keresztül küldött fájlok tartalmát titkosítással védik, így a kliens és a szerver közötti számítógépek nem tudják elolvasni azokat. Ennek ellenére ezek a köztes számítógépek azonosíthatják-e, hogy a kliens milyen erőforrást kért a szervertől?
Összefoglalás
Ebben a leckében a HTTP alapjaival foglalkoztunk, ez a fő protokoll, amelyet a kliensalkalmazások használnak erőforrások kérésére a webszerverektől. Ez a lecke a következő fogalmakat veszi át:
-
Kérési üzenetek, fejlécmezők és metódusok.
-
Válasz státuszkódok.
-
Hogyan generálnak a HTTP-kiszolgálók válaszokat.
-
A gyorsítótárazáshoz és a munkamenet-kezeléshez hasznos HTTP-funkciók.
Válaszok a gyakorló feladatokra
-
Melyik HTTP-metódust hasznája a következő üzenet?
POST /cgi-bin/receive.cgi HTTP/1.1 Host: learning.lpi.org User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:87.0) Gecko/20100101 Firefox/87.0 Accept: */* Content-Length: 27 Content-Type: application/x-www-form-urlencoded
A POST metódust.
-
Ha egy HTTP-kiszolgáló több weboldalt is tárol, hogyan tudja azonosítani, hogy melyikhez szól a kérés?
A kérés fejlécében a "Host" mező azonosítja a weboldalt.
-
Milyen paramétert adunk meg az alábbi URL lekérdezésben
https://www.google.com/search?q=LPI
?A
q
nevű paramétert, azLPI
értékkel. -
Miért nem alkalmas az alábbi HTTP-kérés gyorsítótárazásra?
POST /cgi-bin/receive.cgi HTTP/1.1 Host: learning.lpi.org User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:87.0) Gecko/20100101 Firefox/87.0 Accept: */* Content-Length: 27 Content-Type: application/x-www-form-urlencoded
Mivel a POST-metódussal végrehajtott kérések írási műveletet jelentenek a szerveren, nem szabad gyorsítótárba helyezni őket.
Válaszok a gondolkodtató feladatokra
-
Hogyan lehet a böngésző segítségével nyomonkövetni egy HTML-oldal kéréseit és válaszait?
Minden népszerű böngésző kínál fejlesztőeszközöket, amelyek többek között képesek megmutatni az aktuális oldal által végrehajtott összes hálózati tranzakciót.
-
A statikus tartalmat nyújtó HTTP-kiszolgálók általában a kért elérési utat a kiszolgáló fájlrendszerében lévő fájlhoz rendelik. Mi történik, ha a kérelemben szereplő elérési út egy könyvtárra mutat?
Ez attól függ, hogy a szerver hogyan van konfigurálva. Alapértelmezés szerint a legtöbb HTTP-kiszolgáló egy "index.html" (vagy más előre meghatározott) nevű fájlt keres ugyanabban a könyvtárban, és azt küldi válaszként. Ha a fájl nincs ott, a szerver
404 Not Found
választ ad. -
A HTTPS-en keresztül küldött fájlok tartalmát titkosítással védik, így a kliens és a szerver közötti számítógépek nem tudják elolvasni azokat. Ennek ellenére ezek a köztes számítógépek azonosíthatják-e, hogy a kliens milyen erőforrást kért a szervertől?
Nem, mert a kérés és a válasz HTTP fejléceit is titkosítja a TLS.