เซิร์ฟเวอร์เทียบกับการโอน Response.Redirect


263

ความแตกต่างระหว่างServer.TransferและResponse.Redirectคืออะไร?

  • ข้อดีและข้อเสียของแต่ละข้อคืออะไร
  • เมื่อใดที่เหมาะสมกว่าอีก?
  • เมื่อใดที่ไม่เหมาะสม

3
ข้อดีและข้อเสียมีการระบุไว้ในเว็บไซต์ด้านล่าง developer.com/net/asp/article.php/3299641 สิ่งหนึ่งที่น่าสนใจในบทความคือ Server.Transfer ใช้พลังงานของเซิร์ฟเวอร์มากกว่าเมื่อเทียบกับ Server.Redirect
เรย์ลู

Server.Transfer ลดคำขอหน้าดังนั้นฉันคิดว่ามัน "ดีกว่า" ในส่วนที่ อย่างไรก็ตาม Response.Redirect สามารถส่งผู้ใช้ไปยังไซต์ภายนอกในขณะที่ Server.Transfer ไม่สามารถทำได้
codeConcussion

1
หากคุณกำลังทำงานบนโหมด IIS 7 แบบบูรณาการ, คุณอาจพิจารณาใช้แทนServer.TransferRequest Server.Transfer
Haacked

@ แฮ็คควรอ่านว่าในตอนแรก Server.TransferRequest แก้ปัญหาของฉันด้วย iwth web matrix และ iis7 กราเซีย พวกเขาควรจะวางมันไว้ที่นี่
Jason Sebring

คำตอบ:


234

Response.Redirectเพียงส่งข้อความ(HTTP 302)ลงไปที่เบราว์เซอร์

Server.Transfer เกิดขึ้นโดยที่เบราว์เซอร์ไม่ทราบอะไรเลยเบราว์เซอร์ร้องขอหน้าเว็บ แต่เซิร์ฟเวอร์ส่งคืนเนื้อหาของอีกหน้าหนึ่ง


สิ่งนี้ใช้กับ CSHTML pages กับ web matrix ได้หรือไม่ ฉันดูเหมือนจะไม่สามารถใช้งานได้เมื่อทำ Server.Transfer ไปยังหน้า CSHTML เช่น Server.Transfer ("~ / somepage.cshtml" จริง) แต่ดูเหมือนจะทำงานกับหน้าประเภทอื่น ๆ ใช่ฉันได้ทำการติดตั้งมีดโกนและหน้าใช้งานได้ตามปกติ
Jason Sebring

11
เฮ้รู้แล้ว คุณต้องใช้ Server.TransferRequest สำหรับ cshtml web matrix pages
Jason Sebring

Server.Transfer () โอนไปยังหน้าทางกายภาพเท่านั้นหรือไม่ สำหรับเช่น ถ้าฉันถ่ายโอนไปยัง Server.Transfer ("default / category1.aspx") ดังนั้นจะต้องมีโฟลเดอร์เริ่มต้นและ category1 เป็นหน้า aspx หรือไม่
ihimv

95

Response.Redirect()จะส่งคุณไปยังหน้าใหม่อัปเดตแถบที่อยู่และเพิ่มลงในประวัติเบราว์เซอร์ บนเบราว์เซอร์ของคุณคุณสามารถคลิกกลับ

Server.Transfer()ไม่เปลี่ยนแถบที่อยู่ คุณไม่สามารถตีกลับ

ฉันใช้Server.Transfer()เมื่อฉันไม่ต้องการให้ผู้ใช้เห็นว่าฉันกำลังจะไปที่ไหน บางครั้งในหน้าประเภท "กำลังโหลด"

Response.Redirect()มิฉะนั้นฉันมักจะใช้


75

To be Short: Response.Redirectเพียงบอกเบราว์เซอร์ให้ไปที่หน้าอื่น Server.Transferช่วยลดคำขอของเซิร์ฟเวอร์รักษา URL ให้เหมือนเดิมและด้วยการกดปุ่มบั๊กเล็กน้อยช่วยให้คุณถ่ายโอนสตริงแบบสอบถามและตัวแปรแบบฟอร์ม

สิ่งที่ฉันพบและเห็นด้วยกับ (ที่มา ):

Server.TransferServer.Transfer("WebForm2.aspx")จะคล้ายกันในการที่จะส่งผู้ใช้ไปยังหน้าอื่นที่มีคำสั่งดังกล่าวเป็น อย่างไรก็ตามคำสั่งมีจำนวนข้อดีและข้อเสียที่แตกต่างกัน

ประการแรกการถ่ายโอนไปยังหน้าอื่นโดยใช้การServer.Transfer อนุรักษ์ทรัพยากรเซิร์ฟเวอร์ แทนที่จะบอกให้เบราว์เซอร์เปลี่ยนเส้นทางเพียงเปลี่ยน "โฟกัส" บนเว็บเซิร์ฟเวอร์และถ่ายโอนคำขอ ซึ่งหมายความว่าคุณจะไม่ได้รับคำขอ HTTP จำนวนมากซึ่งจะช่วยลดความกดดันในเว็บเซิร์ฟเวอร์ของคุณและทำให้แอปพลิเคชันของคุณทำงานได้เร็วขึ้น

แต่ระวัง: เนื่องจากกระบวนการ "ถ่ายโอน" สามารถทำงานบนไซต์ที่ทำงานบนเซิร์ฟเวอร์เท่านั้น คุณไม่สามารถใช้Server.Transferส่งผู้ใช้ไปยังไซต์ภายนอก เพียง แต่Response.Redirectสามารถทำเช่นนั้น

ประการที่สองServer.Transferรักษา URL ดั้งเดิมในเบราว์เซอร์ สิ่งนี้สามารถช่วยปรับปรุงเทคนิคการป้อนข้อมูลได้อย่างมีประสิทธิภาพแม้ว่าอาจทำให้สับสนเมื่อทำการดีบั๊ก

นั่นไม่ใช่ทั้งหมด: Server.Transferเมธอดยังมีพารามิเตอร์ตัวที่สอง - "maintainForm" หากคุณตั้งค่านี้เป็นTrueโดยใช้คำสั่งเช่นServer.Transfer("WebForm2.aspx", True)สตริงการสืบค้นที่มีอยู่และตัวแปรรูปแบบใด ๆ จะยังคงมีอยู่ในเพจที่คุณกำลังถ่ายโอนไป

ตัวอย่างเช่นถ้าคุณมี WebForm1.aspx กล่องข้อความควบคุมที่เรียกว่า TextBox1 และคุณโอนไป WebForm2.aspx กับชุดพารามิเตอร์ preserveForm เพื่อ True Request.Form("TextBox1")คุณจะสามารถดึงค่าของตัวควบคุมกล่องข้อความหน้าเดิมโดยการอ้างอิง


10
+1 สำหรับความคิดเห็น แต่ดูเหมือนว่าการคัดลอกคำต่อคำจากdeveloper.com/net/asp/article.php/3299641 ถ้ามันมาจากแหล่งอื่นคุณควรเช่าอ้างอิง
Johnno Nolan

... แต่พวกเขาได้คัดลอกมาพวกเขาควรอ้างอิงคุณ
Johnno Nolan

7
ฉันพูดว่า: สิ่งที่ฉันพบและเห็นด้วย;
TStamper

6
ควรเชื่อมโยงไปยังแหล่งที่มาและใช้การจัดรูปแบบ / การเน้นคำพูดสำหรับชิ้นส่วนที่คัดลอก
Chris W. Rea

1
ทำmaintaining the original URL... ...really help streamline data entry techniquesอย่างไร
JohnB

36

Response.Redirect() ควรใช้เมื่อ:

  • เราต้องการเปลี่ยนเส้นทางคำขอไปยังหน้า HTML ธรรมดา ๆ บนเซิร์ฟเวอร์ของเราหรือไปยังเว็บเซิร์ฟเวอร์อื่น ๆ
  • เราไม่สนใจว่าจะก่อให้เกิด roundtrips เพิ่มเติมไปยังเซิร์ฟเวอร์ในแต่ละคำขอ
  • เราไม่จำเป็นต้องเก็บรักษา Query String และ Form Formables จากคำขอต้นฉบับ
  • เราต้องการให้ผู้ใช้ของเราสามารถเห็น URL เปลี่ยนเส้นทางใหม่ที่ซึ่งเขาถูกเปลี่ยนเส้นทางในเบราว์เซอร์ของเขา (และสามารถคั่นหน้าได้ถ้าจำเป็น)

Server.Transfer() ควรใช้เมื่อ:

  • เราต้องการถ่ายโอนคำขอหน้าปัจจุบันไปยังหน้า. aspx อื่นบนเซิร์ฟเวอร์เดียวกัน
  • เราต้องการรักษาทรัพยากรของเซิร์ฟเวอร์และหลีกเลี่ยงการปัดเศษที่ไม่จำเป็นไปยังเซิร์ฟเวอร์
  • เราต้องการรักษาสตริงของแบบสอบถามและตัวแปรของฟอร์ม (ไม่บังคับ)
  • เราไม่จำเป็นต้องแสดง URL จริงที่เราเปลี่ยนเส้นทางคำขอในเว็บเบราว์เซอร์ของผู้ใช้

2
ชัดเจนยิ่งขึ้นสำหรับฉันนี่เป็นคำตอบที่ดีกว่า
Baljeetsingh

28

Response.Redirect เปลี่ยนเส้นทางหน้าไปยังหน้าอื่นหลังจากหน้าแรกมาถึงลูกค้า ดังนั้นลูกค้ารู้ว่าการเปลี่ยนเส้นทาง

Server.Transfer ออกจากการดำเนินการปัจจุบันของหน้า ลูกค้าไม่รู้จักการเปลี่ยนเส้นทาง จะช่วยให้คุณถ่ายโอนสตริงแบบสอบถามและตัวแปรแบบฟอร์ม

ดังนั้นมันขึ้นอยู่กับความต้องการของคุณในการเลือกที่ดีกว่า


1
ผู้ใช้ที่เป็นอันตรายสามารถเลี่ยงผ่านResponse.Redirectเพื่อโหลดหน้าต้นฉบับได้แม้ว่าฉันได้เรียกไปแล้วResponse.Redirectหรือไม่
northben

@northben - มันไม่ง่ายเลยที่จะพูดว่า "ไม่" เมื่อพูดถึงเทคโนโลยีเพราะเกือบทุกสิ่งสามารถประนีประนอมได้ - แต่ในกรณีนี้พวกเขาจะทำอย่างไร - ฉันจะบอกว่าไม่สามารถทำได้ ... แต่ฉันได้รับการพิสูจน์ผิดหลายครั้ง ในชีวิต.
JonH

23

ป้อนคำอธิบายรูปภาพที่นี่

"response.redirect" และ "server.transfer" ช่วยในการถ่ายโอนผู้ใช้จากหน้าหนึ่งไปยังหน้าอื่นในขณะที่หน้ากำลังดำเนินการ แต่วิธีการถ่ายโอน / เปลี่ยนเส้นทางนี้แตกต่างกันมาก

ในกรณีที่คุณเป็นคนที่มองเห็นและต้องการดูการสาธิตมากกว่าทฤษฎีฉันขอแนะนำให้ดูวิดีโอ Facebook ด้านล่างซึ่งอธิบายความแตกต่างในแบบที่ชัดเจนยิ่งขึ้น

https://www.facebook.com/photo.php?v=762186150488997

ความแตกต่างที่สำคัญระหว่างพวกเขาคือผู้ที่โอน ใน "response.redirect" การถ่ายโอนจะทำโดยเบราว์เซอร์ในขณะที่อยู่ใน "server.transfer" จะทำโดยเซิร์ฟเวอร์ ให้เราพยายามเข้าใจคำแถลงนี้อย่างละเอียดยิ่งขึ้น

ใน "Server.Transfer" ต่อไปนี้เป็นลำดับของการถ่ายโอนที่เกิดขึ้น: -

1. ผู้ใช้ส่งคำขอไปยังเพจ ASP.NET ในรูปด้านล่างคำขอถูกส่งไปที่ "WebForm1" และเราต้องการนำทางไปยัง "Webform2"

2.Server เริ่มทำงาน "Webform1" และวงจรชีวิตของหน้าเริ่มต้นขึ้น แต่ก่อนที่วงจรชีวิตที่สมบูรณ์ของหน้านั้นจะเสร็จสมบูรณ์“ Server.transfer” จะเกิดขึ้นกับ "WebForm2"

3. วัตถุหน้า "Webform2" ถูกสร้างขึ้นวงจรชีวิตเต็มหน้าจะถูกดำเนินการและการตอบสนอง HTML เอาท์พุทจะถูกส่งไปยังเบราว์เซอร์

ป้อนคำอธิบายรูปภาพที่นี่

ในขณะที่ "Response.Redirect" ต่อไปนี้เป็นลำดับเหตุการณ์สำหรับการนำทาง: -

1.Client (เบราว์เซอร์) ส่งคำขอไปยังหน้า ในรูปด้านล่างคำขอถูกส่งไปที่ "WebForm1" และเราต้องการนำทางไปยัง "Webform2"

2. วงจรชีวิตของ "Webform1" เริ่มดำเนินการ แต่ในระหว่างวงจรชีวิต "Response.Redirect" เกิดขึ้น

3. ตอนนี้แทนที่จะเซิร์ฟเวอร์เปลี่ยนเส้นทางเขาส่งคำสั่ง HTTP 302 ไปยังเบราว์เซอร์ คำสั่งนี้บอกเบราว์เซอร์ว่าเขาต้องเริ่มต้นคำขอ GET ไปที่หน้า "Webform2.aspx"

4.Browser ตีความคำสั่ง 302 และส่งคำขอ GET สำหรับ "Webform2.aspx"

ป้อนคำอธิบายรูปภาพที่นี่

กล่าวอีกนัยหนึ่งคือ "เซิร์ฟเวอร์การถ่ายโอน" จะถูกดำเนินการโดยเซิร์ฟเวอร์ในขณะที่ "การตอบสนองการเปลี่ยนเส้นทาง" จะถูกดำเนินการโดยเบราว์เซอร์ thr "Response.Redirect" ต้องมีสองคำขอในการเปลี่ยนเส้นทางของหน้า

ดังนั้นเมื่อใดควรใช้ "Server.Transfer" และเมื่อใดควรใช้ "Response.Redirect"?

ใช้ "Server.Transfer" เมื่อคุณต้องการนำทางหน้าเว็บที่อยู่บนเซิร์ฟเวอร์เดียวกันใช้ "Response.Redirect" เมื่อคุณต้องการนำทางระหว่างหน้าเว็บที่อยู่บนเซิร์ฟเวอร์และโดเมนที่ต่างกัน

ป้อนคำอธิบายรูปภาพที่นี่

ด้านล่างเป็นตารางสรุปที่แสดงความแตกต่างและสถานการณ์ที่จะใช้

ป้อนคำอธิบายรูปภาพที่นี่


มีประโยชน์เมื่อมีปัญหาในการใช้Server.Transfer และ Response.Redirect stackoverflow.com/questions/1433448/thread-was-being-aborted
Kiquenet

สำหรับServer.Transfer: เซิร์ฟเวอร์เดียวกันหรือเว็บไซต์ IIS เดียวกันหรือไม่
Kiquenet

คุณช่วยกรุณาอัปเดตย่อหน้าต่อไปนี้เพราะอย่างน้อย 6 ตัวอักษรที่จำเป็นสำหรับการแก้ไขของฉัน: ในคำอื่น ๆ "Server.Transfer" ถูกดำเนินการโดยเซิร์ฟเวอร์ในขณะที่ "Response.Redirect" ถูกเรียกใช้โดยเบราว์เซอร์thr "Response.Redirect" ต้องมีสองคำขอในการเปลี่ยนเส้นทางของหน้า
paul cheung

11

ความสวยงามของ Server.Transfer คือสิ่งที่คุณสามารถทำได้:

TextBox myTxt = (TextBox)this.Page.PreviousPage.FindControl("TextBoxID");

คุณสามารถได้อะไรจากหน้าก่อนหน้าของคุณโดยใช้วิธีการด้านบนตราบใดที่คุณใช้ Server.Transfer แต่ไม่ใช่ Response.Redirect


10

นอกจากความคิดเห็นของ ScarletGarden แล้วคุณต้องพิจารณาผลกระทบของเครื่องมือค้นหาและการเปลี่ยนเส้นทางของคุณด้วย หน้านี้ย้ายอย่างถาวรหรือไม่? ชั่วคราว? มันสร้างความแตกต่าง

ดู: Response.Redirect vs. "301 Moved อย่างถาวร" :

เราทุกคนใช้ Response.Redirect พร้อมกัน มันเป็นวิธีที่รวดเร็วและง่ายดายในการทำให้ผู้มาเยี่ยมชมชี้ไปในทิศทางที่ถูกต้องหากพวกเขาลงเอยที่ผิด แต่คุณทราบหรือไม่ว่า Response.Redirect ส่งรหัสสถานะการตอบกลับ HTTP ของ "302 Found" เมื่อคุณอาจต้องการส่ง "301 Moved อย่างถาวร"

ความแตกต่างนั้นดูเล็ก แต่ในบางกรณีมันสามารถสร้างความแตกต่างได้อย่างมาก ตัวอย่างเช่นหากคุณใช้รหัสตอบสนอง "301 ย้ายอย่างถาวร" เครื่องมือค้นหาส่วนใหญ่จะลบลิงก์ที่ล้าสมัยออกจากดัชนีและแทนที่ด้วยลิงก์ใหม่ หากคุณใช้ "พบ 302" พวกเขาจะกลับไปที่หน้าเก่าต่อไป ...


ลิงก์ไม่ทำงาน ใช้ลิงค์ web.archive.orgนี้แทน
stomy

6

การถ่ายโอนเป็นฝั่งเซิร์ฟเวอร์ทั้งหมด แถบที่อยู่ลูกค้าคงที่ ความซับซ้อนบางอย่างเกี่ยวกับการถ่ายโอนบริบทระหว่างคำขอ การล้างและรีสตาร์ทตัวจัดการเพจอาจมีราคาแพงดังนั้นการถ่ายโอนของคุณในช่วงต้นเช่นใน HttpModule ในช่วง BeginRequest อ่านเอกสาร MSDN อย่างระมัดระวังและทดสอบและทำความเข้าใจกับค่าใหม่ของ HttpContext.Request - โดยเฉพาะในสถานการณ์ Postback เรามักจะใช้ Server.Transfer สำหรับสถานการณ์ข้อผิดพลาด

การเปลี่ยนเส้นทางยกเลิกการร้องขอด้วยสถานะ 302 และการตอบกลับลูกค้าฝั่งด้วยและภายในได้รับการยกเว้น (เซิร์ฟเวอร์จำนวนเยี่ยมชมน้อย - ขึ้นอยู่กับจำนวนวันที่คุณทำ) ลูกค้าจะนำทางไปยังที่อยู่ใหม่ การอัปเดตแถบที่อยู่ของเบราว์เซอร์และประวัติอื่น ๆ ลูกค้าชำระค่าใช้จ่ายในการไปกลับพิเศษ - ราคาจะแตกต่างกันไปขึ้นอยู่กับเวลาในการตอบสนอง ในธุรกิจของเราเราเปลี่ยนเส้นทางมากเราเขียนโมดูลของเราเองเพื่อหลีกเลี่ยงข้อยกเว้นค่าใช้จ่าย


6

มีความแตกต่างมากมายตามที่ระบุไว้ข้างต้น นอกเหนือจากข้างต้นมีความแตกต่างอีกอย่างหนึ่งคือ Response.Redirect()สามารถใช้เพื่อเปลี่ยนเส้นทางผู้ใช้ไปยังหน้าใด ๆ ที่ไม่ได้เป็นส่วนหนึ่งของแอปพลิเคชัน แต่Server.Transfer()สามารถใช้เพื่อเปลี่ยนเส้นทางผู้ใช้ภายในแอปพลิเคชันเท่านั้น

//This will work.
Response.Redirect("http://www.google.com");

//This will not work.
Server.Transfer("http://www.google.com");

5

Response.Redirect นั้นมีค่าใช้จ่ายสูงกว่าเพราะจะเพิ่มทริปพิเศษไปยังเซิร์ฟเวอร์เพื่อหาว่าจะไปที่ไหน

Server.Transfer มีประสิทธิภาพมากขึ้น แต่อาจนำไปสู่การเข้าใจผิดเล็กน้อยต่อผู้ใช้เนื่องจาก Url ไม่เปลี่ยนแปลงทางร่างกาย

จากประสบการณ์ของฉันความแตกต่างในประสิทธิภาพไม่ได้มีนัยสำคัญเพียงพอที่จะใช้วิธีการหลัง


4

Server.Transfer จะไม่เปลี่ยน URL ในเบราว์เซอร์ไคลเอ็นต์ดังนั้นประสิทธิภาพของเบราว์เซอร์จึงไม่ทราบว่าคุณเปลี่ยนไปเป็นตัวจัดการฝั่งเซิร์ฟเวอร์อื่น Response.Redirect บอกให้เบราว์เซอร์ย้ายไปที่หน้าอื่นดังนั้น URL ในแถบหัวเรื่องจึงเปลี่ยนไป

Server.Transfer เร็วขึ้นเล็กน้อยเนื่องจากหลีกเลี่ยงการไปหนึ่งครั้งที่เซิร์ฟเวอร์ แต่การเปลี่ยน URL อาจไม่ดีหรือไม่ดีสำหรับคุณทั้งนี้ขึ้นอยู่กับสิ่งที่คุณพยายามทำ


4

Response.Redirect:บอกเบราว์เซอร์ว่าหน้าเว็บที่ร้องขอสามารถพบได้ในตำแหน่งใหม่ จากนั้นเบราว์เซอร์จะเริ่มต้นคำขออื่นไปยังหน้าใหม่ที่โหลดเนื้อหาในเบราว์เซอร์ เบราว์เซอร์นี้มีคำขอสองคำขอ

Server.Transfer:มันถ่ายโอนการดำเนินการจากหน้าแรกไปยังหน้าสองบนเซิร์ฟเวอร์ เท่าที่เบราว์เซอร์ไคลเอนต์เกี่ยวข้องมันทำคำขอเดียวและหน้าเริ่มต้นคือหน้าที่ตอบกลับด้วยเนื้อหา ข้อดีของวิธีนี้คือการเดินทางไปกลับจากเซิร์ฟเวอร์ในเบราว์เซอร์ไคลเอ็นต์น้อยลง นอกจากนี้ตัวแปรฟอร์มใด ๆ ที่โพสต์และพารามิเตอร์สตริงการสืบค้นจะพร้อมใช้งานในเพจที่สองเช่นกัน


3

รายละเอียดเพิ่มเติมเกี่ยวกับ Transfer () จริง ๆ แล้วก็คือ Server.Execute () + Response.End () ซอร์สโค้ดของมันอยู่ด้านล่าง (จาก Mono / .net 4.0):

public void Transfer (string path, bool preserveForm)
{
    this.Execute (path, null, preserveForm, true);
    this.context.Response.End ();
}

และสำหรับ Execute () สิ่งที่ต้องใช้คือตัวจัดการเส้นทางที่กำหนดให้ดู

ASP.NET ไม่ตรวจสอบว่าผู้ใช้ปัจจุบันได้รับอนุญาตให้ดูทรัพยากรที่จัดส่งโดยวิธีการดำเนินการ แม้ว่าตรรกะการอนุญาตและการรับรองความถูกต้องของ ASP.NET จะทำงานก่อนที่จะเรียกใช้ตัวจัดการทรัพยากรดั้งเดิม ASP.NET จะเรียกตัวจัดการที่ระบุโดยวิธีการดำเนินการโดยตรง หากนโยบายความปลอดภัยของแอปพลิเคชันของคุณต้องการให้ลูกค้ามีสิทธิ์ที่เหมาะสมในการเข้าถึงทรัพยากรแอปพลิเคชันควรบังคับให้มีการให้สิทธิ์อีกครั้งหรือให้กลไกการควบคุมการเข้าถึงที่กำหนดเอง

คุณสามารถบังคับให้มีการให้สิทธิ์อีกครั้งโดยใช้วิธีการเปลี่ยนเส้นทางแทนวิธีดำเนินการ การเปลี่ยนเส้นทางทำการเปลี่ยนเส้นทางฝั่งไคลเอ็นต์ซึ่งเบราว์เซอร์ร้องขอทรัพยากรใหม่ เนื่องจากการเปลี่ยนเส้นทางนี้เป็นคำขอใหม่ที่เข้าสู่ระบบจึงอยู่ภายใต้ตรรกะการตรวจสอบและการอนุญาตทั้งหมดของนโยบายความปลอดภัยของ Internet Information Services (IIS) และ ASP.NET

- จาก MSDN


2

Response.Redirect เป็นการเดินทางไปกลับพิเศษและอัปเดตแถบที่อยู่

Server.Transfer ไม่ทำให้แถบที่อยู่เปลี่ยนแปลงเซิร์ฟเวอร์ตอบกลับคำขอด้วยเนื้อหาจากหน้าอื่น

เช่น

Response.Redirect: -

  1. บนไคลเอนต์เบราว์เซอร์ร้องขอหน้าhttp: //InitiallyRequestedPage.aspx
  2. เมื่อวันที่ตอบสนองต่อเซิร์ฟเวอร์ที่จะร้องขอกับ 302 ผ่านอยู่เปลี่ยนเส้นทางhttp: //AnotherPage.aspx
  3. บนไคลเอนต์เบราว์เซอร์ที่ทำให้คำขอที่สองที่อยู่ที่http: //AnotherPage.aspx
  4. บนเซิร์ฟเวอร์ตอบสนองด้วยเนื้อหาจากhttp: //AnotherPage.aspx

Server.Transfer: -

  1. บนเบราว์เซอร์ไคลเอนต์ร้องขอหน้าhttp: //InitiallyRequestedPage.aspx
  2. บนเซิร์ฟเวอร์ Server โอนไปยังhttp: //AnotherPage.aspx
  3. บนเซิร์ฟเวอร์การตอบสนองจะทำตามคำขอสำหรับhttp: //InitiallyRequestedPage.aspx การส่งคืนเนื้อหาจากhttp: //AnotherPage.aspx

Response.Redirect

จุดเด่น: - สงบ - ​​มันเปลี่ยนแถบที่อยู่ที่อยู่สามารถใช้ในการบันทึกการเปลี่ยนแปลงของรัฐในระหว่างการร้องขอ

ข้อด้อย: - ช้า - มีการไปกลับพิเศษระหว่างไคลเอนต์และเซิร์ฟเวอร์ ซึ่งอาจมีราคาแพงเมื่อมีเวลาแฝงมากระหว่างไคลเอนต์และเซิร์ฟเวอร์

Server.Transfer

จุดเด่น: - รวดเร็ว

ข้อด้อย: - สถานะสูญหาย - หากคุณใช้เซิร์ฟเวอร์โอนย้ายเพื่อเปลี่ยนสถานะของแอปพลิเคชันเพื่อตอบกลับหลังโพสต์หากหน้านั้นโหลดใหม่สถานะนั้นจะหายไปเนื่องจากแถบที่อยู่จะเหมือนเดิม ในคำขอแรก


0

Response.Redirect Response.Redirect () จะส่งคุณไปยังหน้าใหม่อัปเดตแถบที่อยู่และเพิ่มไปยังประวัติเบราว์เซอร์ บนเบราว์เซอร์ของคุณคุณสามารถคลิกกลับ มันเปลี่ยนเส้นทางการร้องขอไปยังหน้า HTML ธรรมดา ๆ บนเซิร์ฟเวอร์ของเราหรือไปยังเว็บเซิร์ฟเวอร์อื่น ๆ มันทำให้ roundtrips เพิ่มเติมไปยังเซิร์ฟเวอร์ในแต่ละคำขอ มันไม่รักษาสตริงแบบสอบถามและตัวแปรแบบฟอร์มจากคำขอเดิม ช่วยให้สามารถดู URL ที่เปลี่ยนเส้นทางใหม่ซึ่งมีการเปลี่ยนเส้นทางในเบราว์เซอร์ (และสามารถคั่นหน้าได้ถ้าจำเป็น) คำตอบ การเปลี่ยนเส้นทางเพียงส่งข้อความลงไปที่เบราว์เซอร์ (HTTP 302)

Server.Transfer Server.Transfer () ไม่เปลี่ยนแถบที่อยู่เราไม่สามารถกด back ได้หนึ่งควรใช้ Server.Transfer () เมื่อเขา / เธอไม่ต้องการให้ผู้ใช้เห็นว่าเขากำลังจะไปไหน บางครั้งในหน้าประเภท "กำลังโหลด" มันถ่ายโอนคำขอหน้าปัจจุบันไปยังหน้า. aspx อื่นบนเซิร์ฟเวอร์เดียวกัน มันรักษาทรัพยากรของเซิร์ฟเวอร์และหลีกเลี่ยงการปัดเศษที่ไม่จำเป็นไปยังเซิร์ฟเวอร์ มันรักษาสตริงแบบสอบถามและตัวแปรแบบฟอร์ม (เป็นทางเลือก) มันจะไม่แสดง URL จริงที่มันเปลี่ยนเส้นทางการร้องขอในเว็บเบราว์เซอร์ของผู้ใช้ เซิร์ฟเวอร์การถ่ายโอนเกิดขึ้นโดยที่เบราว์เซอร์ไม่ทราบอะไรเลยเบราว์เซอร์ร้องขอหน้าเว็บ แต่เซิร์ฟเวอร์ส่งคืนเนื้อหาของอีกรายการหนึ่ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.