使用 AJAX、JQuery、Apache 和基本身份验证的跨源请求

Posted

技术标签:

【中文标题】使用 AJAX、JQuery、Apache 和基本身份验证的跨源请求【英文标题】:Cross origin request with AJAX, JQuery, Apache & basic authentication 【发布时间】:2013-08-11 15:34:02 【问题描述】:

在 Google 和 *** 上花费了数小时而没有任何进展的感觉后,我请求帮助以使交叉请求 ajax 正常工作。

我在客户端有 JQuery,并带有基本身份验证的自定义配置:

//configuration AJAX  
$(document).ajaxSend(function(e, xhr, options)    
    xhr.withCredentials = true;  
    xhr.setRequestHeader("Authorization", "Basic dGVzdEB0ZXN0LmZyOmF6ZXJ0eQ==");  
);

//a request
$.get("http://domainA.com/api");

在我的服务器上,Apache 被配置为使用特殊的 cors 标头进行响应:

Header always set Access-Control-Allow-Origin "http://domainB.com"
Header always set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
Header always set Access-Control-Request-Headers "Authorization, X-Requested-With, Content-Type, Accept, Origin"
Header always set Access-Control-Max-Age "86400"
Header always set Access-Control-Allow-Credentials "true"

所以,当请求发送时,AJAX 发出了预检请求:

OPTIONS /api HTTP/1.1
Host: domainA.com
User-Agent: useragent
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Origin: domainB.com
Access-Control-Request-Method: GET
Access-Control-Request-Headers: authorization
Connection: keep-alive

我的服务器回复:

HTTP/1.1 200 OK
Date: Fri, 09 Aug 2013 15:58:38 GMT
Server: Apache
Access-Control-Allow-Origin: http://domainB.com
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Request-Headers: authorization, X-Requested-With, Content-Type, Accept, Origin
Access-Control-Max-Age: 86400
Access-Control-Allow-Credentials: true
Content-Length: 489
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1

并且 AJAX 请求停止而不执行真正的请求。返回的代码是 0。我找不到配置中的问题,因为任何 Access-Control-Request 都有响应。谢谢你的帮助

【问题讨论】:

您确定没有发送 GET 请求吗?您在浏览器的控制台中看到了什么? 预检请求及其响应是我可以在开发人员工具中看到的唯一内容。预检请求后,请求结束并返回代码 0。 这个问题解决了吗?我现在也有同样的问题...***.com/questions/19867663/… 【参考方案1】:

也许你应该试试这个?它在我的 Apache 服务器上运行良好:

Header always set Access-Control-Allow-Headers "Authorization, X-Requested-With, Content-Type, Accept, Origin"

使用Access-Control-Allow-Headers 而不是Access-Control-Request-Headers

【讨论】:

以上是关于使用 AJAX、JQuery、Apache 和基本身份验证的跨源请求的主要内容,如果未能解决你的问题,请参考以下文章

如何使用jQuery和Ajax对DreamFactory进行基本身份验证

使用 jQuery/ajax 的基本身份验证

使用jQuery加载基本AJAX

Jquery中ajax基本语法

第15章WEB15-AJAX和JQuery案例篇

使用 PHP 上传基本的 jQuery Ajax 文件