Apa perbedaan antara Server.Transfer
dan Response.Redirect
?
- Apa kelebihan dan kekurangan masing-masing?
- Kapan yang satu lebih baik dari yang lain?
- Kapan salah satu tidak tepat?
Server.TransferRequest
bukan Server.Transfer
.
Apa perbedaan antara Server.Transfer
dan Response.Redirect
?
Server.TransferRequest
bukan Server.Transfer
.
Jawaban:
Response.Redirect
cukup mengirim pesan (HTTP 302) ke browser.
Server.Transfer
terjadi tanpa browser mengetahui apa pun, browser meminta halaman, tetapi server mengembalikan konten yang lain.
Response.Redirect()
akan mengirim Anda ke halaman baru, memperbarui bilah alamat dan menambahkannya ke Riwayat Peramban. Di browser Anda, Anda dapat mengklik kembali.
Server.Transfer()
tidak mengubah bilah alamat. Anda tidak bisa membalas.
Saya gunakan Server.Transfer()
ketika saya tidak ingin pengguna melihat ke mana saya pergi. Terkadang pada halaman jenis "memuat".
Kalau tidak, saya akan selalu menggunakan Response.Redirect()
.
To be Short: Response.Redirect
cukup beri tahu browser untuk mengunjungi halaman lain. Server.Transfer
membantu mengurangi permintaan server, menjaga URL tetap sama dan, dengan sedikit bug-bashing, memungkinkan Anda untuk mentransfer string kueri dan variabel bentuk.
Sesuatu yang saya temukan dan setujui dengan ( sumber ):
Server.Transfer
serupa karena mengirim pengguna ke halaman lain dengan pernyataan sepertiServer.Transfer("WebForm2.aspx")
. Namun, pernyataan itu memiliki sejumlah kelebihan dan kekurangan yang berbeda.Pertama, mentransfer ke halaman lain menggunakan
Server.Transfer
sumber daya server. Alih-alih mengatakan browser untuk mengarahkan, itu hanya mengubah "fokus" pada server Web dan mentransfer permintaan. Ini berarti Anda tidak mendapatkan cukup banyak permintaan HTTP yang datang, yang karenanya memudahkan tekanan pada server Web Anda dan membuat aplikasi Anda berjalan lebih cepat.Tetapi hati-hati: karena proses "transfer" hanya dapat berfungsi pada situs-situs yang berjalan di server; Anda tidak dapat menggunakan
Server.Transfer
untuk mengirim pengguna ke situs eksternal. HanyaResponse.Redirect
bisa melakukan itu.Kedua,
Server.Transfer
pertahankan URL asli di browser. Ini benar-benar dapat membantu merampingkan teknik entri data, meskipun mungkin membuat kebingungan saat debugging.Itu belum semuanya:
Server.Transfer
Metode ini juga memiliki parameter kedua— "preserveForm". Jika Anda menyetel ini keTrue
, menggunakan pernyataan sepertiServer.Transfer("WebForm2.aspx", True)
, string kueri yang ada dan variabel bentuk apa pun masih akan tersedia untuk halaman yang Anda transfer.Misalnya, jika WebForm1.aspx Anda memiliki kontrol TextBox yang disebut TextBox1 dan Anda ditransfer ke WebForm2.aspx dengan parameter preserveForm diatur ke True, Anda akan dapat mengambil nilai kontrol TextBox halaman asli dengan referensi
Request.Form("TextBox1")
.
maintaining the original URL... ...really help streamline data entry techniques
?
Response.Redirect()
harus digunakan ketika:
Server.Transfer()
harus digunakan ketika:
Response.Redirect redirect halaman ke halaman lain setelah halaman pertama tiba ke klien. Jadi klien tahu pengalihan.
Server.Transfer keluar dari eksekusi halaman saat ini. Klien tidak tahu pengalihan. Ini memungkinkan Anda untuk mentransfer string kueri dan variabel bentuk.
Jadi itu tergantung kebutuhan Anda untuk memilih mana yang lebih baik.
Response.Redirect
sehingga memuat halaman asli meskipun saya telah menelepon Response.Redirect
?
"response.redirect" dan "server.transfer" membantu mentransfer pengguna dari satu halaman ke halaman lainnya saat halaman sedang dieksekusi. Tetapi cara mereka melakukan transfer / redirect ini sangat berbeda.
Jika Anda seorang pria visual dan ingin melihat demonstrasi daripada teori saya sarankan untuk melihat video facebook di bawah ini yang menjelaskan perbedaannya dengan cara yang lebih demonstratif.
https://www.facebook.com/photo.php?v=762186150488997
Perbedaan utama di antara mereka adalah siapa yang melakukan transfer. Di "response.redirect" transfer dilakukan oleh browser sedangkan di "server.transfer" itu dilakukan oleh server. Mari kita coba memahami pernyataan ini secara lebih rinci.
Dalam "Server.Transfer" berikut ini adalah urutan bagaimana transfer terjadi: -
1. Pengguna mengirimkan permintaan ke halaman ASP.NET. Pada gambar di bawah ini permintaan dikirim ke "WebForm1" dan kami ingin menavigasi ke "Webform2".
2. Server mulai menjalankan "Webform1" dan siklus hidup halaman dimulai. Tetapi sebelum siklus hidup lengkap dari halaman selesai "Server.transfer" terjadi pada "WebForm2".
3. Objek halaman "Webform2" dibuat, siklus hidup halaman penuh dieksekusi dan output respon HTML kemudian dikirim ke browser.
Sementara di "Response.Redirect" berikut ini adalah urutan acara untuk navigasi: -
1. Klien (browser) mengirim permintaan ke halaman. Pada gambar di bawah ini permintaan dikirim ke "WebForm1" dan kami ingin menavigasi ke "Webform2".
2.Life cycle "Webform1" mulai dijalankan. Tetapi di antara siklus hidup "Response.Redirect" terjadi.
3.Sekarang alih-alih server melakukan pengalihan, ia mengirim perintah HTTP 302 ke browser. Perintah ini memberi tahu browser bahwa ia harus memulai permintaan GET ke halaman "Webform2.aspx".
4.Browser menginterpretasikan perintah 302 dan mengirimkan permintaan GET untuk "Webform2.aspx".
Dengan kata lain "Server.Transfer" dijalankan oleh server sementara "Response.Redirect" dijalankan oleh browser. "Response.Redirect" perlu dua permintaan untuk melakukan redirect halaman.
Jadi kapan harus menggunakan "Server.Transfer" dan kapan menggunakan "Response.Redirect"?
Gunakan "Server.Transfer" ketika Anda ingin menavigasi halaman yang berada di server yang sama, gunakan "Response.Redirect" ketika Anda ingin menavigasi antara halaman yang berada di server dan domain yang berbeda.
Di bawah ini adalah tabel ringkasan yang menuliskan perbedaan dan skenario yang digunakan.
Server.Transfer
: server yang sama atau situs web IIS yang sama ?
Keindahan Server.Transfer adalah apa yang dapat Anda lakukan dengannya:
TextBox myTxt = (TextBox)this.Page.PreviousPage.FindControl("TextBoxID");
Anda bisa mendapatkan apa pun dari halaman sebelumnya menggunakan metode di atas selama Anda menggunakan Server.Transfer tetapi tidak Response.Redirect
Selain komentar ScarletGarden, Anda juga perlu mempertimbangkan dampak mesin pencari dan pengalihan Anda. Sudahkah halaman ini dipindahkan secara permanen? Untuk sementara? Itu membuat perbedaan.
lihat: Response.Redirect vs. "301 Pindah Secara Permanen" :
Kita semua pernah menggunakan Response.Redirect pada satu waktu atau yang lain. Ini adalah cara cepat dan mudah untuk membuat pengunjung diarahkan ke arah yang benar jika mereka entah bagaimana berakhir di tempat yang salah. Tetapi tahukah Anda bahwa Response.Redirect mengirim kode status respons HTTP "302 Found" ketika Anda mungkin benar-benar ingin mengirim "301 Pindah Secara Permanen"?
Perbedaannya tampak kecil, tetapi dalam kasus-kasus tertentu itu sebenarnya dapat membuat perbedaan besar. Misalnya, jika Anda menggunakan kode respons "301 Moved Permanently", sebagian besar mesin pencari akan menghapus tautan usang dari indeks mereka dan menggantinya dengan yang baru. Jika Anda menggunakan "302 Ditemukan", mereka akan terus kembali ke halaman lama ...
Transfer sepenuhnya pada sisi server. Bilah alamat klien tetap konstan. Beberapa kompleksitas tentang transfer konteks antar permintaan. Pembilasan dan memulai kembali penangan halaman bisa jadi mahal, jadi lakukan transfer Anda di awal pipeline misalnya dalam HttpModule selama BeginRequest. Baca dokumen MSDN dengan hati-hati, dan uji dan pahami nilai-nilai baru HttpContext.Request - terutama dalam skenario Postback. Kami biasanya menggunakan Server.Transfer untuk skenario kesalahan.
Redirect mengakhiri permintaan dengan status 302 dan respons pulang-pergi sisi klien dengan dan memakan pengecualian secara internal (hit server minor - tergantung berapa banyak yang Anda lakukan sehari) Klien kemudian menavigasi ke alamat baru. Bilah alamat peramban & pembaruan riwayat, dll. Klien membayar biaya pulang-pergi tambahan - biaya bervariasi tergantung pada latensi. Dalam bisnis kami, kami mengarahkan banyak hal. Kami menulis modul sendiri untuk menghindari biaya pengecualian.
Ada banyak perbedaan seperti yang ditentukan di atas. Terlepas dari semua itu, ada satu lagi perbedaan. Response.Redirect()
dapat digunakan untuk mengalihkan pengguna ke halaman mana pun yang bukan bagian dari aplikasi tetapi Server.Transfer()
hanya dapat digunakan untuk mengarahkan pengguna di dalam aplikasi.
//This will work.
Response.Redirect("http://www.google.com");
//This will not work.
Server.Transfer("http://www.google.com");
Response.Redirect lebih mahal karena menambahkan perjalanan tambahan ke server untuk mencari tahu ke mana harus pergi.
Server.Transfer lebih efisien namun dapat sedikit salah mengarahkan pengguna karena Url tidak berubah secara fisik.
Dalam pengalaman saya, perbedaan kinerja belum cukup signifikan untuk menggunakan pendekatan yang terakhir
Server.Transfer tidak mengubah URL di browser klien, jadi secara efektif browser tidak tahu Anda berubah menjadi penangan sisi server lainnya. Response.Redirect memberitahu browser untuk pindah ke halaman yang berbeda, sehingga url di bilah judul berubah.
Server.Transfer sedikit lebih cepat karena menghindari satu bolak-balik ke server, tetapi perubahan url mungkin tidak baik atau buruk untuk Anda, tergantung pada apa yang Anda coba lakukan.
Response.Redirect: memberi tahu browser bahwa halaman yang diminta dapat ditemukan di lokasi baru. Browser kemudian memulai permintaan lain ke halaman baru memuat isinya di browser. Ini menghasilkan dua permintaan oleh browser.
Server.Transfer: Ini mentransfer eksekusi dari halaman pertama ke halaman kedua di server. Sejauh menyangkut klien browser, ia membuat satu permintaan dan halaman awal adalah yang merespons dengan konten. Manfaat dari pendekatan ini adalah satu perjalanan pulang pergi ke server dari browser klien. Juga, setiap variabel bentuk yang diposting dan parameter string kueri juga tersedia untuk halaman kedua.
Lebih detail tentang Transfer (), sebenarnya adalah Server.Execute () + Response.End (), kode sumbernya di bawah (dari Mono / .net 4.0):
public void Transfer (string path, bool preserveForm)
{
this.Execute (path, null, preserveForm, true);
this.context.Response.End ();
}
dan untuk Execute (), apa yang harus dijalankan adalah handler dari path yang diberikan, lihat
ASP.NET tidak memverifikasi bahwa pengguna saat ini berwenang untuk melihat sumber daya yang dikirimkan oleh metode Execute . Meskipun logika otorisasi dan otentikasi ASP.NET berjalan sebelum penangan sumber daya asli dipanggil, ASP.NET secara langsung memanggil penangan yang ditunjukkan oleh metode Execute dan tidak menjalankan kembali logika otentikasi dan otorisasi untuk sumber daya baru. Jika kebijakan keamanan aplikasi Anda mengharuskan klien memiliki otorisasi yang sesuai untuk mengakses sumber daya, aplikasi harus memaksa otorisasi ulang atau memberikan mekanisme kontrol akses khusus.
Anda dapat memaksa otorisasi ulang dengan menggunakan metode Redirect alih-alih metode Execute . Redirect melakukan pengalihan sisi klien di mana browser meminta sumber daya baru. Karena pengalihan ini adalah permintaan baru yang masuk ke sistem, itu tunduk pada semua logika otentikasi dan otorisasi dari kedua Layanan Informasi Internet (IIS) dan kebijakan keamanan ASP.NET.
Response.Redirect melibatkan perjalanan pulang-pergi tambahan dan memperbarui bilah alamat.
Server.Transfer tidak menyebabkan bilah alamat berubah, server merespons permintaan dengan konten dari halaman lain
misalnya
Response.Redirect: -
Server.Transfer: -
Response.Redirect
Kelebihan: - TENANG - Ini mengubah bilah alamat, alamat dapat digunakan untuk mencatat perubahan keadaan antara permintaan.
Cons: - Lambat - Ada round-trip tambahan antara klien dan server. Ini bisa mahal ketika ada latensi yang substansial antara klien dan server.
Server.Transfer
Pro: - Cepat.
Kontra: - Status hilang - Jika Anda menggunakan Server.Transfer untuk mengubah status aplikasi sebagai respons terhadap kiriman balik, jika laman tersebut dimuat ulang, status itu akan hilang, karena bilah alamat akan sama seperti sebelumnya. atas permintaan pertama.
Response.Redirect Response.Redirect () akan mengirim Anda ke halaman baru, memperbarui bilah alamat dan menambahkannya ke Riwayat Peramban. Di browser Anda, Anda dapat mengklik kembali. Ini mengalihkan permintaan ke beberapa halaman HTML biasa di server kami atau ke beberapa server web lainnya. Ini menyebabkan bolak-balik tambahan ke server pada setiap permintaan. Itu tidak menyimpan String Query dan Variabel Formulir dari permintaan asli. Ini memungkinkan untuk melihat URL yang dialihkan baru di mana ia diarahkan di browser (dan dapat membookmarknya jika diperlukan). Tanggapan. Redirect hanya mengirim pesan ke browser (HTTP 302).
Server.Transfer Server.Transfer () tidak mengubah bilah alamat, kami tidak bisa membalas. Seseorang harus menggunakan Server.Transfer () ketika dia tidak ingin pengguna melihat ke mana ia pergi. Kadang di halaman jenis "memuat". Ini mentransfer permintaan halaman saat ini ke halaman .aspx lain di server yang sama. Ini menjaga sumber daya server dan menghindari pulang pergi yang tidak perlu ke server. Ini mempertahankan String Query dan Variabel Bentuk (opsional). Itu tidak menunjukkan URL asli di mana ia mengarahkan permintaan di Browser Web pengguna. Server.Transfer terjadi tanpa browser mengetahui apa-apa, browser meminta halaman, tetapi server mengembalikan konten yang lain.