Jenis-Jenis Redirect Website: 301, 302, 303, 307, dan 308
Redirect pada website tidak hanya terdiri dari satu jenis. Dalam HTTP, redirect termasuk dalam kelompok status code 3xx, tetapi masing-masing kode memiliki arti dan perilaku yang berbeda. Perbedaan tersebut terutama berkaitan dengan apakah perpindahan URL bersifat permanen atau sementara serta bagaimana metode HTTP diperlakukan ketika request dialihkan.
1. Redirect 301 — Moved Permanently
301 Moved Permanently digunakan ketika resource telah dipindahkan secara permanen ke URL baru.
Contohnya:
https://example.com/artikel-lama
dialihkan secara permanen ke:
https://example.com/artikel-baru
Respons server dapat terlihat seperti:
HTTP/1.1 301 Moved Permanently
Location: https://example.com/artikel-baru
Menurut RFC 9110, status 301 menunjukkan bahwa resource target telah memiliki URI baru secara permanen. Server sebaiknya menyertakan header Location yang berisi URI tujuan.
Redirect 301 umum digunakan ketika:
- URL halaman berubah secara permanen.
- Struktur permalink website diubah.
- Website berpindah domain.
- Halaman lama digantikan oleh URL baru.
- Pengelola website ingin mengarahkan akses dari URL lama ke URL baru.
Untuk mesin pencari, Google mendokumentasikan redirect permanen seperti 301 sebagai sinyal bahwa URL tujuan dapat menjadi URL kanonis pengganti URL lama.
Namun, 301 tidak selalu memiliki perilaku yang sama untuk setiap metode HTTP. Untuk alasan historis, user agent dapat mengubah metode POST menjadi GET pada request berikutnya. Jika metode request harus dipertahankan, status 308 dapat digunakan.
2. Redirect 302 — Found
302 Found menunjukkan bahwa resource untuk sementara berada pada URL lain.
Contohnya:
https://example.com/produk
sementara diarahkan ke:
https://example.com/promo
Responsnya dapat berupa:
HTTP/1.1 302 Found
Location: https://example.com/promo
Menurut RFC 9110, status 302 menunjukkan bahwa resource target untuk sementara berada pada URI yang berbeda. Karena pengalihan tersebut dapat berubah, client sebaiknya tetap menggunakan URI awal untuk request berikutnya.
302 dapat digunakan untuk kebutuhan seperti:
- Pengalihan sementara.
- Halaman yang sedang mengalami perubahan sementara.
- Pengujian versi halaman tertentu.
- Pengalihan sementara selama layanan atau halaman sedang tidak tersedia.
Perlu diperhatikan bahwa 302 memiliki sejarah implementasi yang menyebabkan perilaku terhadap metode request tertentu tidak selalu sama. Secara khusus, user agent dapat mengubah metode POST menjadi GET. Jika metode request harus dipertahankan, status 307 Temporary Redirect lebih tepat.
3. Redirect 303 — See Other
303 See Other digunakan untuk mengarahkan client ke resource lain. Setelah menerima respons 303, client dapat mengambil resource yang ditunjukkan oleh Location menggunakan metode GET atau HEAD.
Contoh sederhananya:
HTTP/1.1 303 See Other
Location: https://example.com/hasil
RFC 9110 menjelaskan bahwa 303 dapat digunakan setelah suatu operasi, misalnya POST, ketika server ingin memberikan resource lain sebagai hasil atau representasi dari operasi tersebut. Client kemudian dapat mengambil resource pada URL Location dengan GET atau HEAD.
Salah satu penggunaan yang umum adalah pola:
POST /form
↓
303 See Other
↓
GET /hasil
Pola tersebut dapat membantu menghindari pengiriman ulang operasi POST ketika pengguna memuat ulang halaman hasil.
Dengan demikian, 303 memiliki karakteristik yang berbeda dari 307 dan 308 karena request berikutnya diarahkan sebagai permintaan pengambilan menggunakan GET atau HEAD.
4. Redirect 307 — Temporary Redirect
307 Temporary Redirect memiliki fungsi yang mirip dengan 302, yaitu menunjukkan pengalihan sementara. Perbedaan pentingnya adalah metode request tidak boleh diubah ketika redirect otomatis dilakukan.
Metode dan body request digunakan kembali pada request yang dialihkan.
Misalnya:
POST /upload
↓
307 Temporary Redirect
↓
POST /upload-new
Metode POST tetap digunakan pada request berikutnya.
RFC 9110 secara eksplisit menyatakan bahwa user agent tidak boleh mengubah metode request ketika melakukan automatic redirection menggunakan 307.
Karena itu, 307 dapat digunakan ketika pengalihan bersifat sementara tetapi aplikasi tetap membutuhkan metode request yang sama.
Perbedaan 302 dan 307
| Aspek | 302 | 307 |
|---|---|---|
| Sifat | Sementara | Sementara |
| URL tujuan | Location |
Location |
| Metode request | Untuk alasan historis, POST dapat diubah menjadi GET |
Harus dipertahankan |
| Body request | Dapat tidak digunakan kembali jika metode berubah | Digunakan kembali pada redirect otomatis |
| Cocok untuk request non-GET | Perlu memperhatikan perilaku metode | Lebih jelas karena metode tidak boleh berubah |
Perbedaan ini penting terutama pada aplikasi yang menggunakan metode seperti POST, PUT, atau metode HTTP lain selain GET.
5. Redirect 308 — Permanent Redirect
308 Permanent Redirect menunjukkan bahwa resource telah dipindahkan secara permanen, dengan karakteristik utama bahwa metode request tidak boleh diubah ketika redirect otomatis dilakukan.
Body request juga digunakan kembali dalam redirect otomatis.
Contohnya:
HTTP/1.1 308 Permanent Redirect
Location: https://example.com/tujuan-baru
Jika request awal menggunakan POST, request yang mengikuti redirect 308 tetap menggunakan POST.
POST /alamat-lama
↓
308 Permanent Redirect
↓
POST /alamat-baru
Hal tersebut membuat 308 berbeda dari 301. Keduanya menunjukkan pengalihan permanen, tetapi 308 memberikan aturan yang lebih tegas mengenai pemeliharaan metode request.
Status 308 dapat digunakan ketika URL berubah secara permanen tetapi aplikasi perlu memastikan metode request tetap sama.
6. Perbedaan 301, 302, 303, 307, dan 308
Agar lebih mudah dipahami, perbedaan utamanya dapat diringkas sebagai berikut:
| Status | Jenis | Sifat | Metode request |
|---|---|---|---|
| 301 | Moved Permanently | Permanen | Untuk alasan historis, POST dapat berubah menjadi GET |
| 302 | Found | Sementara | Untuk alasan historis, POST dapat berubah menjadi GET |
| 303 | See Other | Pengalihan ke resource lain | Request pengambilan menggunakan GET atau HEAD |
| 307 | Temporary Redirect | Sementara | Harus dipertahankan |
| 308 | Permanent Redirect | Permanen | Harus dipertahankan |
Perbedaan tersebut berasal dari semantik HTTP yang ditetapkan dalam RFC 9110. Khususnya, 307 dan 308 dibuat untuk menghilangkan ambiguitas mengenai perubahan metode request yang dapat terjadi pada 301 dan 302.
7. Bagaimana dengan Redirect 300 dan 304?
Tidak semua status 3xx memiliki fungsi yang sama dengan redirect URL yang biasanya ditemui ketika membuka website.
300 Multiple Choices
Status 300 Multiple Choices menunjukkan bahwa terdapat lebih dari satu representasi atau pilihan yang dapat digunakan untuk memenuhi request. Server dapat memberikan informasi mengenai beberapa pilihan kepada client.
Status 300 relatif jarang digunakan dalam praktik dibandingkan kode redirect yang lebih umum seperti 301 dan 302.
304 Not Modified
Sementara itu, 304 Not Modified berkaitan dengan HTTP caching, bukan pengalihan pengguna ke URL baru.
Ketika browser atau client melakukan conditional request dan resource belum berubah, server dapat memberikan 304 sehingga client dapat menggunakan versi yang sudah tersimpan di cache.
Jadi, meskipun 304 berada dalam kelompok 3xx, status ini tidak seharusnya dipahami sebagai redirect URL seperti 301 atau 302.
8. Redirect Menggunakan Header Location
Redirect HTTP yang mengarahkan client ke URI lain umumnya menggunakan header HTTP bernama Location.
Contohnya:
HTTP/1.1 301 Moved Permanently
Location: https://example.com/halaman-baru
Header Location menunjukkan URI yang menjadi tujuan redirect.
URI tersebut dapat ditulis dalam bentuk absolut maupun relatif, misalnya:
Location: https://example.com/halaman-baru
atau:
Location: /halaman-baru
Keduanya merupakan bentuk yang didukung oleh HTTP.
Browser kemudian dapat mengikuti URI tersebut berdasarkan status redirect yang diterimanya.
9. Bagaimana Memilih Jenis Redirect?
Pemilihan redirect sebaiknya didasarkan pada tujuan pengalihan, bukan sekadar memilih kode yang paling sering digunakan.
Secara umum:
- Gunakan 301 ketika URL berpindah secara permanen dan perubahan metode request bukan masalah.
- Gunakan 302 untuk pengalihan sementara ketika perilaku metode sesuai dengan kebutuhan aplikasi.
- Gunakan 303 ketika hasil operasi perlu diambil melalui resource lain menggunakan
GETatauHEAD. - Gunakan 307 ketika pengalihan sementara harus mempertahankan metode dan body request.
- Gunakan 308 ketika pengalihan permanen harus mempertahankan metode dan body request.
Dengan memahami perbedaan tersebut, pemilik website dapat menghindari penggunaan status redirect secara sembarangan, terutama pada website yang memiliki formulir, transaksi, API, atau proses yang menggunakan metode HTTP selain GET.
Kesimpulan
Kode redirect yang sering dibahas dalam pengelolaan website adalah 301, 302, 303, 307, dan 308. Perbedaannya tidak hanya terletak pada permanen atau sementaranya perpindahan URL, tetapi juga pada bagaimana browser atau client menangani metode request.
Untuk kebutuhan pengelolaan URL website secara umum, 301 biasanya berkaitan dengan perpindahan permanen, sedangkan 302 digunakan untuk perpindahan sementara. Sementara itu, 307 dan 308 memberikan aturan yang lebih tegas agar metode request tetap dipertahankan.
Pemahaman mengenai jenis-jenis redirect ini menjadi dasar sebelum membahas penyebab website melakukan redirect, yang akan dibahas pada Bagian berikutnya.
Ingin mempelajari lebih banyak seputar web development, cloud computing, keamanan siber, server, hingga berbagai tren teknologi terbaru? Kunjungi blog Hosteko untuk mendapatkan artikel yang informatif, mudah dipahami, dan selalu diperbarui mengikuti perkembangan dunia digital.
Jangan lewatkan berbagai panduan, tips, serta tutorial yang dapat membantu Anda mengembangkan website, meningkatkan performa bisnis online, dan memperluas wawasan di bidang teknologi. Temukan artikel menarik lainnya hanya di Hosteko Blog dan terus ikuti informasi terbaru untuk mendukung perjalanan digital Anda.
