Pengalihan HTTP dilakukan melalui kode HTTP 301, dan 302 (mungkin juga kode lain) dan bidang tajuk yang dikenal sebagai "Lokasi" yang memiliki alamat tempat baru untuk dituju. Namun, browser selalu mengirim permintaan "GET" ke URL itu.
Namun, berkali-kali Anda perlu mengarahkan pengguna ke domain lain melalui POST (misalnya pembayaran bank). Ini adalah skenario umum, dan benar-benar persyaratan. Adakah yang tahu mengapa persyaratan umum seperti itu diabaikan dalam spesifikasi HTTP? Solusinya adalah mengirim formulir (dengan parameter di bidang tersembunyi) dengan tindakan yang ditetapkan ke lokasi target (nilai bidang header Lokasi ) dan gunakan setTimeout
untuk mengirimkan formulir ke lokasi target.
web-development
web-applications
http
Saeed Neamati
sumber
sumber
Jawaban:
Dalam HTTP 1.1, sebenarnya ada kode status ( 307 ) yang menunjukkan bahwa permintaan harus diulang menggunakan metode yang sama dan memposting data .
Seperti yang dikatakan orang lain, ada potensi penyalahgunaan di sini yang mungkin menjadi alasan mengapa banyak kerangka berpegang pada 301 dan 302 dalam abstraksi mereka. Namun, dengan pemahaman yang tepat dan penggunaan yang bertanggung jawab, Anda harus dapat mencapai apa yang Anda cari.
Perhatikan bahwa sesuai dengan spesifikasi W3.org , ketika
METHOD
tidakHEAD
atauGET
, agen pengguna harus meminta pengguna sebelum menjalankan kembali permintaan di lokasi baru. Anda juga harus memberikan catatan dan mekanisme mundur untuk pengguna jika agen pengguna lama tidak yakin apa yang harus dilakukan dengan 307.Menggunakan formulir ini:
Dan memiliki Test307.aspx cukup mengembalikan 307 dengan Location: http://google.com , Chrome 13 dan Fiddler mengonfirmasi bahwa "test = the test" memang diposting ke Google. Tentu saja respons selanjutnya adalah 405 karena Google tidak mengizinkan POST, tetapi ini menunjukkan mekanika.
Untuk informasi lebih lanjut, lihat Daftar kode status HTTP dan spesifikasi W3.org .
sumber
Saya menemukan penjelasan yang bagus di halaman ini di sini .
Meskipun saya bukan penggemar membatasi pengguna secara teknis untuk mencegah mereka menyebabkan kekacauan yang tidak diinginkan atau melakukan kerusakan yang tidak diinginkan pada aplikasi mereka, saya dapat memahami intinya dan itu masuk akal.
sumber
GET (dan beberapa metode lain) didefinisikan sebagai 'AMAN' dalam spesifikasi http ( RFC 2616 ):
Ini berarti bahwa permintaan GET tidak boleh memiliki konsekuensi serius bagi pengguna, selain melihat sesuatu yang mungkin tidak ingin mereka lihat, tetapi permintaan POST dapat mengubah sumber daya yang penting bagi mereka, atau orang lain.
Meskipun ini telah berubah dengan JavaScript, secara tradisional ada antarmuka pengguna yang berbeda - pengguna dapat memicu permintaan GET dengan mengklik tautan, tetapi harus mengisi formulir untuk memicu permintaan POST. Saya pikir para desainer HTTP tertarik untuk mempertahankan perbedaan antara metode yang aman dan tidak aman.
Saya juga tidak berpikir perlu untuk mengarahkan ke POST. Setiap tindakan yang perlu dilakukan mungkin dapat dilakukan dengan memanggil fungsi dalam kode sisi server, atau jika perlu terjadi pada server yang berbeda maka alih-alih mengirim pengalihan yang berisi URL untuk browser ke POST ke, server bisa membuat permintaan ke server itu sendiri, bertindak seperti proxy untuk pengguna.
sumber