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?
asp.net
redirect
server.transfer
kedar kamthe
sumber
sumber
Server.TransferRequest
bukanServer.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.sumber
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()
.sumber
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 ):
sumber
maintaining the original URL... ...really help streamline data entry techniques
?Response.Redirect()
harus digunakan ketika:Server.Transfer()
harus digunakan ketika:sumber
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.
sumber
Response.Redirect
sehingga memuat halaman asli meskipun saya telah meneleponResponse.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.
sumber
Server.Transfer
: server yang sama atau situs web IIS yang sama ?Keindahan Server.Transfer adalah apa yang dapat Anda lakukan dengannya:
Anda bisa mendapatkan apa pun dari halaman sebelumnya menggunakan metode di atas selama Anda menggunakan Server.Transfer tetapi tidak Response.Redirect
sumber
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" :
sumber
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.
sumber
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 tetapiServer.Transfer()
hanya dapat digunakan untuk mengarahkan pengguna di dalam aplikasi.sumber
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
sumber
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.
sumber
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.
sumber
Lebih detail tentang Transfer (), sebenarnya adalah Server.Execute () + Response.End (), kode sumbernya di bawah (dari Mono / .net 4.0):
dan untuk Execute (), apa yang harus dijalankan adalah handler dari path yang diberikan, lihat
sumber
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.
sumber
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.
sumber