„Informatika 2 - HTML, CSS - böngészők programozása labor” változatai közötti eltérés
a |
a |
||
9. sor: | 9. sor: | ||
== Egy HTTP kommunikációban milyen felek vesznek részt és mi a feladatuk? == | == Egy HTTP kommunikációban milyen felek vesznek részt és mi a feladatuk? == | ||
− | + | #Kliens (böngésző): | |
+ | #*A beírt cím alapján megállapítja a szerve IP-címét (DNS fordítás is!) | ||
+ | #*TCP/IP-kapcsolatot hoz létre a szerver felé | ||
+ | #*HTTP-kéréseket küld a szerver felé | ||
+ | #Szerver: | ||
+ | #*HTTP-válaszokat küld a kliens kéréseire (nincs hiba: lekért oldalt tartalmazza) | ||
+ | #*Bizonyos kérésekre egy adatbázisban módosíthat | ||
+ | #*A válasz végén lebontja a kapcsolatot | ||
== A HTTP kommunikáció során hogyan állapodnak meg a felek a használandó HTTP protokoll verzióban? == | == A HTTP kommunikáció során hogyan állapodnak meg a felek a használandó HTTP protokoll verzióban? == | ||
− | A legnagyobb olyan verziót használják, amit mindkét résztvevő támogat. | + | A verzió száma szerepel a kérés és a válasz fejlécében. A legnagyobb olyan HTTP-verziót használják, amit mindkét résztvevő támogat. |
== A HTTP protokollban a kliens hogyan jelzi a kérés fejlécének végét? == | == A HTTP protokollban a kliens hogyan jelzi a kérés fejlécének végét? == | ||
− | Két CR | + | Két <CR><LF> sorozattal (0x0D 0x0A 0x0D 0x0A byteok). |
== A HTTP GET kérés hogyan közli a lekérendő dokumentum nevét és elérhetőségét? == | == A HTTP GET kérés hogyan közli a lekérendő dokumentum nevét és elérhetőségét? == | ||
25. sor: | 32. sor: | ||
== A web szerver hogyan jelzi, ha hiba történt a dokumentum lekérése során? == | == A web szerver hogyan jelzi, ha hiba történt a dokumentum lekérése során? == | ||
− | A válasz tartalmaz egy státuszkódot | + | A válasz tartalmaz egy státuszkódot (hibakódot). Ha ennek első számjegye 4-es, az kliensoldali hibát jelent (pl. 404 Not found), ha 5-ös, az szerveroldali hiba (pl. 500 Internal Server Error). A (HTTP 1.1-es) válaszkódok bővebben megtalálhatóak itt: http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html |
== A web szerver milyen két módon jelezheti a dokumentum méretét (végét)? == | == A web szerver milyen két módon jelezheti a dokumentum méretét (végét)? == | ||
− | A fejlécben előre elküldheti a méretét (pl. Content-Length fejléc mező), vagy | + | A fejlécben előre elküldheti a dokumentum méretét (pl. Content-Length fejléc mező), vagy az átvitel befejezése után simán bontja a TCP/IP-kapcsolatot. |
− | |||
---- | ---- | ||
A lap 2013. január 26., 00:22-kori változata
Ez az oldal az Informatika 2 című tárgy - Egyszerű web szerver készítése labor beugrókérdéseinek kidolgozását tartalmazza.
Jelenleg még elég hiányos a kidolgozás, továbbá évről évre kismértékben változhatnak beugrókérdések. A tanszéki honlapról mindig elérhető az aktuális mérési útmutató, mely az aktuális beugrókérdéseket tartalmazza.
Kérlek szerkesszétek, aktualizáljátok!
Tartalomjegyzék
- 1 Egy HTTP kommunikációban milyen felek vesznek részt és mi a feladatuk?
- 2 A HTTP kommunikáció során hogyan állapodnak meg a felek a használandó HTTP protokoll verzióban?
- 3 A HTTP protokollban a kliens hogyan jelzi a kérés fejlécének végét?
- 4 A HTTP GET kérés hogyan közli a lekérendő dokumentum nevét és elérhetőségét?
- 5 A web szerver hogyan jelzi, ha hiba történt a dokumentum lekérése során?
- 6 A web szerver milyen két módon jelezheti a dokumentum méretét (végét)?
- 7 Írjon C nyelvű kódrészletet, amely megkeresi az str karakter tömbben tárolt szöveg második szavát, és az str2 tömbben visszaadja!
- 8 Írjon C nyelvű kódrészletet, amely megvizsgálja, hogy az str karakter tömbben tárolt szöveg első szava "GET"-e, és ha igen, akkor a második szavát az str2 tömbben visszaadja!
- 9 Írjon C nyelvű kódrészletet, amely egy állományt binárisan megnyit, majd bezár! Ha a megnyitás sikertelen, akkor jelezze a hibát!
- 10 Írjon C nyelvű kódrészletet, amely az str karakter tömbben tárolt szöveget elküldi az s leíróval reprezentált kliens socketen keresztül!
Egy HTTP kommunikációban milyen felek vesznek részt és mi a feladatuk?
- Kliens (böngésző):
- A beírt cím alapján megállapítja a szerve IP-címét (DNS fordítás is!)
- TCP/IP-kapcsolatot hoz létre a szerver felé
- HTTP-kéréseket küld a szerver felé
- Szerver:
- HTTP-válaszokat küld a kliens kéréseire (nincs hiba: lekért oldalt tartalmazza)
- Bizonyos kérésekre egy adatbázisban módosíthat
- A válasz végén lebontja a kapcsolatot
A HTTP kommunikáció során hogyan állapodnak meg a felek a használandó HTTP protokoll verzióban?
A verzió száma szerepel a kérés és a válasz fejlécében. A legnagyobb olyan HTTP-verziót használják, amit mindkét résztvevő támogat.
A HTTP protokollban a kliens hogyan jelzi a kérés fejlécének végét?
Két <CR><LF> sorozattal (0x0D 0x0A 0x0D 0x0A byteok).
A HTTP GET kérés hogyan közli a lekérendő dokumentum nevét és elérhetőségét?
A küldött parancs (pl. GET) után egy szóközzel elválasztva következik a dokumentum helye a szerver gyökérkönyvtárához képest. Pl. a www.google.com szervernek küldött GET / HTTP/1.0 lekérés magát a gyökérkönyvtárat kéri le (perjel).
A web szerver hogyan jelzi, ha hiba történt a dokumentum lekérése során?
A válasz tartalmaz egy státuszkódot (hibakódot). Ha ennek első számjegye 4-es, az kliensoldali hibát jelent (pl. 404 Not found), ha 5-ös, az szerveroldali hiba (pl. 500 Internal Server Error). A (HTTP 1.1-es) válaszkódok bővebben megtalálhatóak itt: http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html
A web szerver milyen két módon jelezheti a dokumentum méretét (végét)?
A fejlécben előre elküldheti a dokumentum méretét (pl. Content-Length fejléc mező), vagy az átvitel befejezése után simán bontja a TCP/IP-kapcsolatot.
Keretprogram a 7-10-es feladatokhoz:
#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <strings.h> #include <unistd.h> int main () { char str[]="GET /index.html HTTP/1.0\x0d\x0a\x0d\x0a"; char str2[20]; char temp[20]; FILE *file; SOCKET s; sockaddr_in addr; /* Ide kell beszúrni a lejjebb lévő a kódrészleteket */ closesocket(s); return 0; }
Írjon C nyelvű kódrészletet, amely megkeresi az str karakter tömbben tárolt szöveg második szavát, és az str2 tömbben visszaadja!
sscanf(str, "%*[^ ] %[^ ]", str2);
Írjon C nyelvű kódrészletet, amely megvizsgálja, hogy az str karakter tömbben tárolt szöveg első szava "GET"-e, és ha igen, akkor a második szavát az str2 tömbben visszaadja!
sscanf(str, "%[^ ]", str2); if (strcmp(str2, "GET")==0) sscanf(str, "%*[^ ] %[^ ]", str2); else str2[0]='<verbatim></verbatim>';
Írjon C nyelvű kódrészletet, amely egy állományt binárisan megnyit, majd bezár! Ha a megnyitás sikertelen, akkor jelezze a hibát!
file=fopen("temp.bin", "rb"); if (file==NULL) printf("hiba a file megnyitasakor\n"); else fclose(file);
Írjon C nyelvű kódrészletet, amely az str karakter tömbben tárolt szöveget elküldi az s leíróval reprezentált kliens socketen keresztül!
addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr("152.66.28.13"); /* a neptun címe :D */ addr.sin_port = htons(80); x=connect(s, (struct sockaddr *)addr, sizeof(addr)); if (x<0) { printf("kapcsolodasi hiba\n"); return 1; } x=send(s, (const void *)str, strlen(str), 0); /* Figyelem! A sizeof() fordítási időben értékelődik ki, ezért a pointer méretét írja be, nem a tömbhosszát */ if (x<0) printf("irasi hiba\n"); else printf("%d byte elkuldve\n", x);