JQuery Ajax基本身份validation标头无法正常工作
我试图在JQuery中的服务器上发出一个简单的GET请求。
$.ajax({ headers: { "Authorization": "Basic " + btoa("hello" + ":" + "world") }, url: "http://hello.world?Id=1", method: "GET", success: function () { }, }).then(function () { });
问题是,当发送请求时,身份validation标头未正确放入请求中:
Host: hello.world User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: de,en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate Access-Control-Request-Method: GET Access-Control-Request-Headers: authorization Origin: null Connection: keep-alive Cache-Control: max-age=0
当向另一个源发送HTTP请求时,该请求可以是“简单”或“非简单”。 如果请求使用(或两者),则请求变得非简单
- 除HEAD,GET或POST之外的HTTP动词; 要么,
- 除
Accept
,Accept-Language
,Content-Language
或Content-Type
之外的请求标头
由于您的请求设置了Authorization
标头,因此它非常简单。
当请求不简单时,浏览器首先使用OPTIONS方法发送预检请求。 这是你在问题中看到的要求。 (请参阅预检请求中的HTML5 Rocks和[我对Access-Control-Allow-Origin标头如何工作的答案? )。 预检不包括非简单标头,但在Access-Control-Request-Headers
标头中列出它们。
如果服务器正确响应了预检,则浏览器将发出实际请求。 在这种情况下,浏览器正在寻找响应标头Access-Control-Allow-Headers: Authorization
来自服务器的Access-Control-Allow-Headers: Authorization
,以指示非简单Authorization
标头可以在实际请求中发送。 您的服务器必须在其响应中包含该标头。