我正在使用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
答案 0 :(得分:0)
如果我删除自定义HTTP标头,为什么不调用OPTIONS请求?
自定义HTTP标头是需要预检的触发器之一。
特别是,如果出现以下情况,请求会被预检:
- 它使用GET,HEAD或POST以外的方法。此外,如果使用POST来发送具有除application / x-www-form-urlencoded,multipart / form-data或text / plain之外的Content-Type的请求数据,例如,如果POST请求使用application / xml或text / xml向服务器发送XML有效负载,则该请求将被预检。
- 在请求中设置自定义标头(例如请求使用标头,例如X-PINGOTHER)