我已经构建了一个API。它在端口8000中侦听,我的应用程序正在侦听端口3000.
var settings = {
"async": true,
"crossDomain": true,
"url": "http://localhost:8000/communities",
"method": "GET",
"headers": {
"authorization": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiWVx1MDBlMWJpciIsImFkbWluIjp0cnVlfQ.xtvKyxq26b7K02mVv21vkt7PbeOUatMbgxLOHIj7CQg",
"cache-control": "no-cache",
}
}
$(document).ready(function(){
$.ajax(settings).done(function (response) {
console.log(response);
});
});
我知道这不是某些设置的问题,因为在服务器中取消激活令牌身份验证我得到了数据。此代码是从PostMan chrome应用程序生成的,但是当我从我的js文件进行查询时,我得到一个401错误,从服务器我可以看到authorization
标头尚未设置。可能是什么问题?
在Chrome控制台中出现:
Failed to load resource: the server responded with a status of 401 (Unauthorized)
服务器从localhost:3000
收到的标头{'ACCEPT': '*/*', 'ACCESS-CONTROL-REQUEST-METHOD': 'GET', 'CONNECTION': 'keep-alive', 'ACCEPT-ENCODING': 'gzip, deflate, sdch, br', 'HOST': 'localhost:8000', 'REFERER': 'http://localhost:3000/', 'USER-AGENT': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/55.0.2883.87 Chrome/55.0.2883.87 Safari/537.36', 'ORIGIN': 'http://localhost:3000', 'ACCESS-CONTROL-REQUEST-HEADERS': 'authorization, cache-control, 'ACCEPT-LANGUAGE': 'es-ES,es;q=0.8'}
来自PostMan
{'AUTHORIZATION': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiWVx1MDBlMWJpciIsImFkbWluIjp0cnVlfQ.xtvKyxq26b7K02mVv21vkt7PbeOUatMbgxLOHIj7CQg', 'ACCEPT': '*/*', 'CACHE-CONTROL': 'no-cache', 'POSTMAN-TOKEN': '06aba643-b6cb-3a7a-9e6e-61b1f2d9e94e', 'CONNECTION': 'keep-alive', 'ACCEPT-ENCODING': 'gzip, deflate, sdch, br', 'HOST': 'localhost:8000', 'USER-AGENT': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/55.0.2883.87 Chrome/55.0.2883.87 Safari/537.36', 'ACCEPT-LANGUAGE': 'es-ES,es;q=0.8'}
PD:服务器设置也允许CORS。
答案 0 :(得分:0)
它同时接受GET和POST。在这种情况下,我尝试了GET
由于您没有提出简单的请求(您正在添加HTTP标头),浏览器会preflight OPTIONS request要求获得使用额外请求标头发出GET请求的权限。
服务器拒绝OPTIONS请求为未经授权,浏览器拒绝发出GET请求。
您需要编写服务器端代码来处理OPTIONS请求。