Prom dan konteks
Prom asas rangkaian dan API ini sesuai untuk peranan bahagian belakang (backend), platform dan infrastruktur. Sumber dinafikan disebabkan oleh keperluan undang-undang, dan sekatan mungkin berlaku di origin, CDN, ISP atau enjin carian. Matlamatnya adalah untuk menerangkan masa 451 sesuai, cara memberikan ketelusan, dan sebab sekatan undang-undang bukan ralat kebenaran biasa atau gangguan yang boleh dicuba semula.
Perkara yang dinilai oleh penemu duga
- Bolehkah anda membezakan 451, 403, 404 dan 5xx mengikut semantik dan tanggungjawab?
- Adakah anda tahu bahawa 451 menandakan tuntutan undang-undang tanpa membuktikan bahawa sumber itu wujud?
- Bolehkah anda menggabungkan body respons,
Link: rel="blocked-by", caching dan tingkah laku proksi dengan betul? - Adakah anda mempertimbangkan privasi, pendedahan yang mengelirukan, kebolehgunaan klien, log audit dan pengesahan pelbagai rantau?
Soalan penjelasan untuk ditanya
Sahkan siapa yang sebenarnya menguatkuasakan sekatan, sama ada hasilnya berbeza mengikut rantau, sama ada asas undang-undang boleh didedahkan, sama ada cache kongsi berada di hadapan, dan sama ada klien ialah pelayar, aplikasi mudah alih atau pengguna API. Jika pengguna hanya kekurangan kebenaran, gunakan 401 atau 403; jika sumber tiada, jangan ubahnya kepada 451 semata-mata untuk menyembunyikan butiran pelaksanaan. Jika pendedahan dilarang, tentukan bukti awam dan dalaman secara berasingan.
Kerangka jawapan 30 saat
Saya akan menggunakan 451 hanya apabila perkhidmatan menafikan akses disebabkan tuntutan undang-undang, dan meletakkan asas undang-undang serta skop dalam body yang boleh diaudit. Jika CDN atau perantara lain menguatkuasakan sekatan, Link dengan rel="blocked-by" mengenal pasti entiti yang melakukannya, bukan pihak berkuasa yang mengeluarkan tuntutan tersebut. Saya akan memilih tingkah laku cache berdasarkan turun naik serantau dan dasar, menunjukkan kepada klien keadaan tidak tersedia yang jelas, dan mengelakkan percubaan semula automatik atau janji bahawa rangkaian lain akan berfungsi. Akhir sekali saya akan mengesahkan tingkah laku origin, proksi, cache dan serantau bersama-sama.
Perbincangan mendalam langkah demi langkah
- Kelaskan semantik. 451 bermaksud pelayan menafikan sumber disebabkan tuntutan undang-undang; 403 bermaksud pemohon yang dikenal pasti tidak dibenarkan, dan 404 bermaksud sumber tiada atau kewujudannya sengaja disembunyikan. 451 tidak membuktikan bahawa sumber itu wujud dan bukan kegagalan teknikal.
- Kenal pasti entiti yang menguatkuasakan. Origin, CDN, ISP, perkhidmatan DNS atau enjin carian mungkin merupakan penyekat sebenar. Entiti tersebut mengenal pasti dirinya dalam pengepala
Linkdenganrel="blocked-by"; penjelasan pihak berkuasa atau dasar tergolong dalam body atau halaman dasar, bukan dalam hubungan tersebut. - Reka bentuk respons. Terangkan asas undang-undang atau dasar, pihak yang mengeluarkan, rantau atau kelas sumber yang terjejas, dan laluan rayuan atau bantuan. Jika pendedahan mewujudkan risiko tambahan, terbitkan hanya apa yang perlu sambil mengekalkan asas penuh dan pelulus dalam rekod audit dalaman.
- Kendalikan caching. RFC 7725 membenarkan 451 dicache secara lalai, jadi keadaan undang-undang atau serantau yang kerap berubah memerlukan
Cache-Controlyang eksplisit, TTL yang singkat, atauno-store. Kunci shared-cache mesti merangkumi setiap dimensi yang mempengaruhi sekatan supaya jawapan satu rantau tidak bocor ke rantau yang lain. - Tentukan tingkah laku klien. Pelayar menunjukkan keadaan kandungan terhad yang jelas. Klien API menganggap 451 sebagai ralat dasar yang tidak boleh dicuba semula, mengekalkan status, butiran sekatan dan ID permintaan. Ia tidak sepatutnya menulis semula respons sebagai 500 atau melencongkan dasar secara automatik melalui proksi atau VPN.
- Sahkan dan pantau. Bandingkan status, body, pengepala dan cache hit daripada permintaan terus ke origin, CDN, pelbagai rantau, cache-warm dan cache-cold, serta klien yang berbeza. Catatkan peristiwa audit, versi peraturan, entiti penguatkuasaan dan masa pembatalan; singkirkan cache yang terjejas apabila dasar berubah.
Contoh jawapan yang kukuh
Saya akan terlebih dahulu mengesahkan bahawa penafian itu benar-benar sah di sisi undang-undang. Masalah kebenaran mengembalikan 403 dan sumber yang tiada mengembalikan 404; 451 menyampaikan sekatan undang-undang tanpa menegaskan bahawa sumber itu wujud. Oleh kerana origin atau CDN boleh menguatkuasakannya, saya akan mengenal pasti penyekat sebenar dalam Link:
HTTP/1.1 451 Unavailable For Legal Reasons
Content-Type: application/problem+json
Cache-Control: private, max-age=300
Link: <https://blocker.example/policy/123>; rel="blocked-by"
{
"status": 451,
"title": "Unavailable For Legal Reasons",
"detail": "Access is restricted in this region under the cited policy.",
"policy_id": "policy-123",
"request_id": "req-7f2"
}Body memberikan pengguna penjelasan yang mencukupi dan laluan rayuan; audit dalaman mengekalkan asas undang-undang penuh, keputusan serantau, versi peraturan dan pengendali. Memandangkan 451 boleh dicache secara lalai, kunci cache merangkumi rantau dan versi peraturan, dengan TTL yang singkat atau tiada storan apabila keadaan dasar berubah dengan pantas. Klien membentangkan sekatan dasar dan menghentikan percubaan semula automatik. Ujian meliputi origin, CDN, cache hit, perubahan rantau, pembatalan peraturan dan kes di mana pendedahan adalah terhad.
Kesilapan lazim
- Mengembalikan 451 untuk setiap penafian → kebenaran, ketiadaan dan sekatan undang-undang menjadi tidak dapat dibezakan → kelaskan sebab sebelum memilih 401, 403, 404, 451 atau 5xx.
- Meletakkan pihak berkuasa undang-undang dalam
blocked-by→ semantik hubungan adalah salah → kenal pasti entiti penguatkuasa di sana dan jelaskan dasar secara berasingan dalam body. - Mengabaikan kebolehan cache lalai → hasil satu rantau dikongsi dengan rantau lain → reka bentuk kunci cache, TTL dan sebarang tingkah laku
no-storeyang diperlukan. - Mencuba semula 451 secara automatik → permintaan berulang tidak boleh mengubah keadaan dasar → layan ia sebagai ralat dasar yang tidak boleh dicuba semula dengan teks bantuan yang boleh diambil tindakan.
- Menganggap 451 sebagai bukti bahawa sumber wujud → ia boleh membocorkan maklumat tapak → nyatakan secara eksplisit bahawa status itu tidak membuktikan kewujudan.
Soalan susulan dan jawapan
Bagaimana jika tuntutan undang-undang melarang mendedahkan peruntukan yang tepat?
Kembalikan hanya sekatan yang diperlukan dan ID permintaan; jangan mereka-reka butiran. Simpan asas undang-undang, pelulus dan versi dalam rekod audit dalaman. Klien masih perlu mengetahui bahawa ia adalah sekatan dasar dan bukannya kegagalan rangkaian.
Bolehkah respons 451 dicache?
Ya. RFC 7725 menyatakan ia boleh dicache secara lalai, tetapi ketidaktentuan dan kepekaan menentukan dasar tersebut. Jika rantau, kumpulan pengguna atau versi peraturan mengubah hasilnya, gunakan kunci cache yang betul dan TTL yang singkat, mungkin no-store, dan singkirkan cache apabila sekatan dibatalkan.
CDN mengembalikan 451 manakala origin mengembalikan 200. Yang manakah penyekat?
CDN ialah entiti yang sebenarnya menafikan permintaan dan harus muncul dalam blocked-by; log origin sepatutnya menunjukkan bahawa ia tidak melakukan sekatan tersebut. Sahkan status terus ke origin, CDN dan cache secara berasingan supaya lapisan tidak dikelirukan.