Kode Status HTTP

Referensi lengkap kode status respons HTTP dengan penjelasan dan kasus penggunaan.

Kategori kode status HTTP

Apa perbedaan antara 301 dan 302?

301 Moved Permanently memberi tahu klien bahwa sumber daya telah pindah secara permanen · mesin pencari mentransfer peringkat. 302 Found adalah pengalihan sementara · URL asli mempertahankan peringkatnya.

Kapan menggunakan 401 daripada 403?

401 Unauthorized berarti "tidak terautentikasi" · klien harus memberikan kredensial. 403 Forbidden berarti "terautentikasi tetapi tidak diotorisasi" · kredensial tidak akan mengubahnya.

Apa arti kode status 418?

418 "I'm a teapot" adalah lelucon April Mop dari RFC 2324 (Hyper Text Coffee Pot Control Protocol). Tidak digunakan dalam praktik tetapi sangat dikenal dalam budaya developer.

Sebuah Standar dengan Tiga Dekade Pergeseran

Kode status HTTP telah melewati beberapa generasi spesifikasi. RFC 1945 (Mei 1996) menstandarisasi HTTP/1.0 dengan kategori dasar 1xx-5xx. RFC 2616 (Juni 1999) menghadirkan HTTP/1.1 dan menjadi referensi kanonik selama lebih dari satu dekade. Seri 7230-7235 (Juni 2014) membagi HTTP/1.1 menjadi beberapa spesifikasi berdasarkan topik. Standar konsolidasi saat ini adalah RFC 9110 «HTTP Semantics» (Juni 2022), yang mengusangkan pembagian 7230-7235 dan merupakan kutipan yang tepat untuk pekerjaan modern. Registri live lengkap dari kode yang ditetapkan ada di registri kode status HTTP IANA.

Lima Kategori Sekilas

Perbandingan «vs» yang Membingungkan Semua Orang

401 vs 403. Pasangan yang paling membingungkan. 401 Unauthorized berarti «Anda belum diautentikasi, coba masuk» (namanya secara teknis menyesatkan, ini tentang autentikasi, bukan otorisasi). 403 Forbidden berarti «Anda sudah diautentikasi, tetapi Anda tidak diizinkan melakukan ini», kredensial Anda valid tetapi tidak memberikan akses ke sumber daya ini. Kesalahan umum: mengembalikan 403 untuk permintaan yang tidak diautentikasi ketika 401 dengan header WWW-Authenticate yang benar.

301 vs 302 vs 307 vs 308. Dua sumbu, permanen vs sementara, dan perilaku preservasi metode:

KodePermanen?Method dipertahankan?Sinyal peringkat SEO
301 Moved PermanentlyYaSecara historis klien mengubah POST → GETPermanen, meneruskan peringkat ke URL baru
302 FoundTidakSecara historis klien mengubah POST → GETSementara, URL asli tetap mempertahankan peringkat
307 Temporary RedirectTidakKetat, POST tetap POSTSama seperti 302
308 Permanent RedirectYaKetat, POST tetap POSTSama seperti 301

Jika Anda mengalihkan permintaan GET untuk tujuan SEO, 301 adalah pilihan konvensional. Jika Anda mengalihkan permintaan POST atau PUT dan ingin metode dipertahankan, Anda memerlukan 307 atau 308.

400 vs 422. 400 Bad Request adalah untuk permintaan yang cacat secara sintaksis, JSON tidak valid, header yang diperlukan hilang, parameter kueri yang salah bentuk. 422 Unprocessable Entity (awalnya kode WebDAV, diadopsi secara luas oleh REST API) adalah untuk permintaan yang valid secara sintaksis dengan masalah semantik, JSON diurai dengan benar, tetapi nilainya gagal validasi bisnis (kuantitas negatif pada pesanan, email sudah digunakan). Banyak API menggunakan keduanya.

502 vs 503 vs 504. Tiga mode kegagalan upstream yang berbeda:

404 vs 410. 404 Not Found adalah «kami tidak tahu apakah ini ada atau tidak.» 410 Gone adalah «ini pernah ada, sekarang dihapus secara permanen.» Dampak SEO: Google memperlakukan 410 sebagai sinyal yang lebih kuat bahwa konten tidak tersedia secara permanen dan menghapusnya dari indeks lebih cepat daripada 404.

Konvensi REST API

REST API modern telah menyepakati sekumpulan konvensi yang cukup konsisten tentang apa arti kode status untuk tindakan tertentu:

MethodJalur suksesError umum
GET200 OK dengan body, atau 304 Not Modified jika di-cache404 jika sumber daya hilang, 403 jika dilarang
POST (buat)201 Created dengan header Location yang menunjuk ke sumber daya baru400 untuk body yang salah bentuk, 422 untuk error validasi, 409 untuk konflik
PUT (ganti) / PATCH (perbarui)200 OK dengan body yang diperbarui, atau 204 No Content404 jika sumber daya hilang, 409 untuk konflik versi
DELETE204 No Content (atau 200 dengan konfirmasi penghapusan)404 jika hilang
Apa pun (rate-limited)-429 Too Many Requests dengan header Retry-After
Apa pun (auth)-401 jika tidak ada autentikasi, 403 jika diautentikasi tetapi tidak diizinkan

Implikasi SEO

Kode-kode Terkenal & Budaya

Kesalahan Umum

  1. Menggunakan 200 OK untuk error dengan error body. Mengembalikan {"error": "not found"} dengan status 200 membingungkan setiap lapisan caching, alat monitoring, dan client SDK. Gunakan kode status yang tepat.
  2. Mengembalikan 403 untuk permintaan yang tidak diautentikasi. Kode yang tepat adalah 401 dengan header WWW-Authenticate.
  3. Menggunakan 302 saat yang dimaksud adalah 301. Jika pemindahan bersifat permanen, mesin pencari membutuhkan 301 untuk mentransfer peringkat. 302 mempertahankan pengindeksan URL lama.
  4. Menggunakan 301 atau 302 untuk pengalihan POST/PUT. Secara historis ini memungkinkan klien mengubah metode menjadi GET. 307 dan 308 secara ketat mempertahankan metode asli.
  5. Mengembalikan 500 saat yang dimaksud adalah 503. Jika server kelebihan beban atau dalam pemeliharaan, 503 dengan Retry-After adalah sinyal yang tepat, baik untuk klien maupun untuk Googlebot.
  6. Menggunakan 404 untuk halaman yang dihapus secara permanen. 410 Gone adalah sinyal yang lebih kuat dan dihapus dari indeks mesin pencari lebih cepat.
  7. Melupakan header Location pada respons 201 dan 3xx. Header Location adalah yang memberi tahu klien di mana sumber daya baru berada atau ke mana harus diarahkan. Tanpanya, klien tidak dapat bernavigasi.

Pertanyaan yang Lebih Sering Diajukan

Kapan saya harus mengembalikan 422 alih-alih 400?

400 Bad Request berarti permintaan itu sendiri cacat, JSON tidak valid, header yang diperlukan hilang, parameter kueri yang salah bentuk. 422 Unprocessable Entity berarti permintaan sudah terbentuk dengan baik tetapi mengandung error semantik yang mencegah pemrosesan, field kuantitas yang diset ke angka negatif, alamat email yang sudah digunakan, tanggal di masa lalu untuk field yang hanya berlaku di masa depan. Konvensi REST API modern menyepakati pembagian ini, dengan sebagian besar API besar (GitHub, Stripe, Twilio) menggunakan 422 untuk error validasi.

Mengapa Cloudflare terkadang mengembalikan 520, 521, 522…?

Kode 520-527 adalah spesifik Cloudflare, menandakan berbagai cara edge mereka tidak dapat mencapai server origin Anda. 520 adalah generik «web server returned an unknown error»; 521 berarti origin Anda menolak koneksi; 522 adalah timeout koneksi ke origin Anda; 524 berarti origin Anda terlalu lama merespons. Kode-kode ini tidak ada di registri IANA tetapi sering ditemukan ketika situs di balik Cloudflare memiliki masalah backend.

Apakah browser saya akan menunjukkan kode mana yang dikembalikan API saya?

Ya, buka DevTools → tab Network, klik permintaan, dan lihat kolom «Status». Browser juga menampilkan halaman umum untuk beberapa kode (game dinosaurus pada kegagalan koneksi Chrome, halaman 404 / 500 standar); tetapi kode numerik aktual selalu ada dalam respons.

Apa itu 103 Early Hints?

Kode 1xx yang relatif baru (RFC 8297, 2017) yang memungkinkan server mengirim header Link: rel=preload sebelum respons penuh siap, memberi tahu browser untuk mulai mengambil sumber daya kritis (CSS, font, gambar) lebih awal. Kini didukung oleh Chrome dan dikirim oleh Cloudflare, Fastly, dan CDN lainnya sebagai optimasi kinerja.

Bisakah saya membuat kode status sendiri?

Secara teknis ya (HTTP mengizinkan kode 3-digit apa pun dalam rentang 100-599. Secara praktis tidak) klien, proksi, dan cache memperlakukan kode yang tidak dikenal berdasarkan digit pertamanya (jadi 4xx = error klien secara generik, 5xx = error server). Beberapa vendor melakukan ini (Cloudflare's 520s, Nginx's 444), tetapi kecuali Anda mengontrol kedua ujung saluran, tetaplah pada registri IANA. Membuat 299 tidak akan merusak apa pun tetapi juga tidak akan mengkomunikasikan apa pun.

Mengapa «kode status» disebut «status» dan bukan «kode error»?

Karena sebagian besar dari mereka bukanlah error. 200 OK adalah kode status yang paling banyak dikembalikan di dunia, artinya «semuanya berjalan lancar.» Kode-kode ini mengkomunikasikan status permintaan: sukses, pengalihan, error klien, error server. Menyebutnya «kode error» bias ke kasus negatif yang dicatat dan diperhatikan; kode sukses melakukan tugasnya secara diam-diam setiap mikrodetik.

Alat terkait

URL Parser & Pengdekode Generator .htaccess URL Encoder / Decoder Gratis