\section{HTTP és HTTPS} \subsection{} \begin{frame}{Mi a HTTP?} \begin{itemize} \item \kiemel{HyperText Transfer Protocol} - szövegalapú protokoll \item Kliens-szerver kommunikáció alapja a weben \item Állapotmentes (stateless) protokoll \item Request-Response modell \item Port: \kiemel{80} (HTTP), \kiemelZ{443} (HTTPS) \end{itemize} \vspace{0.5cm} \begin{block}{HTTP verziók} \begin{itemize} \item HTTP/1.0 (1996) - Egy kérés per kapcsolat \item HTTP/1.1 (1997) - Perzisztens kapcsolat, pipeline \item HTTP/2 (2015) - Multiplexing, bináris protokoll \item HTTP/3 (2022) - QUIC protokoll, UDP alapú \end{itemize} \end{block} \end{frame} \begin{frame}{HTTP vs HTTPS} \begin{columns} \begin{column}{0.5\textwidth} \begin{block}{HTTP} \begin{itemize} \item Titkosítatlan kommunikáció \item Lehallgatható \item Módosítható (Man-in-the-Middle) \item Gyorsabb (nincs titkosítás) \item Port 80 \end{itemize} \end{block} \end{column} \begin{column}{0.5\textwidth} \begin{block}{HTTPS = HTTP + SSL/TLS} \begin{itemize} \item \kiemelZ{Titkosított} kommunikáció \item SSL/TLS tanúsítvány szükséges \item Védett adatátvitel \item Autentikáció és integritás \item Port 443 \end{itemize} \end{block} \end{column} \end{columns} \vspace{0.5cm} \begin{alertblock}{Fontos} Modern webalkalmazásoknál \kiemel{HTTPS kötelező}! (SEO, biztonság, böngésző figyelmeztetések) \end{alertblock} \end{frame} \begin{frame}{HTTP Request felépítése} \begin{block}{Request struktúra} \texttt{\kiemel{GET} /api/users/123 \kiemelN{HTTP/1.1}}\\ \texttt{Host: example.com}\\ \texttt{User-Agent: Mozilla/5.0}\\ \texttt{Accept: application/json}\\ \texttt{Authorization: Bearer token123}\\ \texttt{}\\ \texttt{\kiemelZ{[Request Body - opcionális]}} \end{block} \begin{itemize} \item \kiemel{Request Line:} Metódus, útvonal, protokoll verzió \item \kiemel{Headers:} Metaadatok kulcs-érték párok \item \kiemel{Body:} Opcionális adatok (POST, PUT, PATCH) \end{itemize} \end{frame} \begin{frame}{HTTP Response felépítése} \begin{block}{Response struktúra} \texttt{\kiemelN{HTTP/1.1} \kiemelZ{200} OK}\\ \texttt{Content-Type: application/json}\\ \texttt{Content-Length: 58}\\ \texttt{Date: Mon, 27 Jan 2026 10:00:00 GMT}\\ \texttt{Server: nginx/1.20.1}\\ \texttt{}\\ \texttt{\kiemel{\{"id": 123, "name": "Alice", "email": "alice@example.com"\}}} \end{block} \begin{itemize} \item \kiemel{Status Line:} Protokoll, státuszkód, státusz szöveg \item \kiemel{Headers:} Metaadatok \item \kiemel{Body:} Válasz tartalma (HTML, JSON, XML, stb.) \end{itemize} \end{frame} \begin{frame}{HTTP Metódusok} \begin{description} \item[\kiemel{GET}] Erőforrás lekérése (csak olvasás, idempotens) \item[\kiemel{POST}] Új erőforrás létrehozása (nem idempotens) \item[\kiemel{PUT}] Erőforrás teljes frissítése (idempotens) \item[\kiemel{PATCH}] Erőforrás részleges frissítése (nem idempotens) \item[\kiemel{DELETE}] Erőforrás törlése (idempotens) \item[\kiemelN{HEAD}] Mint GET, de csak headerek (nincs body) \item[\kiemelN{OPTIONS}] Támogatott metódusok lekérése (CORS) \item[\kiemelN{TRACE}] Echo teszt (diagnosztika) \item[\kiemelN{CONNECT}] Tunnel létrehozása (proxy) \end{description} \vspace{0.3cm} \begin{block}{Idempotens} Többszöri végrehajtás ugyanazt az eredményt adja (GET, PUT, DELETE) \end{block} \end{frame} \begin{frame}{HTTP Státuszkódok - 1xx Informational} \begin{description} \item[\kiemelN{100 Continue}] A kliens folytathatja a kérést \item[\kiemelN{101 Switching Protocols}] Protokoll váltás (pl. WebSocket) \item[\kiemelN{102 Processing}] A szerver dolgozik a kérésen (WebDAV) \item[\kiemelN{103 Early Hints}] Korai válasz header információkkal \end{description} \vspace{0.5cm} \begin{block}{Használat} Ritkán használt kategória, főleg speciális protokoll műveleteknél \end{block} \end{frame} \begin{frame}{HTTP Státuszkódok - 2xx Success} \begin{description} \item[\kiemelZ{200 OK}] Sikeres kérés (GET, PUT, PATCH) \item[\kiemelZ{201 Created}] Erőforrás sikeresen létrehozva (POST) \item[\kiemelZ{202 Accepted}] Kérés elfogadva, de még feldolgozás alatt \item[\kiemelZ{203 Non-Authoritative}] Proxy/cache módosította a választ \item[\kiemelZ{204 No Content}] Sikeres, de nincs visszaadott tartalom (DELETE) \item[\kiemelZ{205 Reset Content}] Sikeres, űrlap visszaállítása szükséges \item[\kiemelZ{206 Partial Content}] Részleges tartalom (range request) \end{description} \vspace{0.3cm} \begin{alertblock}{REST API} \textbf{200} (GET, PUT, PATCH), \textbf{201} (POST), \textbf{204} (DELETE) \end{alertblock} \end{frame} \begin{frame}{HTTP Státuszkódok - 3xx Redirection} \begin{description} \item[\kiemel{300 Multiple Choices}] Több lehetséges választás \item[\kiemel{301 Moved Permanently}] Végleges átirányítás (SEO átad) \item[\kiemel{302 Found}] Ideiglenes átirányítás (POST $\rightarrow$ GET) \item[\kiemel{303 See Other}] Átirányítás GET-re (POST után) \item[\kiemel{304 Not Modified}] Cache friss, nincs módosítás \item[\kiemel{307 Temporary Redirect}] Ideiglenes, metódus megmarad \item[\kiemel{308 Permanent Redirect}] Végleges, metódus megmarad \end{description} \vspace{0.3cm} \begin{block}{Cache és átirányítás} 301/308 végleges, 302/307 ideiglenes. 307/308 megőrzi az eredeti metódust! \end{block} \end{frame} \begin{frame}{HTTP Státuszkódok - 4xx Client Error (1/2)} \begin{description} \item[\kiemel{400 Bad Request}] Hibás kérés szintaxis (validáció) \item[\kiemel{401 Unauthorized}] Autentikáció szükséges (login hiányzik) \item[\kiemel{402 Payment Required}] Fizetés szükséges (nem használt) \item[\kiemel{403 Forbidden}] Hozzáférés megtagadva (nincs jogosultság) \item[\kiemel{404 Not Found}] Erőforrás nem található \item[\kiemel{405 Method Not Allowed}] Metódus nem engedélyezett \item[\kiemel{406 Not Acceptable}] Nem támogatott tartalom típus \item[\kiemel{407 Proxy Auth Required}] Proxy autentikáció szükséges \item[\kiemel{408 Request Timeout}] Kérés időtúllépés \end{description} \end{frame} \begin{frame}{HTTP Státuszkódok - 4xx Client Error (2/2)} \begin{description} \item[\kiemel{409 Conflict}] Konfliktus (pl. már létező erőforrás) \item[\kiemel{410 Gone}] Erőforrás véglegesen eltávolítva \item[\kiemel{411 Length Required}] Content-Length header hiányzik \item[\kiemel{412 Precondition Failed}] Feltétel nem teljesült \item[\kiemel{413 Payload Too Large}] Request body túl nagy \item[\kiemel{414 URI Too Long}] URL túl hosszú \item[\kiemel{415 Unsupported Media Type}] Nem támogatott media type \item[\kiemel{416 Range Not Satisfiable}] Érvénytelen range \item[\kiemel{418 I'm a teapot}] Vicces kód (április 1.) \item[\kiemel{422 Unprocessable Entity}] Validációs hiba (WebDAV) \item[\kiemel{429 Too Many Requests}] Rate limit túllépés \end{description} \end{frame} \begin{frame}{HTTP Státuszkódok - 5xx Server Error} \begin{description} \item[\kiemel{500 Internal Server Error}] Általános szerver hiba \item[\kiemel{501 Not Implemented}] Metódus nem implementált \item[\kiemel{502 Bad Gateway}] Gateway/proxy hiba \item[\kiemel{503 Service Unavailable}] Szerver túlterhelt/karbantartás \item[\kiemel{504 Gateway Timeout}] Gateway időtúllépés \item[\kiemel{505 HTTP Version Not Supported}] HTTP verzió nem támogatott \item[\kiemel{506 Variant Also Negotiates}] Konfigurációs hiba \item[\kiemel{507 Insufficient Storage}] Nincs elég tárhely \item[\kiemel{508 Loop Detected}] Végtelen ciklus (WebDAV) \item[\kiemel{510 Not Extended}] További kiterjesztés szükséges \item[\kiemel{511 Network Auth Required}] Hálózati autentikáció \end{description} \end{frame} \begin{frame}{REST API-ban gyakori státuszkódok} \begin{table} \centering \small \begin{tabular}{|l|l|l|} \hline \textbf{Metódus} & \textbf{Sikeres} & \textbf{Hiba} \\ \hline GET & 200 OK & 404 Not Found \\ \hline POST & 201 Created & 400 Bad Request, 409 Conflict \\ \hline PUT & 200 OK, 204 No Content & 400 Bad Request, 404 Not Found \\ \hline PATCH & 200 OK & 400 Bad Request, 404 Not Found \\ \hline DELETE & 204 No Content & 404 Not Found \\ \hline \multicolumn{3}{|l|}{Autentikáció: 401 Unauthorized, 403 Forbidden} \\ \hline \multicolumn{3}{|l|}{Szerver hiba: 500 Internal Server Error, 503 Service Unavailable} \\ \hline \multicolumn{3}{|l|}{Validáció: 400 Bad Request, 422 Unprocessable Entity} \\ \hline \end{tabular} \end{table} \end{frame} \begin{frame}[fragile]{Fontos HTTP Headers (Request)} \begin{block}{Gyakori Request Headers} \begin{lstlisting}[language=bash, basicstyle=\tiny\ttfamily] Host: api.example.com # Celszerver User-Agent: Mozilla/5.0 # Kliens informacio Accept: application/json # Elfogadott tartalom tipus Content-Type: application/json # Kuldes tartalom tipus Authorization: Bearer # Autentikacio (JWT) Cookie: sessionId=abc123 # Session cookie Accept-Language: hu-HU,en # Nyelvi preferencia Accept-Encoding: gzip, deflate # Tomoritesi modok Cache-Control: no-cache # Cache iranyitas If-None-Match: "etag123" # Felteteles keres Origin: https://example.com # CORS eredethelye \end{lstlisting} \end{block} \end{frame} \begin{frame}[fragile]{Fontos HTTP Headers (Response)} \begin{block}{Gyakori Response Headers} \begin{lstlisting}[language=bash, basicstyle=\tiny\ttfamily] Content-Type: application/json # Valasz tartalom tipus Content-Length: 1234 # Tartalom merete Date: Mon, 27 Jan 2026 10:00:00 # Valasz idopontja Server: nginx/1.20.1 # Szerver informacio Set-Cookie: sessionId=abc; HttpOnly # Cookie beallitas Cache-Control: max-age=3600 # Cache idotartam ETag: "etag123" # Verzio azonosito Expires: Wed, 29 Jan 2026 10:00:00 # Lejarat idopont Location: /api/users/123 # Atiranyitas cel (3xx, 201) Access-Control-Allow-Origin: * # CORS engedelyezes X-RateLimit-Remaining: 99 # Rate limit info \end{lstlisting} \end{block} \end{frame} \begin{frame}{HTTPS - SSL/TLS Handshake} \begin{enumerate} \item \kiemel{Client Hello} - Támogatott titkosítási módok \item \kiemel{Server Hello} - Kiválasztott titkosítás + tanúsítvány \item \kiemel{Certificate Verify} - Tanúsítvány ellenőrzése (CA) \item \kiemel{Key Exchange} - Szimmetrikus kulcs létrehozása \item \kiemel{Finished} - Titkosított kommunikáció kezdete \end{enumerate} \vspace{0.5cm} \begin{block}{SSL/TLS verziók} \begin{itemize} \item SSL 2.0/3.0 - \kiemel{Elavult, sebezhetőségek} \item TLS 1.0/1.1 - \kiemel{Elavult} (2020-tól) \item TLS 1.2 - Még használt, de \kiemelZ{TLS 1.3 ajánlott} \item TLS 1.3 - Legújabb, gyorsabb, biztonságosabb \end{itemize} \end{block} \end{frame} \begin{frame}{Összefoglalás} \begin{block}{HTTP/HTTPS alapok} \begin{itemize} \item HTTP: Request-Response, állapotmentes protokoll \item HTTPS: Titkosított HTTP (SSL/TLS) \item HTTP metódusok: GET, POST, PUT, PATCH, DELETE \item Státuszkódok: 1xx, 2xx, 3xx, 4xx, 5xx \item Headers: Metaadatok kérésben és válaszban \item REST API: 200, 201, 204, 400, 401, 403, 404, 500 \end{itemize} \end{block} \end{frame}