2008-10-23 31 views

Trả lời

84

Không theo the W3C standard for the XMLHttpRequest object (nhấn mạnh thêm):

Nếu câu trả lời là một chuyển hướng HTTP:

Nếu nguồn gốc của URL được truyền đạt bởi các tiêu đề Địa điểm là cùng nguồn gốc với Nguồn gốc XMLHttpRequest và chuyển hướng không vi phạm các cảnh báo vòng lặp vô hạn , minh bạch theo chuyển hướng trong khi quan sát quy tắc sự kiện yêu cầu cùng nguồn gốc.

Họ considering nó cho một phiên bản tương lai:

đặc điểm kỹ thuật này không bao gồm các tính năng sau đang được coi cho một phiên bản tương lai của đặc điểm kỹ thuật này:

  • Thuộc tính để tắt các chuyển hướng sau;

nhưng đặc điểm latest không còn đề cập đến điều này.

+4

Điều lố bịch là khi chuyển hướng trong suốt liên quan đến việc ghi đè một số tiêu đề HTTP được đặt trong yêu cầu ban đầu. Cụ thể, nếu tiêu đề "Chấp nhận" được đặt thành loại nội dung cụ thể, Firefox sẽ không bao gồm tiêu đề này khi thực hiện theo chuyển hướng (điều này khiến cho việc phát triển các dịch vụ web dựa trên REST hoàn toàn khó hơn, sử dụng tiêu đề này ... càu nhàu). – ruquay

+1

Một số tìm kiếm khác mang lại cho tôi báo cáo lỗi khá cũ này: https://bugzilla.mozilla.org/show_bug.cgi?id=401564 – ruquay

+1

Đồng ý, lỗi thiết kế hoàn toàn rediculus. – Rasive

11

Không có bạn không có bất kỳ vị trí nào trong API được hiển thị bởi XMLHttpRequest cho phép bạn ghi đè hành vi mặc định của nó sau 301 hoặc 302 tự động.

Nếu khách hàng đang chạy IE trên cửa sổ thì bạn có thể sử dụng WinHTTP thay vào đó để đặt tùy chọn ngăn chặn hành vi đó nhưng đó là giải pháp rất hạn chế.

12

Bạn có thể sử dụng thuộc tính responseURL để nhận đích chuyển hướng hoặc kiểm tra xem phản hồi cuối cùng có được lấy từ vị trí bạn chấp nhận hay không.
Điều này tất nhiên có nghĩa là kết quả được tìm nạp, nhưng ít nhất bạn có thể nhận được thông tin cần thiết về đích chuyển hướng và ví dụ như phát hiện các điều kiện khi bạn muốn loại bỏ phản hồi.

19

mới Fetch API hỗ trợ chế độ khác nhau của xử lý chuyển hướng: follow, errormanual, nhưng tôi không thể tìm thấy một cách để xem các URL mới hoặc mã trạng thái khi chuyển hướng đã bị hủy. Bạn chỉ có thể dừng chuyển hướng chính nó, và sau đó nó trông giống như một lỗi (trả lời trống). Nếu đó là tất cả những gì bạn cần, bạn tốt để đi. Ngoài ra, bạn nên lưu ý rằng các yêu cầu được thực hiện qua API này không thể hủy được yet. Họ are ngay bây giờ.

Đối với XMLHttpRequest, bạn có thể HEAD máy chủ và kiểm tra xem các URL đã thay đổi:

var http = new XMLHttpRequest(); 
http.open('HEAD', '/the/url'); 
http.onreadystatechange = function() { 
    if (this.readyState === this.DONE) { 
     console.log(this.responseURL); 
    } 
}; 
http.send(); 

Bạn sẽ không nhận được mã trạng thái, nhưng sẽ tìm thấy URL mới mà không cần tải toàn bộ trang từ nó.

+0

Đôi khi sử dụng 'OPTIONS' có thể là lựa chọn tốt hơn, dù sao chỉ hoạt động cho mục đích không chung, vv quản trị viên đã định cấu hình chuyển hướng toàn bộ trang web/lược đồ, chẳng hạn như HTTP -> HTTPS –

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