Authorization Header仅在AJAX CORS请求中附加一次
我在CORS场景中从Javascript调用我的RESTful API。
我正在使用JQuery发送我的POST身份validation请求。 这是一个例子:
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 '); }; settings.headers = { 'Authorization': 'Bearer ' }; } return $.ajax(settings); }
在服务器端,我可以看到第一个调用带有’Authorization’标头正确评估,而所有其他调用没有这样的Header。
我错过了什么?
谢谢
cghersi
我解决了我的问题所以我想给其他人的答案处于同样的情况。
1)问题是从服务器端启用OPTIONS http请求。 实际上,首先调用相同的url,但使用动词“OPTIONS”,然后使用POST | GET方法再次调用真实URL。 如果服务器未正确应答第一个“OPTIONS”呼叫,例如指定正确的允许标头等,则第二个呼叫不起作用。
2)符号
settings.headers = { 'Authorization': 'Bearer ' };
不管用。 设置标头的唯一方法是:
settings.beforeSend = function (request) { request.setRequestHeader('Authorization', 'Bearer '); };
希望这可以在将来帮助其他人。
cghersi