Apa perbedaan antara kode status HTTP 301 dan 308?

138

Apa perbedaan antara HTTP 301dan 308kode status?

  • 301 (Dipindahkan Secara Permanen): Ini dan semua permintaan di masa mendatang harus diarahkan ke URI yang diberikan.

  • 308 (Pengalihan Permanen): Permintaan dan semua permintaan selanjutnya harus diulangi menggunakan URI lain.

Sepertinya mereka mirip.

Alexander Drobyshevsky
sumber
Tidak ada kode 308 di tools.ietf.org/html/rfc2616 dan tools.ietf.org/html/rfc6585 , jadi pertanyaan harus ditujukan kepada penemu kode non-standar ini.
KonstantinL
4
Ada spesifikasi RFC 7538, oleh karena itu ini adalah kode HTTP asli
Alexander Drobyshevsky
2
Nah, tools.ietf.org/html/rfc7538 : Catatan: Kode status ini mirip dengan 301, kecuali bahwa ia tidak mengizinkan perubahan metode permintaan dari POST ke GET.
KonstantinL
4
Jangan gunakan RFC 2616 sebagai referensi. Itu usang oleh RFC 7230-35.
cassiomolin

Jawaban:

258

Tinjauan tentang 301, 302dan307

The RFC 7231 , referensi saat ini untuk semantik dan isi HTTP / 1.1 protokol, mendefinisikan 301(Dipindahkan Secara Permanen) dan 302(Ditemukan) kode status, yang memungkinkan metode permintaan akan berubah dari POSTke GET. Spesifikasi ini juga menentukan 307kode status (Pengalihan Sementara) yang tidak mengizinkan metode permintaan diubah dari POSTmenjadi GET.

Lihat detail selengkapnya di bawah ini:

6.4.2. 301 Pindah Secara Permanen

The 301(Dipindahkan Secara Permanen) kode status menunjukkan bahwa sumber daya sasaran telah ditetapkan URI permanen baru dan masa depan setiap referensi untuk sumber daya ini harus menggunakan salah satu dari URI tertutup. [...]

Catatan: Karena alasan historis, agen pengguna DAPAT mengubah metode permintaan dari POSTmenjadi GETuntuk permintaan berikutnya. Jika perilaku ini tidak diinginkan, 307kode status (Pengalihan Sementara) dapat digunakan sebagai gantinya.

6.4.3. 302 Ditemukan

The 302(Ditemukan) kode status menunjukkan bahwa sumber daya sasaran berada sementara di bawah URI yang berbeda. Karena pengalihan terkadang dapat diubah, klien harus terus menggunakan URI permintaan yang efektif untuk permintaan di masa mendatang. [...]

Catatan: Karena alasan historis, agen pengguna DAPAT mengubah metode permintaan dari POSTmenjadi GETuntuk permintaan berikutnya. Jika perilaku ini tidak diinginkan, 307kode status (Pengalihan Sementara) dapat digunakan sebagai gantinya.

6.4.7. 307 Pengalihan Sementara

The 307(Temporary Redirect) kode status menunjukkan bahwa Resides sumber daya sasaran sementara di bawah URI yang berbeda dan agen pengguna TIDAK HARUS mengubah metode permintaan jika melakukan suatu pengalihan otomatis untuk URI. Karena pengalihan dapat berubah seiring waktu, klien harus terus menggunakan URI permintaan efektif asli untuk permintaan di masa mendatang. [...]

Catatan: Kode status ini mirip dengan 302(Ditemukan), kecuali kode status ini tidak mengizinkan perubahan metode permintaan dari POSTmenjadi GET. Spesifikasi ini tidak mendefinisikan mitra yang setara untuk 301(Pindah Permanen) ( RFC 7238 , bagaimanapun, mendefinisikan kode status 308 (Pengalihan Permanen) untuk tujuan ini).

Kebutuhan untuk 308

The RFC 7238 telah dibuat untuk menentukan 308(Permanent Redirect) kode status, yang mirip dengan 301(Dipindahkan Secara Permanen) tetapi tidak memungkinkan metode permintaan akan berubah dari POSTke GET.

The 308kode status sekarang didefinisikan oleh RFC 7538 (yang usang tersebut RFC 7238 ).

3. 308 Pengalihan Permanen

The 308(Permanent Redirect) kode status menunjukkan bahwa sumber daya sasaran telah ditetapkan URI permanen baru dan masa depan setiap referensi untuk sumber daya ini harus menggunakan salah satu dari URI tertutup. Klien dengan kemampuan pengeditan tautan harus secara otomatis menautkan ulang referensi ke URI permintaan efektif ke satu atau beberapa referensi baru yang dikirim oleh server, jika memungkinkan. [...]

Catatan: Kode status ini mirip dengan 301(Dipindahkan Secara Permanen), kecuali kode status ini tidak mengizinkan perubahan metode permintaan dari POSTmenjadi GET.

Se kita memiliki yang berikut:

                                                             +-----------+-----------+
                                                             | Permanent | Temporary |
+------------------------------------------------------------+-----------+-----------+
| Allows changing the request method from POST to GET        | 301       | 302       |
+------------------------------------------------------------+-----------+-----------+
| Doesn't allow changing the request method from POST to GET | 308       | 307       |
+------------------------------------------------------------+-----------+-----------+

Memilih kode status yang paling sesuai

Michael Kropat menyusun serangkaian bagan keputusan yang membantu menentukan kode status terbaik untuk setiap situasi. Lihat berikut untuk 2xxdan 3xxkode status:

Memilih kode status 2xx atau 3xx

cassiomolin.dll
sumber
3
Mengingat bahwa pertanyaan itu khusus tentang destinction antara 301 dan 308, bisa Anda memberikan beberapa penjelasan lebih lanjut tentang: "tidak memungkinkan metode permintaan akan berubah dari POSTke GET" ? Apakah itu berarti bahwa formulir yang diposting tidak dapat diproses, tetapi formulir baru yang segar dapat disimpan di server dan kemudian diposting pada permintaan berikutnya?
R. Schreurs
1
Spesifikasi draf ini ( tools.ietf.org/id/draft-hunt-http-rest-redirect-00.html ) menyarankan bahwa layanan ReSTful harus menggunakan 308 bahkan untuk GET. "Kode pengalihan HTTP 301-306 TIDAK HARUS digunakan kecuali penyedia layanan mengetahui bahwa klien sebenarnya adalah agen pengguna." Namun ini hanya konsep. Saya tidak yakin apakah / kapan itu akan diterima.
Bruce Adams
1
Posting ini, the-definitive-guide-to-get-vs-post , menjelaskan mengapa mengizinkan POSTpermintaan (aman) diubah menjadi menjadi GET(tidak aman dalam data itu diteruskan dengan menambahkannya ke url - dan url dapat disimpan - permintaan termasuk kata sandi) dapat menjadi masalah keamanan, dan umumnya harus dihindari, kecuali Anda mengetahuinya agar aman untuk diubah. Saat ini tampaknya secara umum didukung dan lebih disukai menggunakan 307, 308 daripada 301, 302. Namun Anda harus memverifikasi.
SherylHohman
1
Mnemonic 308seperti sideways infinity, jadi Permanent redirect, dan juga tidak pernah mengubah Metode permintaan - ini juga merupakan tipe permintaan tetap yang permanen. Kemudian, 307adalah 1langkah di bawah - permanen / simpan Metode permintaan (Get / Post), tetapi redirect ke lokasi temp: 7 - terlihat seperti "belok kiri" atau memutar suhu, dan 7 juga mirip dengan k, jadi "pertahankan" metode permintaan.
SherylHohman
Anda lupa menyebutkan Resume Incomplete .
Knu