2015-01-16 115 views
0

我在CORS场景中从Javascript调用了我的RESTful API。在AJAX CORS请求中仅附加了一次授权标头

我正在使用JQuery发送我的POST验证请求。 下面是一个例子:

function post(settings, addAccessToken) { 
     settings.type = 'POST'; 
     settings.cache = false; 
     if (settings.dataType === undefined) 
      settings.dataType = 'json'; 
     if (addAccessToken) { 
      settings.xhrFields = { withCredentials: true }; 
      settings.beforeSend = function (request) { 
       request.setRequestHeader('Authorization', 'Bearer <my access token>'); 
      }; 
      settings.headers = { 
       'Authorization': 'Bearer <my access token>' 
      }; 
     } 
     return $.ajax(settings); 
    } 

在服务器端,我可以看到第一个呼叫与“授权”头正确估值的到来,而所有其他没有这样的标题。

我错过了什么?

谢谢

你cghersi

回答

2

我解决我的问题,所以我想给的答案,别人都在同样的情况。

1)问题是从服务器端启用OPTIONS http请求。事实上,第一次调用相同的url,但是使用动词“OPTIONS”,然后使用POST | GET方法调用第二次调用。如果服务器没有正确回答第一个“选项”呼叫,例如指定正确的允许标题等,第二个调用不起作用。

2)的符号

settings.headers = { 
'Authorization': 'Bearer <my access token>' 
}; 

不工作。设置标题的唯一方法是:

settings.beforeSend = function (request) { 
request.setRequestHeader('Authorization', 'Bearer <my access token>'); 
}; 

希望这可以帮助其他人在未来。

cghersi