1.原生XHR
1 2 3 4 | var xhr = new XMLHttpRequest(); xhr.open("POST", "http://xxxx.com/xxx", true); xhr.withCredentials = true; //支持跨域发送cookies xhr.send(); |
2.jquery的Ajax请求
通过设置 withCredentials: true
,发送Ajax时,Request header中便会带上 Cookie 信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | $.ajax({ type: "POST", url: "http://xxx.com/api/test", dataType: 'json', data:data, contentType: "application/json", // 允许携带证书 xhrFields: { withCredentials: true }, // 允许跨域 crossDomain: true, success:function(){ }, error:function(){ } }) |
3.服务端配置
PS:
1.通过在响应 header 中设置 ‘*’ 来允许来自所有域的跨域请求访问。
1 | response.setHeader("Access-Control-Allow-Origin", "*"); |
2.只允许来自特定域 http://my.domain.cn:8080 的跨域访问
1 | response.setHeader("Access-Control-Allow-Origin", "http://my.domain.cn:8080"); |
3.较灵活的设置方式,允许所有包含 mydomain.com 的域名访问.
1 2 | if(request.getHeader("Origin").contains("mydomain.com")) { response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));} |
服务器端通过在响应 header 中设置 Access-Control-Allow-Credentials = true
来运行客户端携带证书式访问。通过对 Credentials 参数的设置,就可以保持跨域 Ajax 时的 Cookie。这里需要注意的是:
服务器端 Access-Control-Allow-Credentials = true
时,参数Access-Control-Allow-Origin
的值不能为 '*'
1 2 | header("Access-Control-Allow-Credentials: true");//携带cookie header("Access-Control-Allow-Origin: http://www.xxx.com");//允许跨域<code class="language-java hljs has-numbering"> |