Jak przeglądarka i serwer wymieniają żądanie i odpowiedź, z czego składa się adres URL, czym HTTPS różni się od HTTP, kto ustala standardy HTML i dlaczego polskie znaki wymagają UTF-8. Lekcja 3.1 kursu INF.03.
Strona WWW to dokument HTML, który serwer wysyła przeglądarce na żądanie, a przeglądarka rysuje na ekranie. Zanim napiszesz pierwszy znacznik, warto wiedzieć, kto komu ten plik podaje i pod jakim adresem. Na egzaminie pisemnym wracają z tego pytania o budowę adresu URL, o różnicę między HTTP a HTTPS, o kody odpowiedzi serwera, o organizację ustalającą standard HTML, o pobieranie i wysyłanie danych oraz o kodowanie polskich znaków. W części praktycznej ta wiedza decyduje o dwóch rzeczach: gdzie położyć plik index.html, żeby serwer go widział, i jak go otworzyć, żeby skrypt PHP naprawdę się wykonał.
Klient i serwer
Klient to program, który prosi o dane, serwer to program, który je wydaje. Klientem jest przeglądarka (Chrome, Firefox, Edge), serwerem WWW jest program czekający na połączenia i oddający pliki: najczęściej Apache, ten sam, który stoi w pakiecie XAMPP obok MySQL i PHP (patrz lekcja o XAMPP i phpMyAdmin). Rozmowa ma zawsze dwie części. Żądanie (request) idzie od klienta do serwera i mówi, o który zasób chodzi. Odpowiedź (response) wraca z serwera i niesie kod statusu oraz treść, czyli zwykle plik.
Przeglądarka wysyła do serwera żądanie HTTP z adresem rozbitym na części, a serwer odsyła kod 200 i plik HTML, po którym idą osobne żądania o arkusz CSS i obraz
Kod statusu to trzycyfrowa liczba, po której poznajesz, jak poszło.
›
200 OK: zasób znaleziony, w odpowiedzi jest jego treść.
›
301 Moved Permanently (przeniesiony na stałe): zasób ma nowy adres i przeglądarka ma tam przejść.
›
403 Forbidden (zabroniony): serwer plik widzi, ale odmawia dostępu.
›
404 Not Found (nie znaleziono): pod tym adresem nic nie ma, zwykle przez literówkę w nazwie pliku.
›
500 Internal Server Error (wewnętrzny błąd serwera): coś wysypało się po stronie serwera, przy zadaniu egzaminacyjnym prawie zawsze błąd w skrypcie PHP.
Jedno żądanie to jeden plik. Przeglądarka najpierw pobiera dokument HTML, czyta go od góry i dopiero z niego dowiaduje się, że potrzebny jest jeszcze arkusz styl.css, obraz obrazy/mysz.jpg i skrypt. Po każdy z nich wysyła osobne żądanie. Dlatego strona z trzydziestoma zdjęciami ładuje się dłużej niż ta sama strona z trzema, choć kod HTML jest niemal tej samej długości.
Adres URL
URL (Uniform Resource Locator, ujednolicony lokalizator zasobu) to pełny adres zasobu w sieci: mówi, jakim protokołem, z którego komputera i który plik pobrać. Adres z rysunku rozkłada się na sześć części.
Część
W przykładzie
Znaczy
schemat
https://
jakim protokołem rozmawiać
host
sklep.pl
z którym komputerem; nazwę zamienia na adres IP usługa DNS
port
:443
który program na tym komputerze odbiera połączenie
ścieżka
/produkty/index.html
który plik w drzewie katalogów serwera
zapytanie
?kat=monitory
dane doklejone do adresu, pary nazwa i wartość łączone znakiem &
fragment
#cena
miejsce w dokumencie, do którego przeglądarka ma przewinąć
Port pisze się rzadko, bo każdy protokół ma domyślny: HTTP korzysta z portu 80, HTTPS z portu
Fragment jest jedyną częścią, która do serwera w ogóle nie jedzie: obsługuje go sama przeglądarka po pobraniu strony.
Wewnątrz witryny pliki wskazuje się ścieżkami i tu są dwa rodzaje. Ścieżka względna liczy się od katalogu, w którym leży bieżący plik: obrazy/mysz.jpg to plik w podkatalogu obok, ../styl.css to plik o poziom wyżej, a /index.html z ukośnikiem na początku liczy się od korzenia witryny. Ścieżka bezwzględna podaje adres pełny, od https:// albo od litery dysku.
Pułapka: ścieżka C:\Strona\obrazy\mysz.jpg działa tylko na twoim komputerze, więc po wgraniu witryny na serwer taki obraz się nie pokaże. W arkuszu poprawną odpowiedzią jest ścieżka względna, z ukośnikami w prawo.
HTTP i HTTPS
HTTP (HyperText Transfer Protocol, protokół przesyłania hipertekstu) to zestaw reguł, według których przeglądarka pyta, a serwer odpowiada. Pracuje na porcie 80 i przesyła wszystko tekstem jawnym: kto po drodze podsłucha pakiety, przeczyta hasło wpisane w formularz.
HTTPS to ten sam protokół zamknięty w szyfrowanym tunelu TLS (Transport Layer Security, warstwa bezpiecznych połączeń; starsza nazwa tego mechanizmu to SSL). Pracuje na porcie 443 i wymaga certyfikatu potwierdzającego, że serwer jest tym, za kogo się podaje, a przeglądarka pokazuje przy adresie kłódkę. Szyfrowanie chroni dane w drodze, nie sprawdza uczciwości strony: witryna wyłudzająca hasła też może mieć kłódkę. Numery portów pozostałych usług zbiera narzędzie z protokołami i portami. Każde żądanie ma metodę. GET (POBIERZ) prosi o zasób i dokleja ewentualne dane do adresu, więc widać je w polu adresu przeglądarki i można je zapisać w zakładce. POST (WYŚLIJ) wkłada dane do treści żądania, gdzie ich nie widać, i nie ogranicza ich długością adresu, dlatego hasła i dłuższe formularze idą metodą POST po HTTPS. Jak zapisać to w kodzie, pokazuje lekcja o formularzach. Ruch idzie w obie strony i każdy kierunek ma swoją nazwę. Pobieranie (download) to przesyłanie danych z serwera do klienta: otwarcie strony, zapisanie pliku PDF, obejrzenie filmu. Wysyłanie (upload) to kierunek odwrotny, od klienta do serwera: wysłany formularz, zdjęcie dodane do galerii, plik wrzucony do chmury. Domowe łącza są zwykle asymetryczne, czyli mają wyższą prędkość pobierania niż wysyłania, bo przeciętny użytkownik więcej ogląda, niż nadaje. Gotową witrynę też się wysyła: pliki HTML, CSS i obrazy kopiuje się na serwer hostingu protokołem FTP (File Transfer Protocol, protokół przesyłania plików), programem w rodzaju FileZilli, i to jest wysyłanie danych, nie pobieranie.
Standardy dokumentów hipertekstowych
Standard to spisana umowa, jak wygląda poprawny dokument, żeby każda przeglądarka rysowała go tak samo. Ustala go W3C (World Wide Web Consortium), organizacja założona przez twórcę WWW; nad samym HTML pracuje dziś razem z WHATWG (Web Hypertext Application Technology Working Group), które utrzymuje HTML jako standard stale aktualizowany. W pytaniach pojawiają się trzy wersje.
HTML 4.01 z 1999 roku miał trzy odmiany (Strict, Transitional, Frameset) i długą deklarację typu dokumentu z adresem definicji DTD. Dopuszczał znaczniki od wyglądu, takie jak <font> i <center>, oraz dzielenie okna ramkami <frame>. W HTML5 tego nie ma: wygląd i podział ekranu robi CSS.
XHTML to ten sam HTML zapisany według reguł składni XML. Znaczniki wyłącznie małymi literami, każdy otwarty musi zostać zamknięty, znaczniki puste zamyka się ukośnikiem (<br />, <img src="mysz.jpg" alt="Mysz" />), wartości atrybutów zawsze w cudzysłowie, a zagnieżdżenia nie mogą się krzyżować. Walidator XHTML zgłasza błąd na <br> bez ukośnika i dokładnie o to pytają starsze zadania.
HTML5 obowiązuje dzisiaj. Deklaracja typu dokumentu skróciła się do <!DOCTYPE html>, doszły znaczniki sekcji (header, nav, main, section, article, aside, footer), multimedia bez wtyczek (audio, video), grafika (svg, canvas) i nowe typy pól formularza. Zapis <br /> nadal jest dopuszczony, ale w HTML5 pisze się <br>.
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<title>Sklep komputerowy</title>
</head>
<body>
</body>
</html>
Cały szkielet dokumentu, element po elemencie, omawia lekcja o szkielecie HTML5. Zgodność gotowego pliku ze standardem sprawdza walidator W3C: wskazuje w kodzie miejsca niezgodne z HTML5, na przykład brak <title> w sekcji nagłówkowej. Walidacja i testowanie mają w kursie osobny dział. Kodowanie znaków
Kodowanie znaków to sposób zamiany liter na liczby zapisywane w pliku. W pliku leżą bajty, nie litery, więc bez umowy, który bajt oznacza ą, polskie znaki rozjadą się przy pierwszym otwarciu na innym komputerze.
ASCII
128 znaków: litery angielskie, cyfry, znaki podstawowe; polskich liter nie ma w ogóle
ISO-8859-2 (Latin-2)
jeden bajt na znak, alfabety środkowoeuropejskie, w tym pełny polski
Windows-1250
jeden bajt na znak, windowsowy odpowiednik Latin-2, kilka znaków pod innymi numerami
UTF-8
zapis Unicode, od jednego do czterech bajtów na znak, wszystkie alfabety świata; dzisiejszy domyślny wybór
Deklaracja w dokumencie to jedna linia w sekcji nagłówkowej: <meta charset="UTF-8">. Sama deklaracja nie wystarczy, bo mówi tylko, jak plik ODCZYTAĆ. Plik trzeba jeszcze w tym kodowaniu ZAPISAĆ, a to ustawia edytor: w Notatniku pole „Kodowanie" w oknie zapisu, w Notepad++ menu „Kodowanie", w VS Code przycisk z nazwą kodowania na dolnym pasku.
Pułapka: krzaczki w rodzaju „ż" albo pytajniki zamiast „ż" znaczą, że plik zapisano w jednym kodowaniu, a odczytano w drugim. Sprawdza się wtedy dwie rzeczy: <meta charset="UTF-8"> w sekcji nagłówkowej i kodowanie pliku w edytorze.
Arkusz CKE wymaga wprost „zastosowania właściwego standardu kodowania polskich znaków", więc jest to punktowany element zadania, a nie kosmetyka.
Na egzaminie
Pytanie pisemne z tej lekcji jest zwykle jednozdaniowe i sprawdza jedną nazwę. Wracają: organizacja ustalająca standard HTML (W3C, nie ISO ani NASK), zapis < dający na stronie znak mniejszości, deklaracja <!DOCTYPE html> jako informacja, że dokument jest w wersji 5 języka (a nie że znaczniki mają być pisane wielkimi literami), poprawny zapis deklaracji kodowania (<meta charset="UTF-8">, nie <meta encoding="UTF-8">), różnica między atrybutem src, który wskazuje plik do wstawienia, na przykład grafikę, a atrybutem href, który wskazuje cel odnośnika albo dołączany arkusz stylów, oraz narzędzie do wskazywania błędów składni, czyli walidator, a nie kompilator, debugger czy interpreter. Osobno warto zapamiętać, że dane widoczne w adresie po wysłaniu formularza to metoda GET. Pytania o pozycjonowanie i off-page SEO (pozyskiwanie linków zewnętrznych prowadzących do strony) należą do działu o optymalizacji: tu wystarczy nie mylić walidacji z pozycjonowaniem.
W części praktycznej ta lekcja pilnuje trzech rzeczy. Plik strony ma leżeć w katalogu, który obsługuje serwer (w XAMPP jest to htdocs), pod nazwą i w podkatalogu podanym w arkuszu. Witrynę otwiera się adresem w rodzaju http://localhost/sklep/index.html, bo tylko wtedy serwer wykona skrypty PHP; plik otwarty podwójnym kliknięciem pokaże kod skryptu zamiast jego wyniku. Trzecia rzecz to plik z nazwą przeglądarki: część arkuszy każe zapisać w pliku tekstowym (na przykład przegladarka.txt) nazwę przeglądarki, w której sprawdzano witrynę, i ten plik również jest oceniany.
Ściąga
klient
przeglądarka, wysyła żądanie
serwer WWW
program oddający pliki, w XAMPP jest to Apache
części URL
schemat, host, port, ścieżka, zapytanie, fragment
porty domyślne
80 dla HTTP, 443 dla HTTPS
200, 301
zasób oddany; zasób przeniesiony na stałe
403, 404
dostęp zabroniony; nie znaleziono zasobu
500
błąd po stronie serwera, zwykle w skrypcie
GET
dane w adresie, widoczne, można zapisać w zakładce
POST
dane w treści żądania, w adresie niewidoczne
pobieranie (download)
dane z serwera do klienta
wysyłanie (upload)
dane z klienta do serwera, także wgranie witryny przez FTP
W3C
organizacja ustalająca standardy WWW, w tym HTML
<!DOCTYPE html>
dokument w HTML5
<br />
zapis z XHTML, w HTML5 wystarczy <br>
<meta charset="UTF-8">
deklaracja kodowania; plik trzeba też ZAPISAĆ w UTF-8
ścieżka względna
obrazy/mysz.jpg, ../styl.css; na egzaminie nigdy C:\
Pobierz ściągę PDF