Tôi có một máy chủ dựa trên REST mà tôi đang cố gắng giao tiếp với việc sử dụng JQuery. Cả XML và JSON đều có sẵn dưới dạng các định dạng phản hồi, vì vậy tôi đang sử dụng JSON.Cuộc gọi JQuery Ajax với Xác thực cơ bản HTTP
Các kết nối được tất cả SSL để HTTP Basic Authentication đã được phương pháp uỷ quyền của chúng ta về sự lựa chọn, và chúng tôi đã không có vấn đề với đầu phía trước khác (nguyên Javascript, Silverlight, vv ...)
Bây giờ tôi đang cố gắng để đặt một cái gì đó cùng với JQuery và có vấn đề vô tận bằng cách sử dụng xác thực cơ bản HTTP.
Tôi đã lùng sục qua nhiều câu hỏi trước, hầu hết trong số đó có giải pháp dường như không thực sự hoạt động hoặc đổ lỗi cho toàn bộ vấn đề truy cập nguồn gốc chéo mà tôi đã vượt qua trong thử nghiệm Javascript cơ bản. Câu trả lời luôn cung cấp Access-Control-Allow-Origin
được đặt thành tiêu đề Gốc được cung cấp trong yêu cầu và điều này có thể được nhìn thấy trong phản hồi của các bài kiểm tra của tôi.
Trong javascript cơ bản, toàn bộ cuộc gọi này là rất đơn giản thực hiện với:
req.open('GET', 'https://researchdev-vm:8111/card', true, 'test', 'testpassword');
Nỗ lực JQuery ở đây là khá chuẩn:
$.ajax({
username: 'test',
password: 'testpassword',
url: 'https://researchdev-vm:8111/card',
type: 'GET',
dataType: 'json',
crossDomain: true,
/*data: { username: 'test', password: 'testpassword' },*/
beforeSend: function(xhr){
xhr.setRequestHeader("Authorization",
//"Basic " + encodeBase64(username + ":" + password));
"Basic AAAAAAAAAAAAAAAAAAA=");
},
sucess: function(result) {
out('done');
}
});
Phương pháp duy nhất mà thực sự dường như làm việc để cung cấp xác thực là chèn trực tiếp dữ liệu được mã hóa Base64 vào hàm beforeSend()
. Nếu điều này không được bao gồm, không có tiến bộ nào được thực hiện. Các thuộc tính tên người dùng và mật khẩu dường như bị bỏ qua hoàn toàn.
Với hành vi beforeSend()
được cung cấp, cuộc gọi GET nhận được phản hồi tích cực với dữ liệu được bao gồm. Tuy nhiên, vì đây là cuộc gọi chéo, cuộc gọi OPTIONS được thực hiện trước cuộc gọi GET và luôn thất bại, vì nó không sử dụng beforeSend()
và do đó nhận được phản hồi 401 do xác thực không thành công.
Có cách nào tốt hơn để thực hiện những gì nên là một cuộc gọi rất tầm thường? Nếu thực tế là yêu cầu OPTIONS không sử dụng chế biến chức năng beforeSend()
thì có thể coi là lỗi không? Có lẽ một cách để vô hiệu hóa kiểm tra OPTIONS hoàn toàn? Không thể thực hiện cuộc gọi này không phải là cross-site, vì Javascript dường như xem xét ngay cả một số cổng khác trên cùng một máy như "cross-site".
Bạn không cần phải có trước khi gửi VÀ/lĩnh vực mật khẩu Tên truy nhập . Tôi sẽ loại bỏ các trường tên người dùng/mật khẩu từ hàm $ .ajax của bạn. –