【发布时间】:2016-03-25 04:38:39
【问题描述】:
我正在使用 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 响应中缺少什么,为什么会中止?
更新:
以下是原始 GET 请求的标头。我看不到 OPTIONS 标题。
UPD2:
我能够从 Chrome 开发工具中获得此错误消息,用于 OPTIONS 请求:
net::ERR_CONNECTION_REFUSED
【问题讨论】:
-
试着把自己限制在一个问题上。很难说出第二个问题的答案是什么,因为您的问题缺乏上下文。我猜这是因为您正在离开该页面,但无法通过您提供的信息来判断。
-
当您从浏览器拨打电话时,您能否在您的开发工具中打开网络选项卡并显示标头、响应和请求?
-
@JoshBeam 感谢您的回复。我已经用请求标头更新了我的问题
-
@Quentin 谢谢你的回答。我需要在帖子中添加哪些信息?
-
这是来自 Chrome 的吗?通常我发现 Chrome devtools 网络选项卡比其他浏览器更有帮助,哈哈:p 不确定你是否有它。但是,第二个问题:您是否尝试过清除缓存?我相信浏览器会缓存 OPTIONS 请求。
标签: javascript angularjs