如何允许跨源资源共享?

时间:2015-11-02 07:36:19

标签: javascript jquery ajax cors

我不知道为什么我的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

chrome错误明细

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应用程序。

1 个答案:

答案 0 :(得分:0)

"Access-Control-Allow-Origin"等CORS标头必须由服务器设置,而不是由客户端设置。服务器授予客户端CORS访问权限,而不是相反。您无法通过浏览器自行访问CORS。

来自MDN section on CORS,这是一个描述性引用:

  

跨域资源共享标准通过添加新HTTP来工作   允许服务器描述原始集合的标头   允许使用Web浏览器读取该信息。另外,   对于可能对用户数据造成副作用的HTTP请求方法(in   特别是,对于GET以外的HTTP方法,或者对于POST使用   某些MIME类型),规范要求浏览器   "预检"请求,从服务器请求支持的方法   使用HTTP OPTIONS请求方法,然后,在"批准"从   服务器,使用实际的HTTP请求发送实际请求   方法。服务器还可以通知客户端"凭证"   (包括Cookie和HTTP身份验证数据)应与之一起发送   请求。

特别要注意的是,"允许服务器描述允许使用Web浏览器读取该信息的原始集合#34;