CORS 知识点汇总


踩坑集锦


一、普通跨域

服务端配置

$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 传递失效

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

客户端配置

xhr 原生:

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

Jquey 中添加 xhrFields 参数:

$.ajax({
   url: a_cross_domain_url,
   xhrFields: {
      withCredentials: true
   }
});

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

参考文献

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


文章作者: Fengit
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Fengit !
  目录