2015-01-20 16 views
5

Trước khi đăng câu hỏi này, tôi đã trải qua hầu hết các câu hỏi tràn ngăn xếp nhưng tôi không có câu trả lờiYêu cầu được chuyển hướng đến 'https: //..com/site/login?', Không được phép đối với các yêu cầu có nguồn gốc chéo yêu cầu preflight

Tôi đang cố gắng truy cập api của khách hàng sẽ thực hiện xác thực Oauth vì vậy khi tôi gọi api, nó sẽ ném một cửa sổ bật lên để xác thực tương tự như fb auth, nhưng tôi kết thúc với lỗi trong bảng điều khiển chrome của mình như bên dưới

XMLHttpRequest không thể tải https://api.springrole.com/authorize?
phạm vi = XXXX & redirect_uri = http://localhost:8080/CheckRest/springrole.html&response_type=XXXX&client_id=XXXXXXXX. Yêu cầu được chuyển hướng đến 'https://springrole.com/site/login?api_login=1&scope=XXXX&state=&error=invalid_request', không được phép đối với các yêu cầu có nguồn gốc từ gốc yêu cầu preflight.

tôi vừa che giấu một số giá trị với XXX vì mục đích an toàn. và req của tôi trông giống như dưới đây

$http({ 
     method : 'GET', 

     url : url, 
     headers : { 
      'Content-Type' : 'application/json', 
       "Access-Control-Allow-Origin": "https://api.springrole.com", 
       "Access-Control-Allow-Methods":"GET", 
        "Access-Control-Allow-Credentials": true 
     } 
    }).success(function(data, status, headers, config) { 
     $scope.details.response = JSON.stringify(data); 

     console.log("success" + data) 
    }) 

nếu tôi bỏ đi header trong yêu cầu tôi đang nhận được báo lỗi dưới đây thể hiện

Không 'Access-Control-Allow-Origin' đầu có mặt trên yêu cầu tài nguyên. Do đó, nguồn gốc 'http://localhost:8080' không được phép truy cập .

mọi đề xuất hoặc công việc xung quanh sẽ được đánh giá cao.

+0

Các tiêu đề kiểm soát truy cập thường được thêm vào tự động bởi trình duyệt chứ không phải do bạn đặt rõ ràng. Bạn đã thử xóa chúng chưa? –

+0

@MichaelAaronSafyan nếu tôi xóa chúng, tôi nhận được lỗi dưới đây Không có tiêu đề 'Access-Control-Allow-Origin' xuất hiện trên tài nguyên được yêu cầu. Do đó, gốc 'http: // localhost: 8080' không được phép truy cập. –

+0

Phương pháp bổ sung phía khách hàng tiêu đề này rất thú vị. Thông thường, tôi đã nhìn thấy phía máy chủ thiết lập 'Access-Control-Allow-Origin' để kiểm soát quyền truy cập vào một tài nguyên đã cho ... – War10ck

Trả lời

2

Vâng bạn đang chạy vào Same Origin Policy được đưa ra vì lý do bảo mật. Tóm lại, về cơ bản, bạn đang yêu cầu/mở một cái gì đó từ một nguồn gốc khác nhau mà không phải là rất an toàn. Nếu muốn, bạn có thể tắt tạm thời trong Chrome bằng cách thêm đối số --disable-web-security.

Vì vậy, từ Terminal bạn có thể chạy

open -a Google\ Chrome --args --disable-web-security

tôi làm điều đó thường xuyên vì vậy tôi đã kết thúc chỉ thêm và bí danh để tôi .bash_profile vì vậy tôi có thể truy cập nó một cách dễ dàng

# Run Insecure Chrome 
alias insecure-chrome='open -a Google\ Chrome --args --disable-web-security' 

Sau đó, trong Terminal Tôi chỉ có thể gọi insecure-chrome và Chrome sẽ bật lên. Bạn sẽ biết nó hoạt động nếu bạn thấy cảnh báo Bảo mật ở trên cùng. Cảnh báo trông giống như cảnh báo này

enter image description here

tất nhiên bắt buộc phải cẩn thận khi thực hiện này. Tôi sẽ không lướt web ở chế độ này nhưng làm việc tại địa phương bạn nên ổn.

Đối với người dùng Windows, bạn có thể điều hướng đến thư mục mà Chrome đã được cài đặt và thiết lập

chrome.exe --user-data-dir = "C:/temp" --disable-web-security

Đảm bảo đóng tất cả các phiên bản Chrome trước khi thực hiện hoặc nếu không nó sẽ không hoạt động.

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