Files
GKNB_MSTM071/Backend_ppt/Alapok/https.tex
T
2026-01-27 19:27:14 +01:00

299 lines
12 KiB
TeX

\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 <token> # 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}