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