2015-11-02 103 views
0

我不知道为什么我的AJAX CORS不工作..如何允许跨源数据共享?

AJAX

$(document).ready(function(){ 
     var xhr = new XMLHttpRequest(); 
     $.ajax({ 
      url: "SERVER_URL_AND_PARAMETERS", 
      type:"POST", 
      beforeSend:function(xhr){ 
       xhr.setRequestHeader("Access-Control-Allow-Origin", "*"); 
       xhr.setRequestHeader("Access-Control-Allow-Methods", "GET, POST"); 
      }, 
      dataType:"json", 
      crossDomain: true, 
      success:function(data, textStatus, xhr){ 
       alert(data); 
      }, 
      error:function(xhr,status,error){ 
       alert("code:"+xhr.textStatus+"\n"+"message:"+error.responseText+"\n"+"error:"+error.log); 

      } 

     }); 

    }); 

响应头

Allow:GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS 
    Cache-Control:no-cache="set-cookie, set-cookie2" 
    Connection:Keep-Alive 
    Content-Language:ko-KR 
    Content-Length:0 
    Content-Type:text/plain 
    Date:Mon, 02 Nov 2015 07:19:54 GMT 
    Expires:Thu, 01 Dec 1994 16:00:00 GMT 
    Keep-Alive:timeout=10, max=100 
    Set-Cookie:SOME_COOKIES; Expires=Tue, 01-Nov-16 07:19:53 GMT; Path=/ 
    X-UA-Compatible:IE=EmulateIE8, requiresActiveX=true 

请求头

Accept:*/* 
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:en-US,en;q=0.8 
Access-Control-Request-Headers:accept, access-control-allow-headers, access-control-allow-methods, access-control-allow-origin 
Access-Control-Request-Method:POST 
Connection:keep-alive 
Host:SERVER_URL 
Origin:http://CLIENT_URL 
Referer:http://CLIENT_URL/AND/JSP_FILE_PATH.jsp?lineCd=CODE1&prdtCode=CODE2 
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36 

铬错误详细

MLHttpRequest cannot load SERVER_URL_AND_PARAMETER Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'CLIENT_URL' is therefore not allowed access. 

我不知道我的代码有什么问题。我正在使用CLIENT_URL端Web应用程序。

回答

0

CORS头文件例如"Access-Control-Allow-Origin"务必由服务器设置,而不是由客户端设置。这是授予CORS访问客户端的服务器,而不是其他方式。你不能从浏览器给CORS访问权限。

MDN section on CORS,这里有一个描述性的报价:

的跨来源资源共享标准的作品,通过添加新的HTTP 头,让服务器来描述一组起源被 允许读取信息使用网络浏览器。此外, 对于可能导致用户数据产生副作用的HTTP请求方法(特别是对于 ,对于GET以外的HTTP方法或对于某些MIME类型的 POST使用),规范要求浏览器 “预检”请求通过HTTP OPTIONS请求方法从服务器 请求支持的方法,然后在从服务器“批准” 时,发送实际请求与实际HTTP请求 方法。服务器还可以通知客户端 (包括Cookie和HTTP验证数据)是否应该以 请求发送“凭证”。

特别是,请注意“允许服务器描述允许使用Web浏览器读取该信息的原始集合”部分。