Informasional 1xx
Kode 1xx
100Continue — server menerima header, client harus kirim body
101Switching Protocols — upgrade ke WebSocket atau HTTP/2
102Processing — server menerima request, masih memproses (WebDAV)
103Early Hints — preload resource sebelum respons akhir
Catatan Penggunaan
# 100 Continue: client sends Expect header, waits for 100 curl -H "Expect: 100-continue" -d @large.json URL # 101: upgrade to WebSocket Connection: Upgrade / Upgrade: websocket
Sukses 2xx
Kode 2xx
200OK — respons sukses standar
201Created — resource berhasil dibuat (POST/PUT)
202Accepted — request diterima, diproses secara async
203Non-Authoritative Info — ditransformasi oleh proxy
204No Content — sukses tanpa body respons (DELETE)
205Reset Content — sukses, client harus reset form
206Partial Content — request range terpenuhi
207Multi-Status — beberapa kode status (WebDAV)
Penggunaan REST API
GET → 200Kembalikan resource dengan body
POST → 201Resource dibuat, sertakan header Location
PUT → 200/204Resource diperbarui (dengan/tanpa body)
DELETE → 204Dihapus, tidak ada body yang dikembalikan
PATCH → 200Pembaruan parsial, kembalikan resource yang diubah
Pengalihan 3xx
Kode 3xx
300Multiple Choices — beberapa representasi tersedia
301Moved Permanently — resource dipindah, perbarui bookmark
302Found — redirect sementara (sering disalahgunakan sebagai 303)
303See Other — redirect dengan GET setelah POST
304Not Modified — gunakan versi cache (ETag/If-Modified)
307Temporary Redirect — metode sama, lokasi sementara
308Permanent Redirect — metode sama, lokasi permanen
Perilaku Redirect
301/308Permanen — mesin pencari memperbarui indeks
302/307Sementara — URL asli tetap kanonik
301/302Mungkin mengubah metode ke GET saat redirect
307/308Harus mempertahankan metode HTTP asli
Error Client 4xx
Error Client Umum
400Bad Request — sintaks salah atau parameter tidak valid
401Unauthorized — autentikasi diperlukan atau gagal
403Forbidden — terautentikasi tetapi tidak diizinkan
404Not Found — resource tidak ada
405Method Not Allowed — metode HTTP tidak didukung
406Not Acceptable — tidak bisa memenuhi header Accept
408Request Timeout — client terlalu lambat mengirim request
409Conflict — request bertentangan dengan state saat ini
Error Client Lainnya
410Gone — resource dihapus permanen (bukan hanya hilang)
411Length Required — header Content-Length tidak ada
412Precondition Failed — If-Match/If-Unmodified gagal
413Content Too Large — body request melebihi batas
414URI Too Long — URL melebihi batas server
415Unsupported Media Type — Content-Type tidak diterima
422Unprocessable Content — sintaks valid, kesalahan semantik
429Too Many Requests — batas rate terlampaui
Error Server 5xx
Kode 5xx
500Internal Server Error — exception tidak tertangani di server
501Not Implemented — server tidak mendukung metode tersebut
502Bad Gateway — server upstream mengirim respons tidak valid
503Service Unavailable — kelebihan beban atau dalam pemeliharaan
504Gateway Timeout — server upstream tidak merespons tepat waktu
505HTTP Version Not Supported — versi tidak ditangani
507Insufficient Storage — server tidak bisa menyimpan request (WebDAV)
511Network Auth Required — perlu login captive portal
Strategi Retry
500Retry dengan backoff; mungkin sementara
502/504Retry — masalah upstream mungkin teratasi
503Periksa header Retry-After sebelum retry
501/505Jangan retry — perbaiki request client
Kode Umum
Kode Paling Sering Digunakan
200OK — semuanya berjalan
201Created — resource baru dibuat
204No Content — sukses, body kosong
301Moved Permanently — perbarui URL
304Not Modified — gunakan cache
400Bad Request — perbaiki request Anda
401Unauthorized — login terlebih dahulu
403Forbidden — izin tidak cukup
404Not Found — URL salah atau dihapus
422Unprocessable — kesalahan validasi
429Too Many Requests — perlambat
500Server Error — bukan kesalahan Anda
502Bad Gateway — kegagalan proxy/upstream
503Unavailable — coba lagi nanti
Referensi Header
Header Request
AcceptTipe media respons yang diinginkan (mis. application/json)
AuthorizationKredensial (Bearer token, Basic base64)
Content-TypeTipe media dari body request
If-None-MatchKondisional: ETag untuk validasi cache
If-Modified-SinceKondisional: tanggal untuk validasi cache
Cache-ControlArahan caching (no-cache, max-age)
User-AgentString identifikasi client
Header Response
Content-TypeTipe media dari body respons
LocationURL tujuan redirect atau resource yang dibuat
ETagTag entitas untuk validasi cache
Cache-ControlArahan caching (max-age, no-store)
Retry-AfterWaktu tunggu sebelum retry (429/503)
WWW-AuthenticateSkema autentikasi yang diperlukan (dikirim dengan 401)
Set-CookieSet cookie di client
Pola Umum
Alur Caching
# First request — server returns ETag GET /api/data → 200, ETag: "abc123" # Subsequent request — conditional GET /api/data, If-None-Match: "abc123" → 304 Not Modified (use cache)
Alur Autentikasi
# Unauthenticated request GET /api/secret → 401, WWW-Authenticate: Bearer # With token GET /api/secret, Authorization: Bearer → 200 OK
Pembatasan Rate
# Rate limited response 429 Too Many Requests Retry-After: 60 X-RateLimit-Remaining: 0 X-RateLimit-Reset: 1700000000
Negosiasi Konten
# Client prefers JSON, accepts XML Accept: application/json, application/xml;q=0.9 # Server can't satisfy → 406 Not Acceptable # Server returns best match → 200 + Content-Type