REFERENSI LENGKAP HTTP STATUS CODE UNTUK MURID TKJ
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:
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:
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:
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 code adalah angka 3 digit yang menunjukkan hasil dari HTTP request. Digit pertama menunjukkan kategori:
Request diterima, proses berlanjut. Jarang terlihat di browser modern.
Request berhasil diterima, dipahami, dan diterima. Ini yang kita inginkan!
Client harus mengambil tindakan tambahan untuk menyelesaikan request (biasanya redirect ke URL lain).
Request mengandung syntax error atau tidak bisa dipenuhi. Masalah di sisi client.
Server gagal memenuhi request yang valid. Masalah di sisi server.
Request berhasil. Response berisi data yang diminta. Status code paling umum.
Resource baru berhasil dibuat. Biasanya response dari POST request.
Request berhasil tapi tidak ada content yang dikembalikan. Sering untuk DELETE.
Resource telah pindah permanen ke URL baru. Browser cache redirect ini.
Resource sementara ada di URL lain. Browser tidak cache.
Resource belum berubah sejak request terakhir. Pakai cache lokal. Penting untuk performa!
Server tidak bisa proses request karena malformed syntax. Error di client.
Authentication diperlukan. Client harus login dulu.
Client terautentikasi tapi tidak punya permission. Berbeda dengan 401.
Resource tidak ditemukan di server. Error paling terkenal!
HTTP method tidak didukung untuk resource ini.
Client mengirim terlalu banyak request (rate limiting).
Server error generic. Ada bug di server atau konfigurasi salah.
Server (sebagai gateway/proxy) dapat response invalid dari upstream server.
Server sedang down atau overload (maintenance).
Gateway/proxy tidak dapat response tepat waktu dari upstream.
Host - Domain tujuan (wajib di HTTP/1.1)User-Agent - Info browser/clientAccept - Tipe content yang bisa diterima clientAuthorization - Kredensial autentikasiContent-Type - Tipe data di bodyContent-Length - Ukuran body dalam byteCookie - Cookie yang dikirim ke serverReferer - URL halaman sebelumnyaContent-Type - Tipe data yang dikembalikanContent-Length - Ukuran bodyCache-Control - Instruksi caching (max-age, no-cache, dll)Set-Cookie - Set cookie di clientLocation - URL untuk redirect (3xx)Server - Info software serverETag - Identifier untuk validasi cacheLast-Modified - Waktu terakhir resource dimodifikasiHTTPS = HTTP + TLS/SSL encryption. Data dienkripsi selama transit.
Security Headers:
Strict-Transport-Security - Paksa pakai HTTPSX-Content-Type-Options - Cegah MIME sniffingX-Frame-Options - Cegah clickjackingContent-Security-Policy - Kontrol resource yang bisa di-loadCaching menyimpan copy resource untuk mempercepat request berikutnya.
max-age=3600 - Cache valid untuk 3600 detik (1 jam)no-cache - Harus revalidate ke server setiap kalino-store - Jangan cache sama sekalipublic - Boleh di-cache oleh proxy dan browserprivate - Hanya boleh di-cache oleh browser (bukan proxy)Menghemat bandwidth dengan hanya download jika resource berubah:
If-None-Match: [ETag] atau If-Modified-Since: [date]REST (Representational State Transfer) adalah arsitektur untuk web API. Status code penting di REST:
# 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
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!
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.
401 Unauthorized = belum login (butuh autentikasi). 403 Forbidden = sudah login tapi tidak punya akses. Analogi: 401 = "Siapa kamu?", 403 = "Kamu tidak boleh masuk".
301 = redirect permanen (browser cache, SEO transfer). 302 = redirect sementara (tidak cache). Untuk pindah domain permanen: pakai 301. Untuk maintenance page: pakai 302.
304 menghemat bandwidth besar! Browser kirim ETag/If-Modified-Since, server jawab 304 tanpa body. Setup Cache-Control dan ETag headers untuk performa optimal.
Monitor status code di access log (Apache/Nginx). Banyak 4xx = masalah client/SEO. Banyak 5xx = masalah server. Setup alert jika 5xx rate naik drastis.
Buat custom 404 page yang menarik dan helpful. Tampilkan search box, sitemap links, atau contact info. Untuk 500/503, tampilkan maintenance page yang informatif.
Jangan pernah pakai HTTP untuk production! Redirect semua HTTP ke HTTPS dengan 301. Pakai HSTS header. Gratis certificate dari Let's Encrypt.
Jika dapat 429 Too Many Requests, tunggu dan retry dengan exponential backoff. Cek header Retry-After untuk tahu kapan bisa retry. Jangan spam request!
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.
Setup monitoring (UptimeRobot, Pingdom) yang cek website setiap 1 menit. Alert jika dapat 5xx atau timeout. Track uptime percentage (target: 99.9%+).
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!
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:
Solusi:
Penyebab umum 404:
Solusi:
Semua 5xx = server error, tapi beda penyebab:
Analogi restoran:
301 Moved Permanently:
302 Found (Temporary Redirect):
Kapan pakai yang mana?
Langkah debugging:
Tools berguna:
curl -v https://example.comTips: Baca pesan error di response body - biasanya server kasih info detail kenapa error terjadi.
304 Not Modified = Resource belum berubah sejak request terakhir. Server tidak kirim body, client pakai cache lokal.
Cara kerja:
If-None-Match: [ETag]Kenapa penting?
Setup: Konfigurasi ETag dan Cache-Control di server (Apache/Nginx). Browser modern otomatis handle ini.
429 Too Many Requests = Client mengirim terlalu banyak request dalam waktu singkat. Server apply rate limiting.
Penyebab:
Solusi:
Retry-After - bilang berapa detik harus tungguContoh 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)
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.
Idempotent = melakukan request yang sama beberapa kali menghasilkan efek yang sama seperti melakukan sekali.
Method idempotent:
Method TIDAK idempotent:
Kenapa penting?
Tools online:
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)"
doneBrowser DevTools:
Monitoring:
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)
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:
BELUM ADA RIWAYAT