Saya perlu mengalihkan pengguna dari satu halaman ke halaman lain, tetapi saya perlu mempertahankan string perujuk asli. Jadi, misalnya, jika mereka memulai di http://www.othersite.com/pageA.jsp , klik tautan yang mengarahkan mereka ke http://www.example.com/pageB.jsp , yang kemudian menjalankan 302 alihkan ke http://www.example.com/pageC.jsp , saya perlu memuat string perujukhttp://www.othersite.com/pageA.jsp
Apakah ini perilaku normal untuk pengalihan 302? Atau akankah perujuk asli saya dibatalkan, demi http://www.example.com/pageB.jsp
? Itu tidak diinginkan.
Saya tidak tahu apakah ada bedanya, tapi saya bekerja di JSP, dan saya menggunakan response.sendRedirect()
untuk menjalankan 302 redirect.
Saya harus menyebutkan bahwa saya melakukan percobaan dengan ini, dan tampaknya menyimpan string pengarah asli ( http://www.othersite.com/pageA.jsp
) tetapi saya hanya ingin memastikan ini adalah perilaku default normal, dan bukan sesuatu yang aneh di pihak saya.
Meskipun saat ini saya menggunakan pengalihan 302, saya mungkin dapat menggunakan pengalihan 301. Tahukah Anda jika perilaku untuk pengalihan 301 lebih dapat diandalkan?
sumber
Jawaban:
Jawaban singkatnya adalah tidak ditentukan dalam RFC 2616 yang relevan http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.36 baik untuk header Referer atau 302 kode status.
Taruhan terbaik Anda adalah melakukan tes dengan beberapa browser dan melihat apakah ada perilaku konsensus.
Untuk sabuk lengkap dan kurung kurawal, enkode perujuk asli di URL pengalihan sehingga Anda dapat menjamin untuk mengambilnya kembali.
sumber
Saya tidak tahu tentang 302, tetapi saya menguji 301 pada beberapa browser hari ini, berikut hasilnya:
SKENARIO : pengguna mengklik link di domainX yang mengarah ke domainA. domainA melakukan 301 redirect ke domainB.
referer
saat mendarat di domainB adalah: domainX (bahkan saat menggunakan penjelajahan InPrivate dan bahkan saat pengguna membuka tautan di tab baru)referer
saat mendarat di domainB adalah: domainX (bahkan saat pengguna membuka tautan di tab baru)referer
saat mendarat di domainB adalah: domainX (bahkan ketika pengguna membuka tautan di tab baru)referer
saat mendarat di domainB adalah: domainX ( kecuali pengguna membuka tautan di tab baru)referer
saat mendarat di domainB adalah: domainX (bahkan saat pengguna membuka tautan di tab baru)sumber
Pertanyaan bagus. Dalam kasus ini, pengiriman perujuk sepenuhnya bergantung pada browser (karena browser diberitahu untuk membuat permintaan lain ke sumber daya baru).
RFC 2616 tetap bungkam tentang masalah tersebut:
Saya tidak akan mempercayai browser untuk mengirimkan pengarah yang tepat. Saya yakin setidaknya ada satu yang mengirimkan sesuatu yang berbeda dari yang lain.
Solusi
Jika Anda bisa, mengapa tidak menambahkan
?override_referer=<old_url>
parameter ke URL yang Anda alihkan, dan parse nilai itu alih-alih HTTP_REFERER.Dengan cara itu Anda bisa yakin untuk selalu mendapatkan hasil yang benar, dan Anda tidak akan kehilangan apa pun dalam keamanan: Perujuk dapat dipalsukan dengan cara apa pun.
sumber
Saya memiliki masalah yang berlawanan: Saya ingin pengarah itu adalah "halamanB" tetapi tidak ada browser saat ini yang memproses dengan cara ini ...
Jadi saya mencoba dengan pengalihan HTML di halamanB (bukan pengalihan 301 atau 302):
Dan hasilnya mengejutkan:
Semoga ini bisa membantu
sumber