Ada kesalahpahaman umum (dan penyalahgunaan) yang terkait 403 Forbidden
: itu tidak seharusnya memberikan apa pun tentang apa yang dipikirkan server tentang permintaan tersebut. Ini secara khusus dirancang untuk mengatakan,
Saya mendapatkan apa yang Anda minta, tetapi saya tidak akan menangani permintaan itu, apa pun yang Anda coba. Jadi berhentilah mencoba.
UA atau klien mana pun harus menafsirkan bahwa itu berarti bahwa permintaan itu tidak akan pernah berfungsi, dan merespons dengan tepat.
Ini memiliki implikasi untuk klien yang menangani permintaan atas nama pengguna: jika pengguna tidak masuk, atau salah ketik, klien yang menangani permintaan tersebut harus menjawab, "Maaf, tapi saya tidak bisa melakukan apa-apa" setelah pertama kali itu mendapatkan 403
dan berhenti menangani permintaan di masa depan. Jelas, jika Anda ingin pengguna masih dapat meminta akses ke informasi pribadi mereka setelah kegagalan, ini adalah perilaku yang bermusuhan dengan pengguna.
403
berbeda dengan 401 Authorization Required
, yang tidak memberikan bahwa server akan menangani permintaan selama Anda lulus kredensial yang benar. Ini biasanya yang dipikirkan orang ketika mereka mendengar 403
.
Ini juga berbeda dengan 404 Page Not Found
yang, seperti yang ditunjukkan orang lain, dirancang tidak hanya untuk mengatakan "Saya tidak dapat menemukan halaman itu" tetapi untuk menyarankan kepada klien bahwa server tidak membuat klaim keberhasilan atau kegagalan untuk permintaan di masa depan.
Dengan 401
dan 404
, server tidak mengatakan apa pun kepada klien atau UA tentang bagaimana mereka harus melanjutkan: mereka dapat terus berusaha dengan harapan mendapatkan respons yang berbeda.
Jadi 404
adalah cara yang tepat untuk menangani halaman yang tidak ingin Anda tunjukkan kepada semua orang, tetapi tidak ingin memberikan apa pun tentang mengapa Anda tidak akan menampilkannya dalam situasi tertentu.
Tentu saja, ini mengasumsikan klien membuat permintaan peduli untuk kelemahan RFC kecil. Klien yang cukup jahat tidak akan peduli tentang kode status yang dikembalikan kecuali secara insidentil. Orang akan tahu itu adalah halaman pengguna tersembunyi (atau halaman pengguna potensial yang tersembunyi) dengan membandingkannya dengan halaman pengguna lain yang dikenal.
Yaitu, katakanlah pawang Anda users/*
. Jika saya tahu users/foo
, users/bar
dan users/baaz
pekerjaan, server mengembalikan 401
, 403
atau 404
untuk users/quux
tidak berarti aku tidak akan mencobanya, terutama jika saya punya alasan untuk percaya ada adalah sebuah quux
pengguna. Skenario contoh standar adalah Facebook: profil saya pribadi, tetapi komentar saya tentang profil publik tidak. Klien jahat tahu saya ada meskipun Anda kembali 404
ke halaman profil saya.
Jadi kode status bukan untuk kasus penggunaan berbahaya, itu untuk klien yang bermain sesuai aturan. Dan untuk klien - klien itu, suatu 401
atau 404
permintaan adalah yang paling tepat.