Przejdź do głównej zawartości

Podstawy komunikacji HTTP

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
  • Klient - program (np. przegladarka) wysyłający zadania
  • Serwer - komputer odpowiadajacy na zadania klienta
  • Request (zadanie) - wiadomość wysyłana przez klienta do serwera
  • Response (odpowiedz) - wiadomość zwracana przez serwer do klienta

HTTP jest protokołem bezstanowym - każde zadanie jest niezależne i serwer nie pamięta poprzednich żądań (stad potrzeba sesji i ciasteczek).

┌─────────────┐ ┌─────────────┐
│ KLIENT │ │ SERWER │
│ (przegladarka)│ │ (Apache) │
└──────┬──────┘ └──────┬──────┘
│ │
│ 1. REQUEST (GET /index.html) │
│ ─────────────────────────────────────► │
│ │
│ 2. RESPONSE (200 OK + tresc HTML) │
│ ◄───────────────────────────────────── │
│ │

Zadanie HTTP składa się z trzech części:

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
Host: example.com
Content-Type: application/json
Authorization: Bearer token123
User-Agent: Mozilla/5.0
Accept: text/html

Opcjonalne, używane głównie w POST/PUT:

{
"username": "jan",
"email": "jan@example.com"
}
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 1234
Set-Cookie: session=abc123
Cache-Control: max-age=3600

Tresc strony HTML, dane JSON itp.

MetodaOpisPrzykład użycia
GETPobieranie danychWyświetlenie strony
POSTTworzenie zasobuWysłanie formularza
PUTAktualizacja całego zasobuEdycja profilu
PATCHCzesciowa aktualizacjaZmiana hasła
DELETEUsuwanie zasobuUsuniecie konta
ZakresKategoriaZnaczenie
1xxInformacyjneZadanie w trakcie
2xxSukcesZadanie zakończone powodzeniem
3xxPrzekierowanieWymagana dodatkowa akcja
4xxBłąd klientaProblem po stronie zadania
5xxBłąd serweraProblem po stronie serwera
200 OK - Sukces
201 Created - Zasob utworzony
301 Moved Permanently - Stałe przekierowanie
302 Found - Tymczasowe przekierowanie
400 Bad Request - Błędne zadanie
401 Unauthorized - Brak uwierzytelnienia
403 Forbidden - Brak uprawnien (mimo uwierzytelnienia)
404 Not Found - Zasob nie istnieje
500 Internal Error - Błąd serwera
503 Service Unavailable - Serwer przeciazony
<?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 statusu
http_response_code(200);
header('Content-Type: application/json');
echo json_encode(['status' => 'ok']);
// Wysłanie zadania GET
const response = await fetch('https://api.example.com/users');
console.log(response.status); // 200
console.log(response.statusText); // "OK"
// Odczyt nagłówków odpowiedzi
console.log(response.headers.get('Content-Type'));
// Odczyt ciała odpowiedzi
const data = await response.json();
  1. Brak nagłówka Content-Type - serwer nie wie jak interpretowac dane
  2. Użycie GET do modyfikacji danych - lamie zasady REST
  3. Ignorowanie kodow statusu - brak obsługi błędów w aplikacji
  4. Przechowywanie wrażliwych danych w URL - widoczne w logach serwera
  • 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)