Topik temu duga representatif

Temu duga umum: Bagaimanakah anda membezakan HTTP 511, 401, dan 407?

UmumSederhana
Pasukan Editorial Offer.ccDiterbitkan Dikemas kini

Soalan

Pengguna pada Wi-Fi lapangan terbang menerima 511 daripada API anda. Terangkan perbezaannya dengan 401 Unauthorized, 407 Proxy Authentication Required, dan lencongan log masuk 302, kemudian reka bentuk pemulihan untuk pelayar dan bukan pelayar.

Gesaan dan konteks

Pengguna pada rangkaian hotel atau lapangan terbang menerima 511 Network Authentication Required daripada API. Seseorang telah menukarnya kepada 401 atau 302, menyebabkan percubaan semula SDK, pengecaman cache, dan aliran log masuk berkonflik. Terangkan sempadan tanggungjawab 511, bezakannya daripada 401 dan 407, serta reka bentuk pemulihan yang selamat untuk pelayar, klien mudah alih, dan klien bukan pelayar.

Soalan ini sesuai untuk temu duga umum bahagian belakang (backend), rangkaian, dan platform. Kuncinya adalah mengenal pasti proksi pemintas dan bukannya mengelirukan kemasukan rangkaian dengan pengesahan akaun aplikasi.

Perkara yang diuji oleh penemu duga

Jawapan yang mantap menyatakan bahawa 511 biasanya dijana oleh proksi pemintas yang mengawal akses rangkaian dan bermaksud klien mesti melengkapkan kemasukan rangkaian. 401 bermaksud asal (origin) atau sumber yang dilindungi memerlukan pengesahan aplikasi; 407 bermaksud proksi memerlukan kelayakan proksi. Nyatakan juga bahawa 511 bukanlah bukti log masuk aplikasi dan klien API tidak boleh menganggap lencongan HTML sebagai JSON secara membuta tuli.

Soalan penjelasan untuk ditanya terlebih dahulu

  • Hop manakah yang menjana 511, dan bolehkah klien membezakan proksi tempatan daripada asal?
  • Adakah klien merupakan halaman pelayar, aplikasi mudah alih asli, CLI, atau perkhidmatan latar belakang?
  • Adakah portal rangkaian mempunyai titik akhir pengesanan dan protokol tindak balas yang stabil?
  • Adakah permintaan API boleh dicuba semula, dan bagaimanakah klien akan mengetahui bahawa rangkaian telah dibenarkan masuk?
  • Adakah pintasan TLS, penyematan sijil (certificate pinning), kelayakan proksi, atau rahsia sensitif terlibat?

Rangka kerja jawapan 30 saat

"511 bermaksud lapisan kemasukan rangkaian memerlukan pengesahan dan biasanya dijana oleh proksi pemintas. 401 ialah pengesahan sumber dan 407 ialah pengesahan proksi. Saya tidak akan menukar 511 kepada 302 atau membiarkan SDK menghuraikan HTML portal sebagai JSON. Pelayar boleh memaparkan gesaan log masuk rangkaian yang terkawal; klien bukan pelayar harus mengembalikan status rangkaian berstruktur, menghentikan percubaan semula secara membuta tuli, dan menghantar semula permintaan asal hanya selepas pengesahan yang dipercayai. Kelayakan aplikasi tidak boleh sekali-kali dihantar ke portal yang tidak dikenali."

Jawapan mendalam langkah demi langkah

Langkah 1: Kenal pasti pihak yang menjana 511

RFC 6585 mentakrifkan 511 untuk klien yang memerlukan pengesahan bagi mendapatkan akses rangkaian, dan MDN menyatakan bahawa ia dijana oleh proksi pemintas dan bukannya asal. Kes biasa termasuk menerima terma Wi-Fi awam, log masuk portal tawanan (captive portal), dan pendaftaran peranti. Log konteks proksi dan rangkaian jika boleh, tetapi jangan anggap klien sentiasa boleh mengenal pasti perantara dengan pasti.

Langkah 2: Bezakan 401

401 bermaksud permintaan tidak mempunyai kelayakan yang sah untuk sumber sasaran, biasanya dengan cabaran WWW-Authenticate daripada asal. Klien boleh menyegarkan token atau meminta pengguna log masuk mengikut protokol aplikasi. Ia menerangkan masalah kebenaran sumber, bukan rangkaian tempatan yang belum dibenarkan masuk.

Langkah 3: Bezakan 407

407 meminta pengesahan proksi, menggunakan Proxy-Authenticate dan Proxy-Authorization. Kelayakan proksi dan kelayakan akaun aplikasi ialah domain kepercayaan yang berbeza. Jangan sekali-kali menganggap 407 sebagai 401 atau meletakkan kata laluan aplikasi pengguna dalam pengepala proksi; penyimpanan kelayakan rangkaian perusahaan dan awam memerlukan dasar yang berasingan.

Langkah 4: Mengapa tidak mengembalikan 302 secara terus?

302 menghalakan klien ke URL lain. Pelayar mungkin mengikutinya, tetapi SDK API, pengguna webhook, atau cache boleh menganggap HTML portal sebagai respons perniagaan. Portal rentas asal juga boleh mendedahkan konteks permintaan. Jika portal pelayar diperlukan, bukanya dalam aliran navigasi yang terkawal dan cuba semula sumber asal selepas selesai dan bukannya membuatkan setiap respons API melencong secara tersirat.

Langkah 5: Reka bentuk pengendalian pelayar

Pelayar boleh memaparkan gesaan log masuk rangkaian yang jelas dengan pautan portal dan tindakan cuba semula. Portal tidak boleh meminta kata laluan aplikasi atau mendedahkan token panggilan balik OAuth kepada proksi yang tidak dipercayai. Selepas log masuk, sahkan akses rangkaian melalui permintaan pengesanan yang dipercayai, kemudian muat semula halaman asal.

Langkah 6: Reka bentuk pengendalian bukan pelayar

Klien mudah alih, CLI, dan latar belakang harus mengecam 511, merekodkan status kemasukan, dan menghentikan percubaan semula eksponen. Mereka boleh memanggil antara muka pengesanan rangkaian yang dipercayai atau mewakilkannya kepada lapisan rangkaian sistem; selepas pengesahan, hantar semula permintaan dengan semantik idempoten. Untuk penulisan yang tidak boleh dicuba semula, elakkan penyerahan pendua semasa portal belum selesai.

Langkah 7: Tangani TLS dan sempadan keselamatan

Pada HTTPS, proksi pemintas biasanya tidak boleh memalsukan kandungan asal dengan selamat melainkan peranti atau perusahaan telah memasang sijil pintasan yang dipercayai. Klien tidak boleh melumpuhkan pengesahan sijil untuk "log masuk automatik". URL portal, sijil, dan dasar lencongan memerlukan semakan produk dan keselamatan, terutamanya untuk API sesi, pembayaran, dan pentadbiran.

Langkah 8: Sahkan, pantau, dan pulihkan

Uji pelayar, klien asli, CLI, kerja latar belakang, cache, dan percubaan semula pada rangkaian awam sebenar serta proksi simulasi. Jejaki kadar 511, wilayah rangkaian, penyelesaian portal, kejayaan permintaan pertama selepas pemulihan, dan penulisan pendua. Sahkan bahawa 401 dan 407 masih mematuhi kontrak masing-masing dan 511 tidak boleh dicache sebagai halaman ralat jangka panjang.

Pertukaran kompromi (trade-offs) dan sempadan

511 memberitahu klien bahawa sekatan berpunca daripada kemasukan rangkaian dan bukannya akaun asal, tetapi persekitaran perantara tidak sentiasa boleh diperhatikan atau dipercayai. Anggap ia sebagai isyarat pemulihan, bukan bukti identiti. Untuk API, struktur ralat yang stabil dan menghentikan percubaan semula adalah lebih selamat daripada membuka halaman yang tidak dikenali secara automatik.

Jangan petakan setiap kegagalan akses kepada 511. Log masuk asal menggunakan 401, kelayakan proksi menggunakan 407, pengehadan kadar menggunakan 429, dan sambungan rangkaian yang gagal mungkin tidak menghasilkan respons HTTP langsung. Status mesti mencerminkan lapisan penjana sebenar dan tindakan pemulihan.

Pelan pelancaran dan bukti

Mula-mula sahkan pengepala 511, badan, tingkah laku cache, dan proksi penjana dalam rangkaian ujian. Kemudian tentukan mesin keadaan klien: kesan, gesa, tunggu kemasukan, cuba semula, dan laporkan kegagalan. Pelayar menggunakan portal terkawal; klien bukan pelayar mewakilkan kepada lapisan rangkaian sistem atau operasi, tanpa menyerahkan kelayakan aplikasi kepada halaman portal.

Bina papan pemuka dan log persampelan mengikut rangkaian, versi klien, dan kaedah permintaan. Tambah kunci keidempotenan atau kontrak bukan boleh dicuba semula yang jelas untuk penulisan; ambil semula bacaan selepas pemulihan. Jalankan keseluruhan suite penerimaan setiap kali vendor portal atau dasar proksi berubah.

Perangkap biasa dan tindakan susulan

Menganggap 511 sebagai 401

511 ialah masalah kemasukan rangkaian; 401 ialah masalah pengesahan sumber. Pengepala cabaran, kelayakan, dan aliran pemulihan mereka tergolong dalam domain kepercayaan yang berbeza.

Membiarkan SDK mengikut 302 secara automatik

HTML portal boleh dihuraikan sebagai JSON atau dicache. Kesan status rangkaian terlebih dahulu, kemudian selesaikan log masuk portal dalam aliran yang terkawal.

Menghantar kata laluan aplikasi ke portal

Proksi rangkaian awam tidak boleh menerima kelayakan aplikasi. Portal membenarkan kemasukan rangkaian; pengesahan aplikasi kekal sebagai protokol asal.

Mencuba semula 511 tanpa henti

Percubaan semula sebelum kemasukan membesarkan volum trafik dan boleh menduplikasi penulisan. Jeda percubaan semula, tunggu kemasukan yang dipercayai, dan gunakan semantik idempoten.

Bagaimanakah anda menguji klien bukan pelayar?

Liputi CLI, mudah alih, kerja latar belakang, cache, serta bacaan dan penulisan pascapemulihan pada rangkaian awam simulasi dan sebenar. Periksa pengiktirafan 511, pemberhentian percubaan semula, penyelesaian portal, dan metrik penyerahan pendua.

Sumber awam

Soalan berkaitan