2010-08-25 42 views
15

Tôi có một số tệp html/js cục bộ mà tôi muốn gọi một số máy chủ từ xa qua https và cuối cùng sử dụng Xác thực cơ bản cho yêu cầu.Xác thực cơ bản với yêu cầu jQuery.ajax và jsonp

Tôi đang gặp phải hai vấn đề. Đầu tiên là nếu tôi không chỉ định 'jsonp' cho datatype, jQuery.ajax() yêu cầu trả về lỗi:

Access to restricted URI denied code: 1012

đang yêu cầu tôi coi cross-domain vì tập tin công việc chính của tôi được lưu trữ tại địa phương, nhưng truy xuất dữ liệu từ máy chủ ở nơi khác?

Vì vậy, tốt, tôi cập nhật các cuộc gọi để nó bây giờ trông giống như:

$.ajax({ 
    url: myServerUrl, 
    type: "GET", 
    dataType: "jsonp", // considered a cross domain Ajax request if not specified 
    username: myUsername, 
    password: myPassword, 

    success: function(result) 
    { 
     // success handling 
    }, 
    error: function(req, status, errThrown){ 
     // error handling 
    } 
}) 

Bởi vì tôi cần phải sử dụng Basic Authentication, tôi đi qua trong tên người dùng/mật khẩu nhưng nếu tôi theo dõi các yêu cầu, tôi don không nhìn thấy nó được thiết lập và bổ sung, máy chủ sẽ gửi một phản ứng lỗi vì nó không có thông tin dự kiến.

Ngoài ra, vì tôi có jsonp đặt, beforeSend sẽ không được gọi.

Làm cách nào để chuyển các thông tin xác thực bằng Xác thực cơ bản cho yêu cầu này?

Trả lời

12

Phiên bản ngắn là bạn không thể thực hiện việc này. Nghi ngờ của bạn là chính xác, bởi vì bạn là người địa phương và các tệp này ở xa, bạn không thể truy cập chúng, bạn đang bị chặn bởi same-origin policy. Công việc xung quanh cho điều đó là JSONP, nhưng điều đó thực sự dường như không áp dụng cho trường hợp của bạn ...

JSONP hoạt động khác nhau, đó là yêu cầu GET qua thẻ <script> bao gồm để tải tệp, vì vậy bạn không gửi tiêu đề đặc biệt hoặc bất cứ điều gì.

Bạn sẽ cần ủy quyền yêu cầu thông qua máy chủ bạn đang sử dụng hoặc một tùy chọn proxy khác, nhưng chuyển từ máy khách sang miền khác bị chặn, chủ yếu vì lý do bảo mật.

+5

Đây là câu trả lời đúng, JSONP không thể chứa tiêu đề USER/PWD mà Yêu cầu cơ bản yêu cầu. Vì vậy, bạn đang damned nếu bạn làm và damned nếu bạn không :) –

0

Tôi nghĩ bạn sẽ phải thêm proxy máy chủ của một số loại. JSONP chỉ là một cách cụ thể để sử dụng thẻ tập lệnh. Vì vậy, nó không cho phép thiết lập các tiêu đề tùy ý. Và tất nhiên, bạn không thể làm một XHR xuyên quốc gia.

7

Hãy thử thực hiện http://user:[email protected]. Điều này bắt chước yêu cầu cơ bản-xác thực.

+2

này dường như làm việc nhưng chỉ cho một số trình duyệt. – jhanifen

+1

Sử dụng cú pháp này sẽ bị chặn trong Chrom từ bản dựng M59: https://www.chromestatus.com/feature/5669008342777856 – Beejamin

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