Podstawy komunikacji HTTP
Wprowadzenie
Dział zatytułowany „Wprowadzenie”HTTP (HyperText Transfer Protocol) to protokół warstwy aplikacji, który stanowi fundament komunikacji w internecie. Każda strona internetowa, API czy aplikacja webowa korzysta z HTTP do wymiany danych miedzy klientem (przegladarka) a serwerem.
Zrozumienie HTTP jest kluczowe dla każdego programisty webowego, ponieważ pozwala na:
- Debugowanie problemow z komunikacja
- Optymalizacje wydajnosci aplikacji
- Implementacje bezpiecznych mechanizmow uwierzytelniania
- Prawidłowa integracje z zewnetrznymi API
Kluczowe pojecia
Dział zatytułowany „Kluczowe pojecia”Klient i serwer
Dział zatytułowany „Klient i serwer”- Klient - program (np. przegladarka) wysyłający zadania
- Serwer - komputer odpowiadajacy na zadania klienta
Request i Response
Dział zatytułowany „Request i Response”- Request (zadanie) - wiadomość wysyłana przez klienta do serwera
- Response (odpowiedz) - wiadomość zwracana przez serwer do klienta
Protokół bezstanowy
Dział zatytułowany „Protokół bezstanowy”HTTP jest protokołem bezstanowym - każde zadanie jest niezależne i serwer nie pamięta poprzednich żądań (stad potrzeba sesji i ciasteczek).
Jak działa komunikacja HTTP?
Dział zatytułowany „Jak działa komunikacja HTTP?”┌─────────────┐ ┌─────────────┐│ KLIENT │ │ SERWER ││ (przegladarka)│ │ (Apache) │└──────┬──────┘ └──────┬──────┘ │ │ │ 1. REQUEST (GET /index.html) │ │ ─────────────────────────────────────► │ │ │ │ 2. RESPONSE (200 OK + tresc HTML) │ │ ◄───────────────────────────────────── │ │ │Struktura zadania HTTP (Request)
Dział zatytułowany „Struktura zadania HTTP (Request)”Zadanie HTTP składa się z trzech części:
1. Request Line (linia zadania)
Dział zatytułowany „1. Request Line (linia zadania)”GET /api/users HTTP/1.1- Metoda - GET, POST, PUT, DELETE, PATCH
- Ścieżka - adres zasobu na serwerze
- Wersja protokołu - HTTP/1.1 lub HTTP/2
2. Nagłówki (Headers)
Dział zatytułowany „2. Nagłówki (Headers)”Host: example.comContent-Type: application/jsonAuthorization: Bearer token123User-Agent: Mozilla/5.0Accept: text/html3. Ciało (Body)
Dział zatytułowany „3. Ciało (Body)”Opcjonalne, używane głównie w POST/PUT:
{ "username": "jan", "email": "jan@example.com"}Struktura odpowiedzi HTTP (Response)
Dział zatytułowany „Struktura odpowiedzi HTTP (Response)”1. Status Line (linia statusu)
Dział zatytułowany „1. Status Line (linia statusu)”HTTP/1.1 200 OK2. Nagłówki odpowiedzi
Dział zatytułowany „2. Nagłówki odpowiedzi”Content-Type: text/html; charset=UTF-8Content-Length: 1234Set-Cookie: session=abc123Cache-Control: max-age=36003. Ciało odpowiedzi
Dział zatytułowany „3. Ciało odpowiedzi”Tresc strony HTML, dane JSON itp.
Metody HTTP
Dział zatytułowany „Metody HTTP”| Metoda | Opis | Przykład użycia |
|---|---|---|
| GET | Pobieranie danych | Wyświetlenie strony |
| POST | Tworzenie zasobu | Wysłanie formularza |
| PUT | Aktualizacja całego zasobu | Edycja profilu |
| PATCH | Czesciowa aktualizacja | Zmiana hasła |
| DELETE | Usuwanie zasobu | Usuniecie konta |
Kody statusu HTTP
Dział zatytułowany „Kody statusu HTTP”Grupy kodow
Dział zatytułowany „Grupy kodow”| Zakres | Kategoria | Znaczenie |
|---|---|---|
| 1xx | Informacyjne | Zadanie w trakcie |
| 2xx | Sukces | Zadanie zakończone powodzeniem |
| 3xx | Przekierowanie | Wymagana dodatkowa akcja |
| 4xx | Błąd klienta | Problem po stronie zadania |
| 5xx | Błąd serwera | Problem po stronie serwera |
Najważniejsze kody
Dział zatytułowany „Najważniejsze kody”200 OK - Sukces201 Created - Zasob utworzony301 Moved Permanently - Stałe przekierowanie302 Found - Tymczasowe przekierowanie400 Bad Request - Błędne zadanie401 Unauthorized - Brak uwierzytelnienia403 Forbidden - Brak uprawnien (mimo uwierzytelnienia)404 Not Found - Zasob nie istnieje500 Internal Error - Błąd serwera503 Service Unavailable - Serwer przeciazonyPrzykłady w kodzie
Dział zatytułowany „Przykłady w kodzie”Analiza zadania w PHP
Dział zatytułowany „Analiza zadania w PHP”<?php// Odczyt metody HTTP$method = $_SERVER['REQUEST_METHOD']; // GET, POST, PUT...
// Odczyt nagłówków$contentType = $_SERVER['CONTENT_TYPE'] ?? '';$authorization = $_SERVER['HTTP_AUTHORIZATION'] ?? '';
// Odczyt ciała zadania (dla POST/PUT)$body = file_get_contents('php://input');$data = json_decode($body, true);
// Wysłanie odpowiedzi z kodem statusuhttp_response_code(200);header('Content-Type: application/json');echo json_encode(['status' => 'ok']);Analiza w JavaScript (fetch)
Dział zatytułowany „Analiza w JavaScript (fetch)”// Wysłanie zadania GETconst response = await fetch('https://api.example.com/users');console.log(response.status); // 200console.log(response.statusText); // "OK"
// Odczyt nagłówków odpowiedziconsole.log(response.headers.get('Content-Type'));
// Odczyt ciała odpowiedziconst data = await response.json();Różnica miedzy 401 a 403
Dział zatytułowany „Różnica miedzy 401 a 403”Najczestsze błędy
Dział zatytułowany „Najczestsze błędy”- Brak nagłówka Content-Type - serwer nie wie jak interpretowac dane
- Użycie GET do modyfikacji danych - lamie zasady REST
- Ignorowanie kodow statusu - brak obsługi błędów w aplikacji
- Przechowywanie wrażliwych danych w URL - widoczne w logach serwera
Podsumowanie
Dział zatytułowany „Podsumowanie”- HTTP to protokół komunikacji klient-serwer
- Każde zadanie składa się z: linii zadania, nagłówków i opcjonalnego ciała
- Metody HTTP okreslaja typ operacji (GET, POST, PUT, DELETE)
- Kody statusu informuja o wyniku operacji
- Nagłówki przekazuja metadane (typ danych, autoryzacja, cache)
MDN: HTTP Kompletna dokumentacja protokołu HTTP
HTTP Status Codes Lista wszystkich kodow statusu HTTP
REST API Tutorial Praktyczne zastosowanie HTTP w API