跨域源资源共享同源:域名、端口、协议都一样CORS的基本思想是使用自定义的HTTP头,让服务器声明允许访问的源。使用CORS时,异步请求分为简单请求(非Preflight)和非简单请求。简单请求所有跨源请求(简单或非简单)始终包含一个源请求标头,该标头由浏览器添加,不受用户控制。该值由协议、域名、端口组成,描述了请求的来源。以下是Origin头的例子:Origin:http://www.hello.com服务器接受这个请求,会在响应头Access-Control-Allow-Origin中发回同源信息。(*表示该资源可以被任意外域访问)Access-Control-Allow-Origin:http://www.hello.com非简单请求非简单CORS请求会在正式请求前发送Preflight请求,并且只有在确认后才发送真正的XMLHttpRequest请求。浏览器会自动处理这两个请求,Preflight请求结束后,会根据响应中指定的时间缓存结果。所以第一次发送这种请求只会多发送一个HTTP请求。Preflight请求使用OPTIONS方法发送以下Header:Origin:与简单请求相同Access-Control-Request-Method:请求本身使用的方法以下是使用带有自定义header的POST方法发送的请求Custom-标头。来源:http://www.hello.comAccess-Control-Request-Method:POSTAccess-Control-Request-Headers:Custom-Headervarurl='http://www.hello.com';varxhr=newXMLHttpRequest();xhr.open('POST',网址,真);xhr.setRequestHeader('Custom-Header','value');xhr.发送();服务器通过在响应中发送以下标头与浏览器通信:Access-Control-Allow-Origin:http://www.hello.comAccess-Control-Allow-Methods:POST,GETAccess-Control-Allow-Headers:Custom-HeaderAccess-Control-Allow-Max-Age:28000//表示Preflight缓存的时长(秒),在此期间不需要再次发送pre-request。此外,通过将XMLHttpRequest的withCredentials属性设置为true,您可以发送带有凭据(cookie、HTTP身份验证、客户端SSL证书等)的跨域请求。varxhr=newXMLHttpRequest();xhr.withCredentials=true;如果服务器接受带有凭据的请求,它将使用以下HTTP标头进行响应:Access-Control-Allow-Credentials:trueJ??SONP(JSONwithpadding)JSONP由两部分组成:回调函数+数据,回调函数是当response到达时应该在页面中调用该函数,一般会在请求中指定回调函数的名称。和数据是传递给回调函数的JSON数据。JSONP通过动态
