[英]Angular GET request: preflight request aborted
我正在使用Angular 1.4.8从RESTfull API获取数据。 为了进行用户身份验证,我们决定使用自定义HTTP标头:
var requestConfig = {
headers: {
"authorization-token": "A317C3D6-74B1-DA99-FE55-8141E95D3085"
}
};
现在,我正在尝试发出GET请求:
$http.get(config.apiUrl+'/api/v1/orders/', requestConfig).success(function(data){
table.orders = data;
});
并在Firebug中查看以下请求:
我了解到,如果您尝试从另一台服务器获取数据,浏览器会发出这些飞行前OPTIONS请求。 在我的情况下,Angular应用程序位于127.0.0.1:80上,而Node.js服务器位于127.0.0.1:6673上,所以据我所知,它是跨域请求
如果您尝试通过curl发出OPTIONS请求,则会收到以下响应:
HTTP/1.1 200 OK
X-Powered-By: Express
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Cache-Control, Pragma, Origin,
Authorization, Content-Type, X-Requested-With, authorization-token
Access-Control-Allow-Methods: GET, PUT, POST, OPTIONS
Allow: GET,HEAD,POST
Content-Type: text/html; charset=utf-8
Content-Length: 13
ETag: W/"d-7cCV5tLYsy8ebraCH4f8nQ"
Date: Thu, 24 Mar 2016 19:56:49 GMT
Connection: keep-alive
因此,我的问题是:
1)如果删除自定义HTTP标头,为什么不调用OPTIONS请求?
2)OPTIONS响应中缺少什么,为什么中止了?
UPD:
这是原始GET请求的标头。 我看不到OPTIONS标头。
UPD2:
我能够从Chrome开发工具中收到针对OPTIONS请求的错误消息:
net::ERR_CONNECTION_REFUSED
如果删除自定义HTTP标头,为什么不调用OPTIONS请求?
自定义HTTP标头是要求进行预检的触发器之一。
特别是,在以下情况下,将对请求进行预检:
- 它使用GET,HEAD或POST以外的方法。 另外,如果POST用于发送请求类型为application / x-www-form-urlencoded,multipart / form-data或text / plain以外的Content-Type的请求数据,例如POST请求将XML有效负载发送给服务器使用application / xml或text / xml,则对请求进行预检。
- 它在请求中设置自定义标头 (例如,请求使用标头,例如X-PINGOTHER)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.