HTTP and HTTPS

HTTP and HTTPS

Overview

HTTP (HyperText Transfer Protocol) is an application layer protocol for exchanging data between clients and servers on the web. HTTPS is a protocol that enhances security by adding TLS/SSL encryption to HTTP.

Difficulty: ⭐⭐⭐

Learning Objectives: - Understand HTTP request/response structure - Master HTTP methods and status codes - Identify differences between HTTP versions - Understand HTTPS and TLS/SSL operation principles


Table of Contents

  1. HTTP Basics
  2. HTTP Methods
  3. HTTP Status Codes
  4. HTTP Headers
  5. HTTP Version Comparison
  6. HTTPS and TLS/SSL
  7. Certificates
  8. Practice Problems
  9. Next Steps
  10. References

1. HTTP Basics

HTTP Communication Structure

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Client     β”‚                              β”‚    Server    β”‚
β”‚  (Browser)   β”‚                              β”‚ (Web Server) β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€                              β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚              β”‚  ──── HTTP Request ────────▢ β”‚              β”‚
β”‚   GET /index β”‚  (Method, URL, Headers, Body)β”‚   Nginx      β”‚
β”‚              β”‚                              β”‚   Apache     β”‚
β”‚              β”‚  ◀──── HTTP Response ──────  β”‚              β”‚
β”‚   HTML Page  β”‚  (Status Code, Headers, Body)β”‚              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
        β”‚                                            β”‚
        β”‚        TCP Connection (Default Port 80)    β”‚
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

HTTP Characteristics

Characteristic Description
Connectionless Connection closes after request-response (HTTP/1.0)
Stateless Each request is independent, no previous state stored
Text-based Human-readable format
Request-Response Client requests, server responds

HTTP Request Structure

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Request Line                                            β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ GET /api/users HTTP/1.1                                 β”‚
β”‚ β””β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”˜                                β”‚
β”‚ Method  URI    Version                                  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Headers                                                 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Host: api.example.com                                   β”‚
β”‚ User-Agent: Mozilla/5.0                                 β”‚
β”‚ Accept: application/json                                β”‚
β”‚ Content-Type: application/json                          β”‚
β”‚ Authorization: Bearer eyJhbGciOiJ...                    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Blank Line (CRLF)                                       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Body (Optional)                                         β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ {"name": "John", "email": "john@example.com"}           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

HTTP Response Structure

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Status Line                                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ HTTP/1.1 200 OK                                         β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”˜ β””β”˜                                        β”‚
β”‚  Version  Status Reason                                 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Headers                                                 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Content-Type: application/json                          β”‚
β”‚ Content-Length: 128                                     β”‚
β”‚ Date: Mon, 27 Jan 2026 10:30:00 GMT                     β”‚
β”‚ Server: nginx/1.24.0                                    β”‚
β”‚ Cache-Control: no-cache                                 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Blank Line (CRLF)                                       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Body                                                    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ {"id": 1, "name": "John", "status": "active"}           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Checking HTTP Requests with curl

# Basic GET request
curl http://example.com

# Output with headers
curl -i http://example.com

# Verbose request/response details
curl -v http://example.com

# Headers only
curl -I http://example.com

# JSON POST request
curl -X POST http://api.example.com/users \
  -H "Content-Type: application/json" \
  -d '{"name": "John"}'

2. HTTP Methods

Main HTTP Methods

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Method   β”‚                Description                    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚    GET     β”‚ Retrieve resource (read)                      β”‚
β”‚    POST    β”‚ Create resource (write)                       β”‚
β”‚    PUT     β”‚ Replace entire resource                       β”‚
β”‚   PATCH    β”‚ Partially modify resource                     β”‚
β”‚   DELETE   β”‚ Delete resource                               β”‚
β”‚    HEAD    β”‚ Retrieve headers only (no body)               β”‚
β”‚  OPTIONS   β”‚ Check supported methods                       β”‚
β”‚   TRACE    β”‚ Loopback test (debugging)                     β”‚
β”‚  CONNECT   β”‚ Establish proxy tunnel                        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Method Properties

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Method   β”‚   Safety   β”‚ Idempotency  β”‚  Cacheable   β”‚
β”‚            β”‚  (Safe)    β”‚ (Idempotent) β”‚ (Cacheable)  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚    GET     β”‚     O      β”‚      O       β”‚      O       β”‚
β”‚    HEAD    β”‚     O      β”‚      O       β”‚      O       β”‚
β”‚   OPTIONS  β”‚     O      β”‚      O       β”‚      X       β”‚
β”‚    POST    β”‚     X      β”‚      X       β”‚  Conditional β”‚
β”‚    PUT     β”‚     X      β”‚      O       β”‚      X       β”‚
β”‚   DELETE   β”‚     X      β”‚      O       β”‚      X       β”‚
β”‚   PATCH    β”‚     X      β”‚      X       β”‚      X       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

* Safety: Does not change server state
* Idempotency: Multiple executions produce same result
* Cacheable: Response can be cached

GET vs POST Comparison

Characteristic GET POST
Purpose Data retrieval Data transmission/creation
Data Location URL query string Request body
Data Size URL length limit (~2KB) No limit
Caching Possible Not by default
Security Exposed in URL Relatively safe
Bookmarkable Yes No

Method Usage in RESTful APIs

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                   RESTful API Examples                           β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Operation    β”‚ Method  β”‚ Endpoint          β”‚ Description       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  List all     β”‚ GET     β”‚ /api/users        β”‚ Retrieve all usersβ”‚
β”‚  Get one      β”‚ GET     β”‚ /api/users/1      β”‚ Retrieve user ID=1β”‚
β”‚  Create       β”‚ POST    β”‚ /api/users        β”‚ Create new user   β”‚
β”‚  Full update  β”‚ PUT     β”‚ /api/users/1      β”‚ Full user update  β”‚
β”‚  Partial      β”‚ PATCH   β”‚ /api/users/1      β”‚ Partial update    β”‚
β”‚  Delete       β”‚ DELETE  β”‚ /api/users/1      β”‚ Delete user       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Method Examples

# GET - Retrieve resource
curl -X GET "http://api.example.com/users?page=1&limit=10"

# POST - Create resource
curl -X POST http://api.example.com/users \
  -H "Content-Type: application/json" \
  -d '{
    "name": "John Doe",
    "email": "john@example.com"
  }'

# PUT - Full update
curl -X PUT http://api.example.com/users/1 \
  -H "Content-Type: application/json" \
  -d '{
    "name": "John Doe",
    "email": "john.new@example.com",
    "status": "active"
  }'

# PATCH - Partial update
curl -X PATCH http://api.example.com/users/1 \
  -H "Content-Type: application/json" \
  -d '{"status": "inactive"}'

# DELETE - Delete
curl -X DELETE http://api.example.com/users/1

# HEAD - Headers only
curl -I http://api.example.com/users/1

# OPTIONS - Check supported methods
curl -X OPTIONS http://api.example.com/users

3. HTTP Status Codes

Status Code Categories

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                 HTTP Status Code Categories                      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Category β”‚ Range     β”‚ Meaning                                  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  1xx     β”‚ 100-199  β”‚ Informational - Processing                β”‚
β”‚  2xx     β”‚ 200-299  β”‚ Success - Request succeeded               β”‚
β”‚  3xx     β”‚ 300-399  β”‚ Redirection - Further action needed       β”‚
β”‚  4xx     β”‚ 400-499  β”‚ Client Error                              β”‚
β”‚  5xx     β”‚ 500-599  β”‚ Server Error                              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

1xx - Informational Responses

Code Name Description
100 Continue Request can continue
101 Switching Protocols Protocol switch (WebSocket, etc.)
102 Processing Processing (WebDAV)

2xx - Success Responses

Code Name Description Use Case
200 OK Request successful GET success
201 Created Resource created POST success
202 Accepted Request accepted (async processing) Async task
204 No Content Success, no response body DELETE success
206 Partial Content Partial content Range request

3xx - Redirection

Code Name Description Cached
301 Moved Permanently Permanent move Cached
302 Found Temporary move Not cached
303 See Other Different location (change to GET) Not cached
304 Not Modified No change (use cache) -
307 Temporary Redirect Temporary move (keep method) Not cached
308 Permanent Redirect Permanent move (keep method) Cached

4xx - Client Errors

Code Name Description
400 Bad Request Malformed request (syntax error)
401 Unauthorized Authentication required
403 Forbidden Access denied (no permission)
404 Not Found Resource not found
405 Method Not Allowed Method not allowed
408 Request Timeout Request timeout
409 Conflict Conflict (concurrent modification)
413 Payload Too Large Request body too large
414 URI Too Long URI too long
415 Unsupported Media Type Unsupported media type
422 Unprocessable Entity Unprocessable entity
429 Too Many Requests Rate limit exceeded

5xx - Server Errors

Code Name Description
500 Internal Server Error Server internal error
501 Not Implemented Not implemented
502 Bad Gateway Gateway error
503 Service Unavailable Service unavailable
504 Gateway Timeout Gateway timeout

Status Code Flow

                        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                        β”‚ HTTP Requestβ”‚
                        β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
                               β”‚
                        β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”
                        β”‚  Validation β”‚
                        β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
                               β”‚
           β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
           β”‚                   β”‚                   β”‚
    β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”
    β”‚ Syntax Error β”‚     β”‚ Auth Check  β”‚     β”‚ Permission  β”‚
    β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
           β”‚                   β”‚                   β”‚
    β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”
    β”‚    400      β”‚     β”‚    401      β”‚     β”‚    403      β”‚
    β”‚ Bad Request β”‚     β”‚Unauthorized β”‚     β”‚  Forbidden  β”‚
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

                        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                        β”‚ Find Resourceβ”‚
                        β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
                               β”‚
                 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                 β”‚             β”‚             β”‚
          β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β–Όβ”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”
          β”‚  Not Found  β”‚  β”‚Successβ”‚  β”‚Server Error β”‚
          β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”¬β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
                 β”‚             β”‚             β”‚
          β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β–Όβ”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”
          β”‚    404      β”‚  β”‚  200  β”‚  β”‚    500      β”‚
          β”‚  Not Found  β”‚  β”‚  OK   β”‚  β”‚   Internal  β”‚
          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

4. HTTP Headers

Header Categories

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                   HTTP Header Categories                         β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Category          β”‚ Description                                 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  General Headers   β”‚ Used in both requests/responses             β”‚
β”‚  Request Headers   β”‚ Client information (Host, User-Agent, etc.) β”‚
β”‚  Response Headers  β”‚ Server information (Server, Set-Cookie, etc)β”‚
β”‚  Entity Headers    β”‚ Body information (Content-Type, Length, etc)β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Main Request Headers

Header Description Example
Host Request host Host: api.example.com
User-Agent Client information User-Agent: Mozilla/5.0
Accept Desired response type Accept: application/json
Accept-Language Preferred language Accept-Language: en-US,en;q=0.9
Accept-Encoding Supported encoding Accept-Encoding: gzip, deflate
Authorization Authentication info Authorization: Bearer token123
Cookie Send cookies Cookie: session_id=abc123
Content-Type Request body type Content-Type: application/json
Content-Length Request body size Content-Length: 256
Referer Previous page URL Referer: https://google.com
Origin Request origin Origin: https://example.com

Main Response Headers

Header Description Example
Content-Type Response body type Content-Type: text/html; charset=utf-8
Content-Length Response body size Content-Length: 1024
Content-Encoding Compression method Content-Encoding: gzip
Cache-Control Cache control Cache-Control: max-age=3600
Expires Expiration time Expires: Wed, 27 Jan 2027 10:00:00 GMT
ETag Resource version identifier ETag: "abc123"
Last-Modified Last modified time Last-Modified: Mon, 01 Jan 2026 00:00:00 GMT
Set-Cookie Set cookie Set-Cookie: id=abc; HttpOnly; Secure
Location Redirect location Location: https://example.com/new
Server Server information Server: nginx/1.24.0
Header Description
Strict-Transport-Security (HSTS) Force HTTPS
X-Content-Type-Options Prevent MIME sniffing
X-Frame-Options Prevent clickjacking
X-XSS-Protection Enable XSS filter
Content-Security-Policy (CSP) Content security policy
Access-Control-Allow-Origin CORS allowed origins
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                      HTTP Caching Flow                           β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  [Client]                              [Server]                 β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │──── GET /image.png ────────────────▢  β”‚                 β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │◀─── 200 OK ──────────────────────────│                 β”‚
β”‚      β”‚     Cache-Control: max-age=3600       β”‚                 β”‚
β”‚      β”‚     ETag: "abc123"                    β”‚                 β”‚
β”‚      β”‚     Last-Modified: Mon, 01 Jan...     β”‚                 β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚  [Cache Stored]                               β”‚                 β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │──── GET /image.png ────────────────▢  β”‚                 β”‚
β”‚      β”‚     If-None-Match: "abc123"           β”‚                 β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │◀─── 304 Not Modified ────────────────│                 β”‚
β”‚      β”‚     (No body, use cache)              β”‚                 β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Cache-Control Directives

Directive Description
no-store Prohibit cache storage
no-cache Validation required before cache use
max-age=N Valid for N seconds
s-maxage=N Valid for N seconds in shared cache
private Private cache only
public Shared cache allowed
must-revalidate Must revalidate after expiration

5. HTTP Version Comparison

HTTP Version Evolution

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                 HTTP Version Evolution                           β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  HTTP/0.9 (1991)                                                β”‚
β”‚  └── GET only, no headers                                       β”‚
β”‚       β”‚                                                         β”‚
β”‚       β–Ό                                                         β”‚
β”‚  HTTP/1.0 (1996)                                                β”‚
β”‚  └── Headers added, status codes, POST/HEAD                     β”‚
β”‚       β”‚                                                         β”‚
β”‚       β–Ό                                                         β”‚
β”‚  HTTP/1.1 (1997)                                                β”‚
β”‚  └── Persistent connections, pipelining, Host header required   β”‚
β”‚       β”‚                                                         β”‚
β”‚       β–Ό                                                         β”‚
β”‚  HTTP/2 (2015)                                                  β”‚
β”‚  └── Binary protocol, multiplexing, header compression          β”‚
β”‚       β”‚                                                         β”‚
β”‚       β–Ό                                                         β”‚
β”‚  HTTP/3 (2022)                                                  β”‚
β”‚  └── QUIC (UDP-based), improved connection setup                β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

HTTP/1.1 vs HTTP/2 vs HTTP/3

Feature HTTP/1.1 HTTP/2 HTTP/3
Protocol Text Binary Binary
Transport Layer TCP TCP QUIC (UDP)
Multiplexing X O O
Header Compression X HPACK QPACK
Server Push X O O
Requests per Connection Sequential Concurrent multiple Concurrent multiple
HOL Blocking Present Present at TCP level None

HTTP/1.1 Connection Methods

HTTP/1.0 (Non-persistent)    HTTP/1.1 (Persistent)

Request 1 ──────▢              Request 1 ──────▢
      ◀────── Response 1             ◀────── Response 1
[Connection closed]             Request 2 ──────▢
Request 2 ──────▢                    ◀────── Response 2
      ◀────── Response 2       Request 3 ──────▢
[Connection closed]                    ◀────── Response 3
Request 3 ──────▢              [Connection maintained then closed]
      ◀────── Response 3
[Connection closed]

β€» 3 TCP connections            β€» 1 TCP connection

HTTP/2 Multiplexing

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                      HTTP/2 Multiplexing                         β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  HTTP/1.1 (Sequential)     β”‚  HTTP/2 (Concurrent)               β”‚
β”‚                           β”‚                                     β”‚
β”‚  Request1 ──────────────▢ β”‚  Request1 ────▢                    β”‚
β”‚  Response1 ◀────────────  β”‚  Request2 ────▢ (simultaneous)     β”‚
β”‚  Request2 ──────────────▢ β”‚  Request3 ────▢ (simultaneous)     β”‚
β”‚  Response2 ◀────────────  β”‚  Response2 ◀───                    β”‚
β”‚  Request3 ──────────────▢ β”‚  Response1 ◀───                    β”‚
β”‚  Response3 ◀────────────  β”‚  Response3 ◀───                    β”‚
β”‚                           β”‚                                     β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€                   β”‚
β”‚       Long time            β”‚     Short time                      β”‚
β”‚                           β”‚                                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

HTTP/3 and QUIC

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    HTTP/3 (QUIC-based)                           β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                           β”‚
β”‚  β”‚  HTTP/2     β”‚      β”‚  HTTP/3     β”‚                           β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€      β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€                           β”‚
β”‚  β”‚    TLS      β”‚      β”‚    QUIC     │◀─ TLS 1.3 built-in        β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€      β”‚ (encryption)β”‚                           β”‚
β”‚  β”‚    TCP      β”‚      β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€                           β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€      β”‚    UDP      β”‚                           β”‚
β”‚  β”‚    IP       β”‚      β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€                           β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β”‚    IP       β”‚                           β”‚
β”‚                       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                           β”‚
β”‚                                                                 β”‚
β”‚  QUIC Advantages:                                               β”‚
β”‚  - 0-RTT connection (when reconnecting)                         β”‚
β”‚  - Packet loss doesn't affect other streams                     β”‚
β”‚  - Connection migration (connection maintained on IP change)    β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

6. HTTPS and TLS/SSL

HTTPS Overview

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    HTTP vs HTTPS                                 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  HTTP (Port 80)           β”‚  HTTPS (Port 443)                   β”‚
β”‚                           β”‚                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”          β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                    β”‚
β”‚  β”‚    HTTP     β”‚          β”‚  β”‚    HTTP     β”‚                    β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€          β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€                    β”‚
β”‚  β”‚    TCP      β”‚          β”‚  β”‚  TLS/SSL    │◀─ Encryption layer β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€          β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€                    β”‚
β”‚  β”‚    IP       β”‚          β”‚  β”‚    TCP      β”‚                    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜          β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€                    β”‚
β”‚                           β”‚  β”‚    IP       β”‚                    β”‚
β”‚  Plaintext transmission   β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                    β”‚
β”‚  Data exposure risk       β”‚                                     β”‚
β”‚                           β”‚  Encrypted transmission             β”‚
β”‚                           β”‚  Data protection                    β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

TLS/SSL History

Version Year Status
SSL 2.0 1995 Deprecated (security vulnerabilities)
SSL 3.0 1996 Deprecated (POODLE vulnerability)
TLS 1.0 1999 Deprecation recommended
TLS 1.1 2006 Deprecation recommended
TLS 1.2 2008 In use
TLS 1.3 2018 Recommended (current latest)

TLS Handshake (TLS 1.2)

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                  TLS 1.2 Handshake                               β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  [Client]                              [Server]                 β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │──(1) ClientHello ─────────────────▢  β”‚                 β”‚
β”‚      β”‚    - Supported TLS version            β”‚                 β”‚
β”‚      β”‚    - Supported cipher suites          β”‚                 β”‚
β”‚      β”‚    - Client random                    β”‚                 β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │◀─(2) ServerHello ─────────────────── β”‚                 β”‚
β”‚      β”‚    - Selected TLS version             β”‚                 β”‚
β”‚      β”‚    - Selected cipher suite            β”‚                 β”‚
β”‚      β”‚    - Server random                    β”‚                 β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │◀─(3) Certificate ─────────────────── β”‚                 β”‚
β”‚      β”‚    - Server certificate (public key)  β”‚                 β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │◀─(4) ServerHelloDone ──────────────  β”‚                 β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │──(5) ClientKeyExchange ───────────▢  β”‚                 β”‚
β”‚      β”‚    - Pre-Master Secret (encrypted)    β”‚                 β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │──(6) ChangeCipherSpec ────────────▢  β”‚                 β”‚
β”‚      │──(7) Finished ────────────────────▢  β”‚                 β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │◀─(8) ChangeCipherSpec ───────────────│                 β”‚
β”‚      │◀─(9) Finished ───────────────────────│                 β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │◀════════ Encrypted Communication ═══▢│                 β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

TLS 1.3 Handshake (Simplified)

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚               TLS 1.3 Handshake (1-RTT)                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  [Client]                              [Server]                 β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │──(1) ClientHello + KeyShare ──────▢  β”‚                 β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │◀─(2) ServerHello + KeyShare ─────────│                 β”‚
β”‚      β”‚      Certificate                      β”‚                 β”‚
β”‚      β”‚      Finished                         β”‚                 β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │──(3) Finished ────────────────────▢  β”‚                 β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │◀════════ Encrypted Communication ═══▢│                 β”‚
β”‚                                                                 β”‚
β”‚  β€» Handshake complete in just 1 RTT (round trip)               β”‚
β”‚  β€» 0-RTT: Can send data from first request when resuming       β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Encryption Types

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                      Encryption Methods                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  Symmetric Encryption                                           β”‚
β”‚  ─────────────────────                                          β”‚
β”‚  - Encrypt/decrypt with same key                                β”‚
β”‚  - Fast speed                                                   β”‚
β”‚  - Examples: AES, ChaCha20                                      β”‚
β”‚                                                                 β”‚
β”‚      Plaintext ──[Key]──▢ Ciphertext ──[Key]──▢ Plaintext      β”‚
β”‚                                                                 β”‚
β”‚  Asymmetric Encryption                                          β”‚
β”‚  ──────────────────────                                         β”‚
β”‚  - Uses public/private key pair                                 β”‚
β”‚  - Slow speed, used for key exchange                            β”‚
β”‚  - Examples: RSA, ECDSA                                         β”‚
β”‚                                                                 β”‚
β”‚      Plaintext ──[Public Key]──▢ Ciphertext ──[Private Key]──▢ Plaintextβ”‚
β”‚                                                                 β”‚
β”‚  Usage in TLS                                                   β”‚
β”‚  ─────────────                                                  β”‚
β”‚  1. Asymmetric key for session key exchange                     β”‚
β”‚  2. Symmetric key (session key) for actual data encryption      β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

7. Certificates

Certificate Structure

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    X.509 Certificate Structure                   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚  Version: V3                                             β”‚   β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚
β”‚  β”‚  Serial Number: 0x1234...                                β”‚   β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚
β”‚  β”‚  Signature Algorithm: SHA256withRSA                      β”‚   β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚
β”‚  β”‚  Issuer: CN=Let's Encrypt Authority X3                  β”‚   β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚
β”‚  β”‚  Validity                                                β”‚   β”‚
β”‚  β”‚    Not Before: 2026-01-01 00:00:00                       β”‚   β”‚
β”‚  β”‚    Not After:  2026-04-01 00:00:00                       β”‚   β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚
β”‚  β”‚  Subject: CN=www.example.com                             β”‚   β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚
β”‚  β”‚  Public Key Info                                         β”‚   β”‚
β”‚  β”‚    Algorithm: RSA                                        β”‚   β”‚
β”‚  β”‚    Key Size: 2048 bits                                   β”‚   β”‚
β”‚  β”‚    Public Key: 30 82 01 0a 02 82 01 01 00...            β”‚   β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚
β”‚  β”‚  Extensions                                              β”‚   β”‚
β”‚  β”‚    Subject Alternative Names: www.example.com,           β”‚   β”‚
β”‚  β”‚                               example.com                β”‚   β”‚
β”‚  β”‚    Key Usage: Digital Signature, Key Encipherment        β”‚   β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚
β”‚  β”‚  Signature: 48 46 2b 88 2d...                            β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Certificate Chain

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Certificate Chain (Chain of Trust)            β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚              Root Certificate (Root CA)                  β”‚   β”‚
β”‚  β”‚         - Self-signed                                    β”‚   β”‚
β”‚  β”‚         - Built into browser/OS                          β”‚   β”‚
β”‚  β”‚         - Examples: DigiCert, GlobalSign                 β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                           β”‚ Signs                               β”‚
β”‚                           β–Ό                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚           Intermediate Certificate (Intermediate CA)     β”‚   β”‚
β”‚  β”‚         - Signed by Root CA                              β”‚   β”‚
β”‚  β”‚         - Example: Let's Encrypt R3                      β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                           β”‚ Signs                               β”‚
β”‚                           β–Ό                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚             Server Certificate (End-Entity)              β”‚   β”‚
β”‚  β”‚         - Signed by Intermediate CA                      β”‚   β”‚
β”‚  β”‚         - Domain: www.example.com                        β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                 β”‚
β”‚  Validation order: Server cert β†’ Intermediate cert β†’ Root cert β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Certificate Types

Type Validation Level Issuance Time Use Case
DV (Domain Validation) Domain ownership only Minutes Personal, blogs
OV (Organization Validation) Organization verification 1-3 days Companies, institutions
EV (Extended Validation) Strict verification 1-2 weeks Financial, large corporations
Wildcard Includes subdomains Varies *.example.com
Multi-Domain (SAN) Multiple domains Varies Multiple domains

Certificate Issuance Process (Let's Encrypt)

# Install Certbot (Ubuntu)
sudo apt install certbot python3-certbot-nginx

# Issue certificate (Nginx)
sudo certbot --nginx -d example.com -d www.example.com

# Issue certificate (Apache)
sudo certbot --apache -d example.com

# Renew certificate
sudo certbot renew

# Check certificate
sudo certbot certificates

# Auto-renewal (cron)
0 12 * * * /usr/bin/certbot renew --quiet

Certificate Verification Commands

# Check domain certificate
openssl s_client -connect example.com:443 -servername example.com

# Certificate details
echo | openssl s_client -connect example.com:443 2>/dev/null | \
  openssl x509 -noout -text

# Check expiration date
echo | openssl s_client -connect example.com:443 2>/dev/null | \
  openssl x509 -noout -enddate

# Check local certificate file
openssl x509 -in certificate.crt -text -noout

8. Practice Problems

Basic Problems

  1. HTTP Methods
  2. Explain 3 differences between GET and POST.
  3. What is idempotency, and list all idempotent methods.

  4. Status Codes

  5. Choose appropriate status codes for these situations:

    • User login failure (authentication failure)
    • Page not found
    • Internal server error occurs
    • Resource created successfully via POST request
  6. Headers

  7. What's the difference between Cache-Control: no-cache and no-store?
  8. What is the purpose of the ETag header?

Intermediate Problems

  1. HTTP Versions
  2. Explain HTTP/1.1's HOL (Head-of-Line) Blocking problem.
  3. How does HTTP/2 solve this problem?

  4. HTTPS/TLS

  5. What are 3 security benefits of using HTTPS?
  6. What is the handshake RTT difference between TLS 1.2 and TLS 1.3?

  7. Practical Problems

# Analyze the results of the following curl commands

# 1. What is included in the request headers?
curl -v http://example.com

# 2. What status code do you receive if this request succeeds?
curl -I -X DELETE http://api.example.com/users/1

# 3. What is the Content-Type in this request?
curl -X POST http://api.example.com/users \
  -H "Content-Type: application/json" \
  -d '{"name": "test"}'

Advanced Problems

  1. Certificate Chain
  2. Why doesn't the root CA sign server certificates directly, using intermediate CAs instead?

  3. Security Headers

  4. Suggest HTTP headers to prevent these security vulnerabilities:
    • Clickjacking
    • XSS (Cross-Site Scripting)
    • MIME sniffing

9. Next Steps

In 14_Other_Application_Protocols.md, let's learn about other application layer protocols such as DHCP, FTP, SMTP, and SSH!


10. References

RFC Documents

Online Resources

Tools

  • curl - Command-line HTTP client
  • Postman - API testing tool
  • Charles Proxy - HTTP proxy/monitoring
  • Wireshark - Packet analysis
to navigate between lessons