踩坑集锦


一、普通跨域

服务端配置

1
2
3
4
5
$host   = $referer['host'];
$scheme = $referer['scheme'];

$response->header('Access-Control-Allow-Origin', "$scheme://{$host}")
->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS')

服务端额外配置

注意Access-Control-Allow-Origin 不能为 "*",否则 cookie 传递失效

1
->header("Access-Control-Allow-Credentials", "true");

客户端配置

xhr 原生:

1
2
3
4
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.open("POST", "url", true);
xhr.send();

Jquey 中添加 xhrFields 参数:

1
2
3
4
5
6
$.ajax({
url: a_cross_domain_url,
xhrFields: {
withCredentials: true
}
});

Zepto 有 Bug 暂时无解,因为 Zepto 会在open之前设置withCredentials ,除非修改 ajax 源代码。

参考文献

WHATWG 的 XHR 标准
CORS 跨域发送 Cookie
webview的CORS跨域
前方有坑,请绕道——Zepto 中使用 CORS