Kode Status HTTP 302 (302 Found): Arti dan Kapan Menggunakannya

Advertisement
Apa Itu Kode Status HTTP 302?
Kode status HTTP 302 — secara resmi disebut 302 Found — adalah kode respons HTTP yang memberi tahu klien (biasanya browser) bahwa sumber daya yang diminta telah dipindahkan sementara ke URL lain. URL baru disediakan dalam header Location respons, dan klien diharapkan mengambil sumber daya dari sana hanya untuk permintaan ini.
Karena perpindahan bersifat sementara, klien harus terus menggunakan URL asli untuk permintaan berikutnya. Mesin pencari, browser, dan bookmark tidak boleh mengganti URL asli dengan target pengalihan. Inilah perbedaan perilaku utama antara HTTP 302 dan 301 Moved Permanently.
Kode 302 termasuk dalam kelas 3xx pengalihan kode status HTTP, yang didefinisikan dalam RFC 9110. Meskipun nama historisnya 'Found', body respons hampir tidak pernah digunakan — browser modern langsung mengikuti header Location tanpa merendernya.
Anatomi Respons 302
Respons kode status HTTP 302 selalu berisi dua elemen penting: baris status itu sendiri dan header Location yang menunjuk ke URL baru. Tanpa header Location yang valid, klien tidak dapat mengikuti pengalihan.
Baris status —
HTTP/1.1 302 Found(atauHTTP/2 302di HTTP/2)Header Location — URL tujuan yang harus diikuti klien (wajib)
Cache-Control — biasanya
no-cacheagar browser tidak menyimpan target pengalihan secara permanenBody — biasanya kosong; server bisa menyertakan halaman HTML kecil untuk klien lama (
<html><body><a href="...">Klik di sini</a></body></html>)
HTTP/1.1 302 Found
Location: https://www.example.com/new-page
Content-Type: text/html; charset=UTF-8
Content-Length: 0
Cache-Control: no-cache, no-store
Date: Mon, 27 Apr 2026 14:00:00 GMTHeader Location bisa berupa URL absolut (https://example.com/path) atau URL relatif terhadap path (/path). Klien HTTP modern menerima keduanya, meskipun URL absolut direkomendasikan untuk kejelasan.
302 vs 301 vs 307 vs 308: Pengalihan Mana yang Harus Digunakan?
HTTP mendefinisikan lima kode status pengalihan umum, dan memilih yang tepat penting untuk caching, SEO, dan pelestarian metode permintaan. Gunakan tabel ini sebagai matriks keputusan:
| Kode | Permanensi | Metode Dipertahankan? | Di-cache Browser? | Terbaik Untuk |
|---|---|---|---|---|
| 301 Moved Permanently | Permanen | Bisa berubah POST→GET | Ya (agresif) | Perubahan URL permanen, migrasi domain |
| 302 Found | Sementara | Sering berubah POST→GET | Tidak | Alur login, pengujian A/B, pemeliharaan |
| 303 See Other | Sementara | Selalu berubah ke GET | Tidak | Pola POST/Redirect/GET setelah pengiriman formulir |
| 307 Temporary Redirect | Sementara | Ya — dipertahankan | Tidak | Pengalihan sementara yang harus mempertahankan POST/PUT |
| 308 Permanent Redirect | Permanen | Ya — dipertahankan | Ya | Pengalihan permanen yang harus mempertahankan POST/PUT |
Rekomendasi modern: jika perlu pengalihan sementara dan ingin tidak ambigu soal penanganan metode, gunakan 307 alih-alih 302. Kode 307 ditambahkan di HTTP/1.1 justru karena browser secara historis melanggar spesifikasi dengan mengubah POST menjadi GET pada 302 — dan perilaku salah itu menjadi sangat luas hingga menjadi standar de facto.
Kapan Harus Menggunakan Pengalihan 302?
Gunakan kode status HTTP 302 setiap kali pengalihan benar-benar sementara — yaitu ketika Anda berencana menghapus atau mengubah target pengalihan di masa depan. Kasus penggunaan sah yang umum:
Pengalihan login — Mengirim pengguna belum diautentikasi dari
/dashboardke/login, lalu kembali setelah loginPengujian A/B — Mengarahkan 50% pengguna ke varian tanpa mengubah URL kanonik
Halaman pemeliharaan — Mengalihkan semua lalu lintas sementara ke
/maintenancesaat menambal serverRouting geolokasi — Mengirim pengunjung dari
/ke/idatau/usberdasarkan negara, sambil mempertahankan/sebagai entri kanonikPengalihan mobile — Mengalihkan pengguna smartphone dari
example.comkem.example.com(sekarang lebih disukai desain responsif)Halaman produk habis stok — Mengirim pembeli ke kategori sampai produk kembali tersedia
URL promosi singkat —
/black-fridaymengalihkan ke landing kampanye hanya selama promo
Jika salah satunya menjadi permanen, beralih ke 301. Mesin pencari menunggu beberapa bulan sebelum memperlakukan 302 jangka panjang sebagai 301, jadi membiarkan perpindahan permanen di 302 menelan sinyal peringkat selama periode itu.
Advertisement
Cara Mengirim Kode Status 302
Kebanyakan web server dan framework punya helper bawaan untuk mengirim pengalihan 302. Berikut pola paling umum. Masing-masing menerbitkan HTTP 302 Found dengan header Location — dua satu-satunya hal yang benar-benar dibutuhkan respons 302.
Nginx
Di Nginx, gunakan direktif return dengan kode 302 (default jika kode dihilangkan juga 302):
server {
listen 80;
server_name example.com;
# Pengalihan sementara (302 Found)
location /old-page {
return 302 https://example.com/new-page;
}
}Apache (.htaccess)
Di Apache, gunakan Redirect dengan kode 302 atau RewriteRule dengan flag [R=302,L]:
# Pengalihan sementara sederhana
Redirect 302 /old-page https://example.com/new-page
# Atau dengan mod_rewrite untuk pencocokan pola
RewriteEngine On
RewriteRule ^maintenance$ /maintenance.html [R=302,L]Node.js (Express)
Method res.redirect() Express default ke 302 jika tidak ada kode yang diberikan:
// Pengalihan sementara (default 302 Found)
app.get('/dashboard', (req, res) => {
if (!req.user) {
return res.redirect('/login') // mengirim 302
}
// ...render dashboard
})
// Atau eksplisit:
res.redirect(302, '/login')Cara Menguji Kode Status 302
Setelah menerapkan pengalihan 302, verifikasi bahwa itu bekerja dengan benar. Cara tercepat adalah curl dari terminal — itu menunjukkan kode status dan header Location persis tanpa interferensi cache browser.
# Tampilkan hanya header respons (-I) tanpa mengikuti pengalihan
curl -I https://example.com/old-page
# Output yang diharapkan:
# HTTP/2 302
# location: https://example.com/new-page
# cache-control: no-cache
# date: Mon, 27 Apr 2026 14:00:00 GMT
# Ikuti seluruh rantai (-L) dan tampilkan setiap hop
curl -ILs https://example.com/old-page | grep -i 'HTTP/\|location:'Jika tidak punya akses terminal, gunakan Pemeriksa Pengalihan gratis dari DNS Robot untuk melacak seluruh rantai dari lokasi netral, atau Pemeriksa HTTP Headers untuk memeriksa header respons mentah — keduanya melewati cache browser.
Pengalihan 302 dan SEO
Kode status HTTP 302 memberi tahu mesin pencari: 'perpindahan ini sementara, simpan URL asli di indeks.' Itu memiliki konsekuensi langsung untuk sinyal peringkat.
Menurut Google Search Central, 302 tidak mentransfer sinyal peringkat dari URL asli ke target pengalihan seperti yang dilakukan 301. URL asli tetap kanonik. Google masih bisa mengindeks halaman target jika sinyal kanonisasi lain (link internal, sitemap, hreflang) menunjuk ke sana — tapi 302 itu sendiri bukan sinyal kanonik.
Gunakan 301 untuk perpindahan permanen — Pergantian domain, perubahan struktur URL, konsolidasi halaman
Gunakan 302 untuk perpindahan sementara — Alur login, pengujian A/B, pemeliharaan, routing regional
Jangan biarkan perpindahan permanen di 302 — Google menunggu berbulan-bulan sebelum memperlakukan 302 jangka panjang sebagai 301, menelan equity peringkat
Hindari rantai —
A → 302 → B → 302 → Cmengencerkan sinyal dan memperlambat pemuatan halaman. Setiap hop menambah latensi
Mengapa 302 Mengubah Permintaan POST Menjadi GET
Inilah perilaku paling mengejutkan dari HTTP 302. RFC asli menyatakan klien harus mempertahankan metode saat mengikuti pengalihan. Tapi browser awal — Mosaic, Netscape, IE — semua mengubah POST menjadi GET pada 302, dan perilaku salah itu menjadi sangat luas sehingga distandardisasi di WHATWG Fetch Standard.
Hari ini, ketika browser mengirim POST /login dan server merespons dengan 302 Found, browser otomatis mengirim GET /next-page ke target pengalihan. Data formulir hilang. Ini jarang menjadi maksud pengembang server.
# Yang Anda kirim:
POST /submit-form HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
name=Alice&email=alice@example.com
# Server merespons dengan 302:
HTTP/1.1 302 Found
Location: /thank-you
# Browser mengikuti dengan GET (data formulir hilang!):
GET /thank-you HTTP/1.1
Host: example.comJika pengalihan perlu mempertahankan metode asli (POST tetap POST, PUT tetap PUT), gunakan 307 Temporary Redirect alih-alih 302. Jika sengaja ingin membuang body dan beralih ke GET — pola klasik POST/Redirect/GET — gunakan 303 See Other. Keduanya tidak ambigu; 302 ambigu.
Advertisement
Masalah 302 Umum dan Cara Memperbaikinya
Ketika HTTP 302 salah, biasanya muncul sebagai salah satu gejala ini. Sebagian besar memiliki solusi sederhana:
`Mendapat 302 alih-alih 200` — Server mengalihkan saat tidak seharusnya. Periksa
.htaccess, konfigurasi Nginx atau middleware framework untuk aturan pengalihan yang tidak diinginkan`302 tanpa header Location` — Respons tidak valid. Browser akan menampilkan halaman kosong. Pastikan kode Anda mengatur header
Locationsebelum mengirim status`302 mengalihkan ke dirinya sendiri` — Loop pengalihan. URL
Locationcocok dengan URL permintaan. Periksa aturan untuk kondisi yang hilang`302 menjatuhkan data formulir` — POST → 302 → GET menjatuhkan body. Beralih ke
307 Temporary Redirectuntuk mempertahankan POST`302 di-cache oleh browser` — Server buggy menyetel
Cache-Control: max-age=...pada pengalihan. TambahkanCache-Control: no-cachedan bersihkan cache browser`302 di production tapi tidak di local` — Biasanya CDN atau load balancer menambahkan pengalihan. Tes langsung ke origin untuk mengisolasi
Loop Pengalihan 302: Cara Mendiagnosis
Loop pengalihan terjadi ketika URL A mengembalikan 302 ke URL B, dan URL B mengembalikan 302 kembali ke A. Setelah 20 hop (di Chrome dan Firefox), browser menampilkan ERR_TOO_MANY_REDIRECTS dan menyerah.
Penyebab tunggal paling umum adalah konflik SSL/HTTPS antara CDN (seperti Cloudflare) dan server origin: CDN terhubung ke origin melalui HTTP, origin mengalihkan HTTP→HTTPS, CDN melepas HTTPS dan terhubung melalui HTTP lagi — loop tak hingga.
# Lacak rantai lengkap (batasi 10 hop untuk menghindari loop tak hingga)
curl -ILs --max-redirs 10 https://example.com 2>&1 | grep -i 'HTTP/\|location:'
# Contoh loop:
# HTTP/2 302
# location: http://example.com/
# HTTP/1.1 302 Found
# Location: https://example.com/
# HTTP/2 302
# location: http://example.com/ <-- loop dikonfirmasiJika Anda melihat dua URL bergantian di header Location, Anda telah mengonfirmasi loop 302. Untuk panduan perbaikan lengkap, lihat post ERR_TOO_MANY_REDIRECTS. Pemeriksa Pengalihan DNS Robot melacak rantai lengkap dari lokasi netral dan berhenti di titik loop.
Praktik Terbaik Kode Status 302
Mengirim 302 Found dengan benar menghindari sebagian besar bug yang dihadapi pengembang saat mengimplementasikan pengalihan:
Selalu sertakan header Location —
302tanpaLocationtidak valid dan dirender sebagai halaman kosongSelalu setel Cache-Control: no-cache — Jika tidak, beberapa browser men-cache pengalihan untuk sesi, melanggar kontrak 'sementara'
Gunakan URL absolut di Location —
https://example.com/newtidak ambigu;/newbekerja tapi bisa rusak di belakang proxy yang mengubah hostPertahankan pengalihan ke satu hop —
A → 302 → Bbaik;A → 302 → B → 302 → Cmemperlambat pemuatan dan mengencerkan sinyalJangan alihkan dari POST ke halaman lain dengan 302 — Gunakan
303(GET disengaja) atau307(pertahankan POST)Audit pengalihan setiap bulan — Pengalihan sementara lama sering hidup melebihi alasannya. Periksa dengan Redirect Checker
Beralih ke 301 ketika perpindahan menjadi permanen — Jangan biarkan perpindahan permanen di
302lebih dari beberapa minggu
Perilaku Browser dan Cache
Browser dan perantara berbeda menangani HTTP 302 sedikit berbeda. Mengetahui keanehannya menghemat waktu debugging:
| Klien | Perilaku Default pada 302 | Cache Default |
|---|---|---|
| Chrome / Edge | Otomatis ikuti, ubah POST→GET | Tidak di-cache kecuali header mengatakan demikian |
| Firefox | Otomatis ikuti, ubah POST→GET | Tidak di-cache kecuali header mengatakan demikian |
| Safari | Otomatis ikuti, ubah POST→GET | Cache pengalihan sedikit lebih agresif |
| curl (default) | TIDAK ikuti — tampilkan 302 + Location | Tidak ada cache |
| curl -L | Ikuti hingga --max-redirs (default 50) | Tidak ada cache |
| wget (default) | Otomatis ikuti hingga --max-redirect=20 | Tidak ada cache |
| Googlebot | Ikuti, perlakukan sebagai sinyal sementara | Crawl ulang URL asli |
Untuk memverifikasi perilaku pengalihan di kasus tepi (metode POST, loop tak hingga, keberadaan header), Pemeriksa HTTP Headers DNS Robot menampilkan respons mentah tanpa penulisan ulang metode di sisi browser. Baca lebih lanjut tentang pengalihan sementara di dokumentasi MDN dan spesifikasi RFC 9110.
Advertisement
Lacak rantai pengalihan dalam hitungan detik
Gunakan Pemeriksa Pengalihan gratis DNS Robot untuk memeriksa setiap hop dalam rantai pengalihan — kode status, header Location, dan tujuan akhir dari server netral (tanpa cache browser).
Coba Pemeriksa PengalihanAdvertisement
Pertanyaan yang Sering Diajukan
Kode status 302 (HTTP 302 Found) berarti sumber daya yang diminta berada sementara di URL berbeda yang diberikan oleh header Location respons. Klien harus mengikuti pengalihan untuk permintaan ini tetapi tetap menggunakan URL asli untuk permintaan berikutnya. Ini adalah padanan sementara dari 301 Moved Permanently.