ABDURROZAK
ABDURROZAK.MY.ID // HTTP STATUS CODE REFERENCE

HTTP STATUS

REFERENSI LENGKAP HTTP STATUS CODE UNTUK MURID TKJ

1XX INFO
2XX SUCCESS
3XX REDIRECT
4XX CLIENT ERR
5XX SERVER ERR
QUIZ

HTTP STATUS CODE EXPLORER

MENAMPILKAN 0 STATUS CODE

QUICK LOOKUP

HTTP REQUEST SIMULATOR

CHEATSHEET STATUS CODE

HTTP STATUS CODE QUIZ

MATERI LENGKAP HTTP

APA ITU HTTP?

HTTP (HyperText Transfer Protocol) adalah protokol aplikasi yang menjadi fondasi komunikasi di World Wide Web. HTTP mendefinisikan bagaimana client (browser) dan server saling bertukar pesan.

HTTP bekerja dengan model request-response:

  1. Client mengirim HTTP Request ke server
  2. Server memproses dan mengirim HTTP Response kembali
  3. Response berisi status code, headers, dan body (opsional)
CLIENT (Browser)                SERVER
     |                              |
     |--- HTTP Request ----------->|
     |    GET /index.html          |
     |    Host: example.com        |
     |                              |
     |<-- HTTP Response -----------|
     |    HTTP/1.1 200 OK          |
     |    Content-Type: text/html  |
     |    <html>...</html>          |

Versi HTTP:

  • HTTP/1.0 (1996) - Versi awal, connection baru per request
  • HTTP/1.1 (1997) - Persistent connection, pipelining, paling banyak dipakai
  • HTTP/2 (2015) - Multiplexing, header compression, server push
  • HTTP/3 (2022) - Berbasis QUIC (UDP), lebih cepat, lebih aman

STRUKTUR HTTP REQUEST

GET /api/users HTTP/1.1
Host: api.example.com
User-Agent: Mozilla/5.0
Accept: application/json
Authorization: Bearer token123
Connection: keep-alive

[Body - optional]

Komponen Request:

  • Request Line: Method, URI, HTTP version
  • Headers: Metadata (Host, User-Agent, Accept, dll)
  • Body: Data yang dikirim (untuk POST, PUT, PATCH)

HTTP Methods

  • GET - Ambil resource (aman, idempotent)
  • POST - Buat resource baru
  • PUT - Update resource (full replacement)
  • PATCH - Update resource (partial)
  • DELETE - Hapus resource
  • HEAD - Seperti GET tapi tanpa body
  • OPTIONS - Lihat method yang didukung

STRUKTUR HTTP RESPONSE

HTTP/1.1 200 OK
Date: Mon, 01 Jan 2024 12:00:00 GMT
Server: Apache/2.4.41
Content-Type: application/json
Content-Length: 1234
Cache-Control: max-age=3600
Connection: keep-alive

{
  "id": 123,
  "name": "John Doe",
  "email": "john@example.com"
}

Komponen Response:

  • Status Line: HTTP version, status code, reason phrase
  • Headers: Metadata (Content-Type, Content-Length, Cache-Control, dll)
  • Body: Data yang dikirim (HTML, JSON, file, dll)

KATEGORI STATUS CODE

Status code adalah angka 3 digit yang menunjukkan hasil dari HTTP request. Digit pertama menunjukkan kategori:

1XX
INFORMATION
2XX
SUCCESS
3XX
REDIRECTION
4XX
CLIENT ERROR
5XX
SERVER ERROR

1XX - Informational (Informasi)

Request diterima, proses berlanjut. Jarang terlihat di browser modern.

2XX - Success (Sukses)

Request berhasil diterima, dipahami, dan diterima. Ini yang kita inginkan!

3XX - Redirection (Pengalihan)

Client harus mengambil tindakan tambahan untuk menyelesaikan request (biasanya redirect ke URL lain).

4XX - Client Error (Error Client)

Request mengandung syntax error atau tidak bisa dipenuhi. Masalah di sisi client.

5XX - Server Error (Error Server)

Server gagal memenuhi request yang valid. Masalah di sisi server.

STATUS CODE PALING UMUM

2XX 200 OK

Request berhasil. Response berisi data yang diminta. Status code paling umum.

2XX 201 Created

Resource baru berhasil dibuat. Biasanya response dari POST request.

2XX 204 No Content

Request berhasil tapi tidak ada content yang dikembalikan. Sering untuk DELETE.

3XX 301 Moved Permanently

Resource telah pindah permanen ke URL baru. Browser cache redirect ini.

3XX 302 Found (Temporary Redirect)

Resource sementara ada di URL lain. Browser tidak cache.

3XX 304 Not Modified

Resource belum berubah sejak request terakhir. Pakai cache lokal. Penting untuk performa!

4XX 400 Bad Request

Server tidak bisa proses request karena malformed syntax. Error di client.

4XX 401 Unauthorized

Authentication diperlukan. Client harus login dulu.

4XX 403 Forbidden

Client terautentikasi tapi tidak punya permission. Berbeda dengan 401.

4XX 404 Not Found

Resource tidak ditemukan di server. Error paling terkenal!

4XX 405 Method Not Allowed

HTTP method tidak didukung untuk resource ini.

4XX 429 Too Many Requests

Client mengirim terlalu banyak request (rate limiting).

5XX 500 Internal Server Error

Server error generic. Ada bug di server atau konfigurasi salah.

5XX 502 Bad Gateway

Server (sebagai gateway/proxy) dapat response invalid dari upstream server.

5XX 503 Service Unavailable

Server sedang down atau overload (maintenance).

5XX 504 Gateway Timeout

Gateway/proxy tidak dapat response tepat waktu dari upstream.

HTTP HEADERS PENTING

Request Headers

  • Host - Domain tujuan (wajib di HTTP/1.1)
  • User-Agent - Info browser/client
  • Accept - Tipe content yang bisa diterima client
  • Authorization - Kredensial autentikasi
  • Content-Type - Tipe data di body
  • Content-Length - Ukuran body dalam byte
  • Cookie - Cookie yang dikirim ke server
  • Referer - URL halaman sebelumnya

Response Headers

  • Content-Type - Tipe data yang dikembalikan
  • Content-Length - Ukuran body
  • Cache-Control - Instruksi caching (max-age, no-cache, dll)
  • Set-Cookie - Set cookie di client
  • Location - URL untuk redirect (3xx)
  • Server - Info software server
  • ETag - Identifier untuk validasi cache
  • Last-Modified - Waktu terakhir resource dimodifikasi

HTTPS & KEAMANAN

HTTPS = HTTP + TLS/SSL encryption. Data dienkripsi selama transit.

  • HTTP pakai port 80, HTTPS pakai port 443
  • HTTPS butuh SSL/TLS certificate dari Certificate Authority (CA)
  • Mencegah eavesdropping, tampering, dan man-in-the-middle attack
  • Wajib untuk website modern (Google Chrome mark HTTP sebagai "Not Secure")

Security Headers:

  • Strict-Transport-Security - Paksa pakai HTTPS
  • X-Content-Type-Options - Cegah MIME sniffing
  • X-Frame-Options - Cegah clickjacking
  • Content-Security-Policy - Kontrol resource yang bisa di-load

CACHING DI HTTP

Caching menyimpan copy resource untuk mempercepat request berikutnya.

Cache-Control Directives

  • max-age=3600 - Cache valid untuk 3600 detik (1 jam)
  • no-cache - Harus revalidate ke server setiap kali
  • no-store - Jangan cache sama sekali
  • public - Boleh di-cache oleh proxy dan browser
  • private - Hanya boleh di-cache oleh browser (bukan proxy)

Conditional Requests

Menghemat bandwidth dengan hanya download jika resource berubah:

  • Client kirim If-None-Match: [ETag] atau If-Modified-Since: [date]
  • Server cek, jika belum berubah kirim 304 Not Modified (tanpa body)
  • Jika berubah, kirim 200 OK dengan body baru

REST API & STATUS CODE

REST (Representational State Transfer) adalah arsitektur untuk web API. Status code penting di REST:

CRUD Operations

  • Create (POST) -> 201 Created
  • Read (GET) -> 200 OK atau 404 Not Found
  • Update (PUT/PATCH) -> 200 OK atau 204 No Content
  • Delete (DELETE) -> 200 OK atau 204 No Content

Error Handling di REST

  • 400 - Invalid input/data
  • 401 - Belum login
  • 403 - Tidak punya akses
  • 404 - Resource tidak ada
  • 409 - Conflict (duplicate)
  • 422 - Validation error
  • 500 - Server error

DEBUGGING HTTP

Browser Developer Tools

  • Chrome/Edge: F12 -> Network tab
  • Firefox: F12 -> Network tab
  • Lihat request, response, headers, timing, status code

Command Line Tools

# curl - lihat response lengkap
curl -v https://example.com

# curl - hanya headers
curl -I https://example.com

# wget - download file
wget https://example.com/file.zip

Online Tools

  • httpbin.org - Testing HTTP requests/responses
  • reqbin.com - Online REST API client
  • Postman - API testing tool (desktop & web)
  • httpstatus.io - Cek status code multiple URLs

TIPS PRAKTIS HTTP STATUS CODE

1. HAFALKAN STATUS CODE DASAR

Minimal hafal: 200, 201, 204, 301, 302, 304, 400, 401, 403, 404, 500, 502, 503. Ini 90% dari yang akan kamu temui sehari-hari. Quiz di tool ini bisa bantu!

2. PAKAI DEV TOOLS UNTUK DEBUG

Buka F12 di browser, tab Network. Lihat setiap request: status code, headers, timing. Ini cara terbaik belajar HTTP secara real. Filter by status code untuk cari error.

3. BEDAKAN 401 VS 403

401 Unauthorized = belum login (butuh autentikasi). 403 Forbidden = sudah login tapi tidak punya akses. Analogi: 401 = "Siapa kamu?", 403 = "Kamu tidak boleh masuk".

4. PAHAM BEDA 301 VS 302

301 = redirect permanen (browser cache, SEO transfer). 302 = redirect sementara (tidak cache). Untuk pindah domain permanen: pakai 301. Untuk maintenance page: pakai 302.

5. OPTIMASI DENGAN 304 NOT MODIFIED

304 menghemat bandwidth besar! Browser kirim ETag/If-Modified-Since, server jawab 304 tanpa body. Setup Cache-Control dan ETag headers untuk performa optimal.

6. LOG STATUS CODE DI SERVER

Monitor status code di access log (Apache/Nginx). Banyak 4xx = masalah client/SEO. Banyak 5xx = masalah server. Setup alert jika 5xx rate naik drastis.

7. CUSTOM ERROR PAGE

Buat custom 404 page yang menarik dan helpful. Tampilkan search box, sitemap links, atau contact info. Untuk 500/503, tampilkan maintenance page yang informatif.

8. PAKAI HTTPS SELALU

Jangan pernah pakai HTTP untuk production! Redirect semua HTTP ke HTTPS dengan 301. Pakai HSTS header. Gratis certificate dari Let's Encrypt.

9. HANDLE RATE LIMITING (429)

Jika dapat 429 Too Many Requests, tunggu dan retry dengan exponential backoff. Cek header Retry-After untuk tahu kapan bisa retry. Jangan spam request!

10. TEST API DENGAN HTTPBIN

httpbin.org adalah tool gratis untuk test HTTP. Bisa simulate semua status code, lihat headers, test method, dll. Bagus untuk belajar dan debugging API client.

11. MONITOR UPTIME DENGAN STATUS CODE

Setup monitoring (UptimeRobot, Pingdom) yang cek website setiap 1 menit. Alert jika dapat 5xx atau timeout. Track uptime percentage (target: 99.9%+).

12. BACA RFC UNTUK DETAIL

Untuk pemahaman mendalam, baca RFC 7231 (HTTP/1.1 semantics), RFC 7540 (HTTP/2), RFC 9114 (HTTP/3). Tapi untuk sehari-hari, tool ini sudah cukup!

PERTANYAAN YANG SERING DITANYAKAN

APA BEDANYA 401 UNAUTHORIZED DAN 403 FORBIDDEN?

401 Unauthorized = Client BELUM terautentikasi. Server bilang: "Siapa kamu? Login dulu."

403 Forbidden = Client SUDAH terautentikasi tapi TIDAK PUNYA AKSES. Server bilang: "Saya tahu kamu siapa, tapi kamu tidak boleh akses ini."

Analogi:

  • 401 = Datang ke club tapi belum tunjukkan KTP
  • 403 = Sudah tunjukkan KTP tapi tidak masuk guest list

Solusi:

  • 401: Kirim credentials (login, token API)
  • 403: Minta permission ke admin, atau cek role user
KENAPA 404 NOT FOUND SERING TERJADI?

Penyebab umum 404:

  • URL salah ketik (typo)
  • Halaman/resource sudah dihapus atau dipindah
  • Link broken di website lain (link rot)
  • File tidak ada di server
  • Rewrite rule salah konfigurasi

Solusi:

  • Cek URL dengan teliti
  • Cari halaman lewat sitemap atau search
  • Hubungi webmaster jika link dari website lain
  • Untuk webmaster: setup redirect 301 untuk halaman yang dipindah
APA BEDANYA 500, 502, 503, DAN 504?

Semua 5xx = server error, tapi beda penyebab:

  • 500 Internal Server Error - Error generic di server. Bug di code, konfigurasi salah, permission issue. Masalah di server aplikasi.
  • 502 Bad Gateway - Server (sebagai proxy/gateway) dapat response invalid dari upstream server. Biasanya masalah di reverse proxy (Nginx, HAProxy) ke backend.
  • 503 Service Unavailable - Server sedang down untuk maintenance atau overload. Biasanya temporary. Cek header Retry-After.
  • 504 Gateway Timeout - Gateway/proxy tidak dapat response tepat waktu dari upstream. Backend terlalu lambat atau down.

Analogi restoran:

  • 500 = Koki bikin kesalahan di dapur
  • 502 = Waiter dapat pesanan aneh dari dapur
  • 503 = Restoran tutup sementara
  • 504 = Dapur terlalu lama masak, waiter menyerah
APA ITU 301 VS 302 REDIRECT?

301 Moved Permanently:

  • Resource PINDAH PERMANEN ke URL baru
  • Browser CACHE redirect ini
  • Search engine transfer SEO value (link juice)
  • Pakai untuk: pindah domain, ganti URL permanen, HTTP -> HTTPS

302 Found (Temporary Redirect):

  • Resource SEMENTARA ada di URL lain
  • Browser TIDAK cache redirect
  • Search engine tetap index URL asli
  • Pakai untuk: maintenance page, A/B testing, temporary redirect

Kapan pakai yang mana?

  • Pindah domain permanen -> 301
  • Maintenance page sementara -> 302
  • HTTP ke HTTPS -> 301
  • Geolocation redirect -> 302
BAGAIMANA CARA DEBUG HTTP ERROR?

Langkah debugging:

  1. Buka Dev Tools (F12) -> tab Network
  2. Reproduce error - lakukan aksi yang menyebabkan error
  3. Cek request: URL, method, headers, body
  4. Cek response: status code, headers, body (pesan error)
  5. Cek console - lihat JavaScript error jika ada
  6. Test manual dengan curl atau Postman

Tools berguna:

  • curl: curl -v https://example.com
  • Postman: GUI untuk test API
  • httpbin.org: Test endpoint untuk berbagai scenario
  • httpstatus.io: Cek multiple URLs sekaligus

Tips: Baca pesan error di response body - biasanya server kasih info detail kenapa error terjadi.

APA ITU 304 NOT MODIFIED DAN KENAPA PENTING?

304 Not Modified = Resource belum berubah sejak request terakhir. Server tidak kirim body, client pakai cache lokal.

Cara kerja:

  1. Request pertama: server kirim resource + ETag header (fingerprint)
  2. Request berikutnya: client kirim If-None-Match: [ETag]
  3. Server cek: jika ETag sama (belum berubah), kirim 304
  4. Client pakai cache lokal - hemat bandwidth!

Kenapa penting?

  • Hemat bandwidth besar (tidak download ulang)
  • Load page lebih cepat
  • Kurangi load server
  • Penting untuk performa website
  • Setup: Konfigurasi ETag dan Cache-Control di server (Apache/Nginx). Browser modern otomatis handle ini.

APA ITU 429 TOO MANY REQUESTS?

429 Too Many Requests = Client mengirim terlalu banyak request dalam waktu singkat. Server apply rate limiting.

Penyebab:

  • Spam request ke API
  • Bot/crawler terlalu agresif
  • Brute force attack
  • Bug di client (loop request)

Solusi:

  • Cek header Retry-After - bilang berapa detik harus tunggu
  • Implementasi exponential backoff di client
  • Kurangi frekuensi request
  • Pakai API key dengan quota lebih tinggi

Contoh backoff:

Request 1 gagal -> tunggu 1 detik
Request 2 gagal -> tunggu 2 detik
Request 3 gagal -> tunggu 4 detik
Request 4 gagal -> tunggu 8 detik
... (exponential)
BAGAIMANA CARA HANDLE REDIRECT DI CODE?

Di browser: Otomatis follow redirect (301, 302, 307, 308). Tidak perlu handle manual.

Di code (fetch/axios):

// Fetch - otomatis follow redirect
fetch('https://example.com')
  .then(res => {
    console.log(res.status); // 200 (setelah redirect)
    console.log(res.redirected); // true
    console.log(res.url); // URL final
  });

// Fetch - manual handle redirect
fetch('https://example.com', { redirect: 'manual' })
  .then(res => {
    if (res.status === 301 || res.status === 302) {
      const newUrl = res.headers.get('Location');
      // handle redirect manually
    }
  });

// Axios - otomatis follow
axios.get('https://example.com')
  .then(res => {
    console.log(res.status); // 200
    console.log(res.request._redirectable._currentUrl); // URL final
  });

Tips: Hati-hati redirect loop (A -> B -> A -> B ...). Browser akan stop setelah ~20 redirect.

APA ITU IDEMPOTENT METHOD?

Idempotent = melakukan request yang sama beberapa kali menghasilkan efek yang sama seperti melakukan sekali.

Method idempotent:

  • GET - Ambil data, tidak ubah apapun
  • PUT - Update data, hasil sama berapa kali pun dipanggil
  • DELETE - Hapus data, hapus 1x atau 10x hasilnya sama (data hilang)
  • HEAD - Seperti GET tapi tanpa body
  • OPTIONS - Lihat method yang didukung

Method TIDAK idempotent:

  • POST - Buat resource baru, setiap call bisa buat resource berbeda
  • PATCH - Update partial, bisa ada side effect

Kenapa penting?

  • Idempotent method aman untuk retry jika network error
  • Browser bisa retry idempotent request otomatis
  • Non-idempotent perlu hati-hati dengan retry (bisa duplicate data)
BAGAIMANA CARA TEST STATUS CODE DI WEBSITE SAYA?

Tools online:

  • httpstatus.io - Cek multiple URLs sekaligus, lihat status code
  • httpstatuses.com - Database lengkap status code
  • httpbin.org - Test endpoint untuk simulate berbagai status
  • redirect-checker.org - Cek redirect chain

Command line:

# Cek status code
curl -I https://example.com

# Cek redirect chain
curl -IL https://example.com

# Cek multiple URLs
for url in url1 url2 url3; do
  echo "$url: $(curl -s -o /dev/null -w '%{http_code}' $url)"
done

Browser DevTools:

  • F12 -> Network tab
  • Reload page
  • Lihat status code setiap request
  • Filter by status code (4xx, 5xx)

Monitoring:

  • UptimeRobot - monitor uptime & status code
  • Pingdom - performance monitoring
  • GTmetrix - performance + waterfall
APA BEDANYA HTTP/1.1, HTTP/2, DAN HTTP/3?

HTTP/1.1 (1997)

  • Text-based protocol
  • Persistent connection
  • Pipelining (terbatas)
  • Header tidak di-compress
  • 1 request per connection (head-of-line blocking)

HTTP/2 (2015)

  • Binary protocol
  • Multiplexing (banyak request per connection)
  • Header compression (HPACK)
  • Server push
  • Priority & dependency

HTTP/3 (2022)

  • Basis QUIC (UDP)
  • No head-of-line blocking
  • Faster connection setup
  • Built-in encryption
  • Better mobile performance

Impact ke status code: Status code sama di semua versi HTTP. Yang berubah adalah cara transport data, bukan semantics.

Cek versi HTTP:

curl -I https://example.com
# Lihat header: alt-svc: h3=":443"; ma=86400 (support HTTP/3)
BAGAIMANA CARA SETUP CUSTOM ERROR PAGE?

Apache (.htaccess):

ErrorDocument 404 /custom-404.html
ErrorDocument 500 /custom-500.html
ErrorDocument 403 /custom-403.html

Nginx:

error_page 404 /custom-404.html;
error_page 500 502 503 504 /custom-500.html;

location = /custom-404.html {
    internal;
}

Tips custom error page:

  • 404 page: Tampilkan search box, sitemap links, contact info. Buat menarik dan helpful.
  • 500/503 page: Info maintenance, estimasi waktu selesai, contact support.
  • 403 page: Jelaskan kenapa akses ditolak, cara minta akses.
  • Jangan tampilkan stack trace atau technical detail ke user.
  • Pastikan error page sendiri tidak error (test dengan curl).
RIWAYAT AKTIVITAS

BELUM ADA RIWAYAT

ABDURROZAK.MY.ID // JARINGAN SOSIAL