HTTP, HTTPS i TLS
HTTP opisuje semantykę komunikacji aplikacyjnej, a TLS chroni ją kryptograficznie. W praktyce trzeba rozumieć request/response, statusy, nagłówki, cookies, cache, certyfikaty i różnice między HTTP/1.1, HTTP/2 oraz HTTP/3.
Powiązane tematy: DNS, domeny i routing, API i integracje systemów, nginx i reverse proxy oraz Bezpieczeństwo aplikacji webowych.
1. Model klient-serwer
Przeglądarka lub aplikacja wysyła request:
klient → request → serwer
klient ← response ← serwer
HTTP jest protokołem aplikacyjnym działającym zwykle nad TCP, a HTTP/3 nad QUIC/UDP.
2. Request HTTP
Przykład:
GET /products/42 HTTP/1.1
Host: example.com
Accept: application/json
User-Agent: Mozilla/5.0
Elementy: - metoda, - ścieżka, - wersja protokołu, - nagłówki, - opcjonalne body.
3. Metody
GET pobranie
POST utworzenie/wykonanie operacji
PUT pełna aktualizacja
PATCH częściowa aktualizacja
DELETE usunięcie
HEAD jak GET, ale bez body
OPTIONS informacje o możliwościach
4. Statusy
2xx
200 OK
201 Created
204 No Content
3xx
301 Moved Permanently
302 Found
304 Not Modified
307 Temporary Redirect
308 Permanent Redirect
4xx
400 Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
405 Method Not Allowed
409 Conflict
429 Too Many Requests
5xx
500 Internal Server Error
502 Bad Gateway
503 Service Unavailable
504 Gateway Timeout
5. Nagłówki
Przykłady:
Content-Type
Content-Length
Authorization
Accept
Accept-Encoding
Cache-Control
ETag
Cookie
Set-Cookie
Location
Origin
Referer
User-Agent
6. Content-Type
text/html
text/css
application/javascript
application/json
image/png
image/webp
application/pdf
7. Cookies
Serwer:
Set-Cookie: session=abc123; HttpOnly; Secure; SameSite=Lax
Przeglądarka później:
Cookie: session=abc123
Ważne flagi:
- HttpOnly,
- Secure,
- SameSite.
8. Cache
Przykład:
Cache-Control: public, max-age=3600
Walidacja:
ETag
If-None-Match
Last-Modified
If-Modified-Since
Odpowiedź:
304 Not Modified
9. HTTPS
HTTPS to HTTP szyfrowany przez TLS.
Zapewnia: - poufność, - integralność, - uwierzytelnienie serwera.
10. Certyfikaty
Certyfikat wiąże nazwę domeny z kluczem publicznym.
Typowo: - certyfikat serwera, - certyfikaty pośrednie, - root CA zaufany przez system/przeglądarkę.
11. Let's Encrypt
Darmowe certyfikaty TLS.
Na nginx często używa się Certbota:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
Test odnowienia:
sudo certbot renew --dry-run
12. TLS handshake - uproszczenie
- klient łączy się z serwerem,
- serwer przedstawia certyfikat,
- klient sprawdza certyfikat,
- uzgadniane są klucze sesyjne,
- dalszy ruch jest szyfrowany.
13. SNI
SNI pozwala serwerowi obsługiwać wiele domen HTTPS na jednym IP.
Klient podczas handshake wskazuje, do jakiej domeny chce się połączyć.
14. CORS
CORS steruje dostępem skryptów z innych originów.
Origin:
scheme + host + port
Przykład:
https://app.example.com
https://api.example.com
to dwa różne originy.
Nagłówki:
Access-Control-Allow-Origin: https://app.example.com
Access-Control-Allow-Methods: GET, POST
15. Preflight
Przeglądarka może najpierw wysłać:
OPTIONS /api/resource
i dopiero po zgodzie właściwy request.
16. Compression
Najczęściej:
gzip
br
Klient:
Accept-Encoding: gzip, br
Serwer:
Content-Encoding: br
17. HTTP/1.1, HTTP/2, HTTP/3
HTTP/1.1: - klasyczny, - wiele połączeń.
HTTP/2: - multiplexing, - binarne ramki, - jedno połączenie dla wielu requestów.
HTTP/3: - QUIC, - UDP, - mniejsze problemy przy utracie pakietów.
18. HSTS
Strict-Transport-Security: max-age=31536000; includeSubDomains
Informuje przeglądarkę, że ma używać HTTPS.
Włączaj świadomie.
19. curl
Nagłówki:
curl -I https://example.com
Pełny verbose:
curl -v https://example.com
POST JSON:
curl -X POST \
-H 'Content-Type: application/json' \
-d '{"name":"Anna"}' \
https://example.com/api/users
Bearer token:
curl -H 'Authorization: Bearer TOKEN' \
https://example.com/api/private
20. Typowe problemy
502 Bad Gateway
Reverse proxy nie może połączyć się z backendem.
504 Gateway Timeout
Backend nie odpowiedział na czas.
CORS error
Backend nie zezwala na origin lub preflight.
Mixed content
Strona HTTPS próbuje pobrać zasób przez HTTP.
Certyfikat nie pasuje
Certyfikat nie obejmuje danej domeny.
21. Co powinieneś umieć
- czytać request i response,
- rozpoznawać klasy statusów,
- testować endpoint przez
curl, - rozumieć cookies, cache i CORS,
- rozumieć rolę TLS i certyfikatów,
- rozpoznać różnicę między błędem aplikacji a proxy.
Oficjalne źródła
- HTTP Semantics - RFC 9110: https://www.rfc-editor.org/rfc/rfc9110
- HTTP/2 - RFC 9113: https://www.rfc-editor.org/rfc/rfc9113
- HTTP/3 - RFC 9114: https://www.rfc-editor.org/rfc/rfc9114
- TLS 1.3 - RFC 8446: https://www.rfc-editor.org/rfc/rfc8446
- TLS recommendations - RFC 9325: https://www.rfc-editor.org/rfc/rfc9325