3

当我不使用 chrome 中的 --disable-web-security 选项时,我的 CORS / XHR 请求在请求标头中缺少 remember_xyz cookie。如果我启用该选项,remember_xyz cookie 将包含在请求标头中,并且一切正常。

作为解决方法,我目前正在通过基本身份验证标头发送身份验证凭据。但我认为这不是预期或正确的方式。

我怎样才能获得包含在请求标头中的记住 cookie?


编辑:
在 chrome 的网络控制台中,我可以看到以下内容:

(在 chrome 中没有--disable-web-security 选项)

记住 cookie 由 laravel 在第一个响应头中发送。但不包含在下一个请求的标头中。为什么?

在实际请求触发之前,每个请求都有该 OPTIONS 预检请求。预检请求是否有可能以某种方式删除/破坏 cookie?

(在 chrome 中使用--disable-web-security 选项)

记住 cookie 由 laravel 在第一个响应头中发送,并将在下一个请求的头中按角度发送。一切都很好。


编辑 2:
是否由我决定将响应标头中的 cookie 包含到请求标头中?如果是,为什么我不必在 chrome 中启用“--disable-web-security”选项来执行此操作?


我做错了什么?

谢谢!

4

1 回答 1

2

不确定我是否直接回答你的问题,但我会采取行动。您确实需要在客户端和服务器上为 CORS 设置某些标头。

客户端需要知道发送 Cookie 标头,否则会将其剥离。对于 jQuery,这意味着withCredentials在您的 ajax 调用中设置参数。在此处查看更多信息。这听起来像你正在努力解决的问题。

在服务器端,您可能需要确保设置了飞行前请求。

例如,当我在 Laravel 4 中使用 CORS 时,我有一个过滤器来为每个响应添加一些标题:

App::after(function($request, $response)
{
    // Note that you cannot use wildcard domains when doing CORS with Authorization!
    $response->headers->set('Access-Control-Allow-Origin', 'http://dev.domain.local');
    $response->headers->set('Access-Control-Allow-Credentials', 'true');
    $response->headers->set('Access-Control-Allow-Headers', 'Authorization, X-Requested-With');
});

在控制器中,我还有一个 OPTIONS 请求响应飞行前请求。一个例子是:

public function optionsComplex()
{
    $response = Response::make(null, 200);
    $response->headers->set('Allow', 'GET, PUT, DELETE');
    $response->headers->set('Access-Control-Allow-Methods', 'GET, PUT, DELETE');
    return $response;
}

希望有帮助。

于 2013-07-02T15:37:31.423 回答