跨域jQuery ajax调用凭证

时间:2012-12-19 14:04:34

标签: javascript jquery certificate cross-domain

我已按照以下步骤操作:

  1. 让服务器允许跨域调用(包含所有标题和内容)此方法
  2. 使用某些跨域调用测试服务器
  3. 获取服务器以强制颁发证书此作品
  4. 使用浏览器转到服务器上的文件,选择正确的证书并查看文件仍在工作
    现在我们进入了好的部分
  5. 将跨域调用与证书< - 这不起作用
  6. 相结合

    问题

    我从浏览器获取证书请求,但是当我选择与使用浏览器时相同的证书时,会进行调用,但是我获得了403 Forbidden。

    代码

    $.ajax({
         type: "POST",
         xhrFields: {withCredentials: true},
         dataType: "xml",
         contentType: "text/xml; charset=\"utf-8\"",
         url: "https://www.myOtherServer.com/testfile.asp",
    });
    

    有什么想法吗?

    修改

    Access-Control-Allow-Credentials: trueAccess-Control-Allow-Origin已正确配置。

    其他信息

    我开始认为它与内容类型有关。当我将其更改为"text/html"时出现415错误,但我确实需要发送xml,因为它是一个SOAP服务器。

    回复标题

    Access-Control-Allow-Cred...    true
    Access-Control-Allow-Head...    Content-Type, Origin, Man, Messagetype, Soapaction, X-Test-Header
    Access-Control-Allow-Meth...    GET,POST,HEAD,DELETE,PUT,OPTIONS
    Access-Control-Allow-Orig...    https://www.mywebsite.com
    Access-Control-Max-Age  1800
    Cache-Control   private
    Content-Length  5561
    Content-Type    text/html; charset=utf-8
    Date    Wed, 19 Dec 2012 15:06:46 GMT
    Server  Microsoft-IIS/7.5
    X-Powered-By    ASP.NET
    

    请求标题

    Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Encoding gzip, deflate
    Accept-Language nl,en-us;q=0.7,en;q=0.3
    Access-Control-Request-He...    content-type
    Access-Control-Request-Me...    POST
    Cache-Control   no-cache
    Connection  keep-alive
    Host    myhoast.com
    Origin  https://www.mywebsite.com
    Pragma  no-cache
    User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0
    

2 个答案:

答案 0 :(得分:10)

我最好的猜测是,这是一个问题,不是你的Javascript,而是你的CORS配置。您是否使用Access-Control-Allow-Credentials: true标头设置了服务器? http://www.w3.org/TR/cors/#access-control-allow-credentials-response-header

另请注意,即使设置了allow-credentials标头,如果Access-Control-Allow-Origin为*,浏览器也不会允许对凭据请求做出响应,根据以下文档:https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS?redirectlocale=en-US&redirectslug=HTTP_access_control#Requests_with_credentials

编辑:由于OP已正确设置CORS标头,因此问题似乎是服务器拒绝具有403状态代码的OPTIONS请求。 OPTIONS请求(称为“预检请求”)在某些跨域请求(例如具有application / xml内容类型的POST)之前发送,以允许服务器通知浏览器允许哪些类型的请求。由于浏览器没有从OPTIONS请求中看到它所期望的200响应,因此它不会触发实际的POST请求。

答案 1 :(得分:1)

基本上我们只需要写htaccess

Header set Access-Control-Allow-Origin “*”

但是当我们需要cookie等时,我们必须在你的ajax代码和htaccess上添加脚本

我在我的博客http://blog.imammubin.com/cross-domain-xhr/2014/05/28/

上写了关于跨域XHR的文章 希望这有帮助..