javascript - AngularJS withCredentials 不发送

标签 javascript php ajax angularjs cors

在 AngularJS 中,我在一个子域中有我的 Restful API,但我遇到了 cookie/session 没有跨域共享的问题。对于 Angular,我这样做:

app.config(['$httpProvider',
function($httpProvider) {
    $httpProvider.defaults.useXDomain = true;
    $httpProvider.defaults.withCredentials = true;
    delete $httpProvider.defaults.headers.common['X-Requested-With'];
}]);

另外,当我用 $http 发出请求时,我正在做

var object = {};

object.url = '/example'
object.withCredentials = true;

$http(object).success(object.success).error(object.error);

在我的服务器端我有:

if($_SERVER['REQUEST_METHOD']=='OPTIONS') {
    if(isset($_SERVER['HTTP_X_FOWARDED_HOST']) && !empty($_SERVER['HTTP_X_FOWARDED_HOST'])) {
        $origin=$_SERVER['HTTP_X_FOWARDED_HOST'];
    } else {
        $origin=$_SERVER['HTTP_ORIGIN'];
    }
    if(isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']) && ($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']=='POST' || $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']=='DELETE' || $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']=='PUT')) {
        header('Access-Control-Allow-Origin: '.$origin);
        header('Access-Control-Allow-Credentials: true');
        header('Access-Control-Allow-Headers:  *,X-Requested-With,Content-Type');
        //header('Access-Control-Allow-Headers: Content-Type');
        header('Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE, PUT');
        // http://stackoverflow.com/a/7605119/578667
        header('Access-Control-Max-Age: 86400');
    }

}

现在我看到服务器说它将允许凭据,但它没有在选项请求中发送。屏幕截图如下。

enter image description here 我做错了什么?

最佳答案

默认情况下,凭证不会在 CORS 飞行前 OPTIONS 请求中发送。 See here .另见 answer .凭据将根据您的实际请求发送。

此外,useXDomain 和 X-Request-With header 实际上并未在当前版本的 Angular 中使用,因此这些行在您的 $httpProvider 配置中没有任何作用。所有 CORS 交互都由浏览器本身和您的服务器处理。

一般来说,要正确实现 CORS,您的服务器不应在预检请求中要求凭据。 (请注意,某些浏览器无论如何都会发送它们,但不应该发送。)这是因为 OPTIONS 请求被认为是“安全的”,不应包含任何 secret 信息。

您的问题可能出在您尝试跨域共享的 cookie 中。您要发送什么 cookie?

关于javascript - AngularJS withCredentials 不发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22100084/

相关文章:

Javascript 用集成 PHP 标签替换点击时的内容 insidehtml

javascript - 为什么要使用 observables 而不是 Ajax?

php - 从 php 中的 sql 资源中选择 MAX(value)

php - 我的网站可能被黑客入侵了吗?

php - 使 PHP 始终以 JSON 进行响应,即使在输出错误时也是如此

jquery - 下载文件时如何显示和删除正在加载的 .gif?

javascript - 使用 CAML/jQuery 将多条记录更新到 Sharepoint(批量更新)

javascript - 在 2 行中动态创建 div 高度

javascript - 使用 jQuery 用随机数组元素填充 20 个文本框

Javascript/Node : Passed in object seems to overwrite "self" - closure issue?