299 lines
12 KiB
TeX
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}
|