AJAX请求工作正常,但是当我通过beforeSend或标头添加标头时,会发出OPTIONS预检请求,而GET请求将中止。
Code: $.ajax({ type: "GET", crossDomain: true, beforeSend: function (xhr) { xhr.setRequestHeader("session", $auth); }, url: $url, success: function (data) { $('#something').html(data); }, error: function (request, error) { $('#something').html("<p>Error getting values</p>"); } });
指定了类似的没有 头的AJAX请求(在我添加/修改头的那一刻,进行了OPTIONS调用)
Request GET /api/something?filter=1 HTTP/1.1 Referer http://app.xyz.dj/dashboard Accept application/json, text/javascript, */*; q=0.01 Accept-Language en-US Origin http://app.xyz.dj Accept-Encoding gzip, deflate User-Agent Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; MASMJS; rv:11.0) like Gecko Host 162.243.13.172:8080 DNT 1 Connection Keep-Alive Cache-Control no-cache
相似的服务器响应头(用于GET请求)
Response HTTP/1.1 200 OK Server Apache-Coyote/1.1 Access-Control-Allow-Origin * Access-Control-Allow-Methods GET, POST, DELETE, PUT, OPTIONS, HEAD Access-Control-Allow-Headers Content-Type, Accept, X-Requested-With Access-Control-Allow-Credentials true Content-Type application/json Transfer-Encoding chunked Date Thu, 09 Jan 2014 14:43:07 GMT
我做错了什么?
解决了。感谢@JasonP的指针。改变服务器 响应头 从
访问控制允许标题:*
到特定的
访问控制允许标题:内容类型,接受,X请求使用,会话
现在就可以了!