Tech Handbook Null Yard

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

  1. klient łączy się z serwerem,
  2. serwer przedstawia certyfikat,
  3. klient sprawdza certyfikat,
  4. uzgadniane są klucze sesyjne,
  5. 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