2012-03-04 35 views
38

Tôi đang cố gắng gửi tên miền có nguồn gốc chéo và thêm tiêu đề 'Ủy quyền' tùy chỉnh. Vui lòng xem mã bên dưới.tiêu đề 'Authorization'-cross-origin' với jquery.ajax()

Lỗi:

XMLHttpRequest không thể tải {url}. Yêu cầu trường tiêu đề Ủy quyền không được cho phép bởi Access-Control-Allow-Headers.

function loadJson(from, to) { 
    $.ajax({ 
     //this is a 'cross-origin' domain 
     url : "http://localhost:2180/api/index.php", 
     dataType : 'json', 
     data : { handler : "statistic", from : from, to : to 
     }, 
     beforeSend : setHeader, 
     success : function(data) { 
      alert("success"); 
     }, 
     error : function(jqXHR, textStatus, errorThrown) { 
      alert("error"); 
     } 
    }); 
} 

function getToken() { 
    var cookie = Cookie.getCookie(cookieName); 
    var auth = jQuery.parseJSON(cookie); 
    var token = "Token " + auth.id + ":" + auth.key; 
} 

function setHeader(xhr) { 
    xhr.setRequestHeader('Authorization', getToken()); 
} 

Tôi cũng đã cố gắng:

headers : { 'Authorization' : getToken() }, 

trong yêu cầu ajax.

Có thể khung công tác jquery-ajax đang chặn Xác thực gốc chéo không? Làm thế nào tôi có thể sửa lỗi này?

Cập nhật:

Bằng cách này: là có một phương pháp an toàn hơn để lưu trữ các auth.key trên client-side sau đó trong một cookie? getToken() sẽ được thay thế bằng một phương thức phức tạp hơn, băm nhỏ cơ thể, ngày tháng, v.v.

+1

Phương thức 'getToken()' của bạn không trả lại bất kỳ điều gì. – istepaniuk

Trả lời

61

Đây là ví dụ về thực hiện yêu cầu CORS. Nếu bạn có quyền truy cập vào máy chủ (mà tôi cho rằng bạn thực hiện vì đây là yêu cầu đối với localhost), bạn sẽ cần thêm các tiêu đề phản hồi CORS cụ thể. Điều đơn giản nhất cần làm là thêm các tiêu đề phản hồi sau:

Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: GET, POST, PUT, DELETE 
Access-Control-Allow-Headers: Authorization 

Máy chủ của bạn cũng cần phải được định cấu hình để phản hồi các yêu cầu TÙY CHỌN HTTP. Bạn có thể tìm hiểu thêm về cách thực hiện các yêu cầu CORS tại đây: http://www.html5rocks.com/en/tutorials/cors/

+3

Vâng .. Tôi quên phần cuối của ba tiêu đề này. Tôi vừa gửi nguồn gốc và phương pháp. Sai lầm ngu ngốc. :) Vâng, tôi đã triển khai OPTIONS. Liên kết tốt! thanks –

+0

Theo MDN, tiêu đề Access-Control-Allow-Origin sẽ cần được đặt thành xuất xứ khi sử dụng các yêu cầu được chứng nhận thay vì ký tự đại diện. – radicalmatt

+0

@radicalmatt, Yea, ông đã viết nó ở đó quá http://stackoverflow.com/a/15254158/632951: * "Không thể sử dụng giá trị' * 'cho tiêu đề Access-Control-Allow-Origin khi Access-Control- Cho phép-Credentials là đúng "* – Pacerier

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