我正在使用 Angular 2 发出 API(rails) 请求。当我通过 Angular 发出 http 请求时,出现以下错误: XMLHttpRequest cannot load https://api-url。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问源“ http://localhost:4200 ”。响应的 HTTP 状态代码为 404。但是,如果我尝试通过 Postman 或浏览器本身发出请求,我不会收到任何错误。数据正常显示角码:
makeRequest() {
let user = {"user": "user", "password": "password"};
let headers: Headers = new Headers();
headers.append('Authorization', 'Basic ' + btoa(user.user + ':'+user.password));
headers.append('Content-Type', 'application/vn.api+json')
let this.http.get(api-url, {headers: headers}).map(res => res.json()).subscribe(data => {
this.data = data;
})
}
在我的 Rails 服务器中,我使用 gem 'jsonapi-resources' 打开 AP。在我的 api 控制器中,我有这个代码来验证和设置请求头:
module Api
class ApiController < JSONAPI::ResourceController
prepend_before_action :set_headers, :authenticate
def context
{ current_station: @user }
end
private
def authenticate
authenticate_or_request_with_http_basic do |token, _|
@user = User.where(api_key: token).first
end
end
def set_headers
response.headers["Access-Control-Allow-Origin"] = "*"
end
end
end
当我在浏览器中发出请求或使用邮递员时,标题正常显示,但在 Angular 中我有错误。