首页 > 代码库 > 关于CORS的一点研究

关于CORS的一点研究

CORS(Cross-Origin Resource Sharing, 跨源资源共享)是W3C出的一个标准,其思想是使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应是应该成功,还是应该失败。

使用CORS时服务器需设置Access-Control-Allow-Origin头部为‘*’或者某一个或几个域。

其中设为*的话表示所有的域都可以对此服务器进行访问,设置为某一个域的情况下便只有该域的请求可以访问。

带凭据的请求:

默认情况下,跨域请求不提供凭据(cookie、HTTP认证及客户端SSL证明等)。

在发送请求时,通过将withCredentials属性设置为true,可以指定某个请求可以发送凭据。

如果服务器的Response Headers中返回Access-Control-Allow-Credentials:true,则表示服务端接受带凭据的请求

 

CORS的跨浏览器实现方式:

function createCORSRequest(method, url) {
    var xhr = new XMLHttpRequest();
    xhr.onload = function() {
        if(xhr.readyState == 4) {
            try {
                if((xhr.status >= 200 && xhr.status < 300) || xhr == 304) {
                    console.log(xhr.response);
                } else {
                    console.log(‘Request was unsuccessful: ‘ + xhr.status);
                }
            } catch(ex) {
                new Error(ex);
            }
        }
    };
    if(‘withCredentials‘ in xhr) {
        xhr.open(method,url, true);
    } else if(typeof XDomainRequest != ‘undefined‘) {
        xhr = new XDomainRequest();
        xhr.open(method, url);
    } else {
        xhr = null;
    }
    return xhr;
}

之后会补上服务端返回字段的意义和CORS简单请求和非简单请求的方式。

晚安

关于CORS的一点研究