2010-02-22 35 views
16

Tôi hiểu rằng hầu hết các ngôn ngữ đều hỗ trợ chuyển hướng phía máy chủ (asp.net: Response.Redirect, PHP: header('newpage') ;). Bạn cũng có thể thực hiện chuyển hướng bằng JavaScript (window.location.href="newLocationURL").Các phương pháp hay nhất cho chuyển hướng phía máy khách so với phía máy chủ: Khi nào sử dụng?

Khi nào bạn chọn cái kia?

Đối với ASP.net/IIS7(app pool ở chế độ Tích hợp, bật ứng dụng 32 bit = false), tôi nhận thấy rằng ngay cả khi trang có tiêu đề 302, toàn bộ trang nội dung được gửi tới phía máy khách.

I believe this is not the case with PHP, chỉ tiêu đề được gửi? Để báo giá Chuyển hướng trên phía máy khách có nghĩa là các bước sau: Phía máy khách -> Phía máy chủ -> Phía máy khách -> Phía máy chủ -> Phía máy khách.

Chuyển hướng trên phía máy chủ có nghĩa là: Phía máy khách -> Phía máy chủ -> Phía máy khách (chỉ tiêu đề) * -> Phía máy chủ -> Phía máy khách.

Có cách triển khai chuyển hướng phía máy chủ hoặc tiêu chuẩn W3C khác với một công nghệ máy chủ web khác không?

Chỉnh sửa: Tôi chỉ quan tâm đến Response.Redirect (trong asp.net) và không Server.Transfer, ít nhất là cho cuộc thảo luận này

Trả lời

5

Ví dụ JavaScript là thực sự không phải là một redirect. Không có phương tiện phản hồi 301/302. Nó chỉ là một yêu cầu đơn giản xảy ra trong một sự kiện Javascript nhất định trong thời gian dài sau khi trang được đến. Nếu bạn làm điều này trong khi tải trang, thì nó sẽ có nhiều chi phí hơn một chuyển hướng thực sự và nó cũng sẽ không hoạt động trên các trình duyệt bị tắt JS.

Chuyển hướng sẽ được bắt đầu từ phía máy chủ với phản hồi 301/302.Tất cả ngôn ngữ/khung công tác webapp mặc định là 302. Bạn thường có thể làm cho nó 301 bằng cách thêm một tham số hoặc dòng mã bổ sung chỉ thị điều đó. Lợi ích của 301 là theo cách mà yêu cầu cụ thể sẽ không được lập chỉ mục (nữa) bởi các thanh tìm kiếm.

3

Trong ASP.Net, có một sự khác biệt quan trọng giữa hai loại máy chủ chuyển hướng ngược. Chúng là Response.Redirect và Server.Transfer.

Nếu bạn gọi Response.Redirect, yêu cầu hai chuyến đi khứ hồi tới máy chủ. Trong lần gọi đầu tiên tới máy chủ, phản hồi của máy chủ sẽ hướng trình duyệt để yêu cầu trang tiếp theo. Yêu cầu trang tiếp theo cấu thành chuyến đi khứ hồi thứ hai tới máy chủ web.

Nếu bạn sử dụng Server.Transfer, chỉ có một chuyến đi khứ hồi. Do đó, lưu lượng mạng ít hơn nhiều. Tuy nhiên, có một giới hạn khi sử dụng Server.Transfer, đó là trang đích phải nằm trên cùng một máy chủ web. Tức là, bạn không thể Server.Transfer từ ứng dụng web của bạn đến www.Google.com. Nhưng bạn có thể Response.Redirect cho nó.

Có các chi tiết khác liên quan đến việc sử dụng một trong các cách tiếp cận này mà bạn muốn nghiên cứu trước khi sử dụng chúng. Tuy nhiên, tôi tin rằng điều quan trọng trong bối cảnh của câu hỏi này cần lưu ý rằng bằng bất kỳ ngôn ngữ nào, Response.Redirect có thể dẫn đến lưu lượng mạng lớn hơn nhiều so với thực sự là cần thiết.

+0

phản hồi của bạn được đánh giá cao. Server.Transfer không gửi 302 không giống Response.Redirect. Xin lỗi tôi không rõ ràng với câu hỏi của tôi – ram

-1

Nó thực sự phụ thuộc vào nơi bạn quyết định rằng bạn cần chuyển hướng. Nếu đó là mã phía máy chủ xác định rằng bạn phải chuyển hướng, thì đó là mã phía máy chủ phát hành lệnh chuyển hướng. Nếu bạn có thể quyết định phía máy khách cần có chuyển hướng, hãy thực hiện chuyển hướng từ mã máy khách.

Nó có lẽ là hiệu quả hơn từ phía khách hàng, kể từ khi bạn tránh một back-và-ra trong những điều chuyển hướng phía máy chủ ..

+0

Nếu đó là mã phía máy chủ xác định rằng bạn phải chuyển hướng điều gì ngăn cản mã phía máy chủ thêm mã javascript, hãy yêu cầu khách hàng chuyển hướng? – ram

+0

Không có gì - bạn có thể làm điều đó nếu bạn thích, nhưng gọi Response.Redirect là, với tôi, dễ dàng hơn tạo javascript để đặt window.location.href. Và phản ứng với trình duyệt sẽ nhỏ hơn một chút. PS - theo kinh nghiệm của tôi, asp.net * không * gửi toàn bộ nội dung trang bằng Response.Redirect - nó chỉ gửi các tiêu đề cần thiết và số lượng nhỏ html cho thông điệp "đối tượng được chuyển tới" chuẩn (hiếm khi được sử dụng)). – Ray

+0

Yup Ray, tôi rất ngạc nhiên khi thấy điều đó ở Charles. Nó xảy ra cho Cassini cũng như chế độ tích hợp IIS7, mặc dù không được kiểm tra với các cấu hình máy chủ/máy chủ khác – ram

Các vấn đề liên quan