2015-07-16 16 views
5

Tôi đang cố thực hiện yêu cầu GET đơn giản từ máy chủ lưu trữ một số dữ liệu tài khoản. Yêu cầu yêu cầu tiêu đề Cấp quyền để hoạt động chính xác. Tôi đã thực hiện yêu cầu GET và truy xuất dữ liệu thành công trong Postman, nhưng cố gắng làm như vậy trong Javascript thông qua kết quả Ajax trong một lỗi "Mã trạng thái HTTP không hợp lệ 405".Hãy làm việc với Người đưa thư, nhưng không phải với Ajax?

Dưới đây là một liên kết đến một fiddle và một ảnh chụp màn hình của các thiết lập Postman. Cảm ơn.!

$.ajax({ 
    beforeSend: function(xhrObj){ 
      xhrObj.setRequestHeader("Authorization","Bearer tj7LTLycpQC6DRup5BkHUO7uVbYaAZI40"); 
    }, 
    type: "GET", 
    url: "https://api05.iq.questrade.com/v1/accounts", 
    success: function(e){ 
      console.log(e) 
    } 
}); 

http://jsfiddle.net/Ldjbp2j8/1/

POSTMAN SETTINGS

Trả lời

7

Từ giao diện điều khiển JS Chrome:

Không thể tải tài nguyên: máy chủ đáp lại bằng một tình trạng của 405 (Phương pháp không được phép)

Becaus e bạn đang thêm tiêu đề Cấp quyền, bạn đã thực hiện yêu cầu phức tạp. Điều này yêu cầu trình duyệt thực hiện preflight OPTIONS request để yêu cầu quyền gửi yêu cầu phức tạp.

Máy chủ bạn đang thực hiện yêu cầu phản hồi cho biết rằng các yêu cầu OPTIONS không được phép cho URL đó.

Bạn sẽ cần sửa đổi máy chủ để máy chủ phản hồi phù hợp với yêu cầu CORS preflight.


Người gửi thư không cần thực hiện yêu cầu preflight vì trình duyệt của bạn tin cậy mã của Người viết bài. Nó không biết liệu nó có thể tin tưởng mã mà nó nhận được từ JSFiddle (AKA trang web độc hại tiềm năng của hacker) với dữ liệu api05.iq.questrade.com (AKA ngân hàng trực tuyến hoặc công ty tiềm năng Intranet site) sẵn sàng chia sẻ với nó.

+0

Nếu tôi không có quyền truy cập vào máy chủ, tôi có gặp may không? – dgalati54

+0

@ dgalati54 - Theo như yêu cầu trực tiếp tới nó với Ajax là có liên quan: có. – Quentin

1

Nhìn vào các lỗi giao diện điều khiển:

XMLHttpRequest cannot load https://api05.iq.questrade.com/v1/accounts. 
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'http://fiddle.jshell.net' is therefore not allowed access. The response had HTTP status code 405. 

Đây là vấn đề CORS. Các trình duyệt đã gửi OPTIONS hay yêu cầu trước chuyến bay tới máy chủ nếu miền không khớp với tên miền của mã đang chạy. Và bạn cũng phải thêm các tiêu đề bắt buộc vào các phản hồi.

Bạn phải sửa đổi máy chủ để xử lý điều đó.

Bạn cũng có thể sử dụng JSONP làm phương án thay thế.

+0

"Bạn cũng có thể sử dụng JSONP thay thế" - Không, bạn không thể. JSONP không cho phép đặt tiêu đề HTTP. – Quentin

+0

Có. Bạn nói đúng. Tôi thay thế cho toàn bộ giải pháp. – Xeon

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