当我不使用——disable-web-security选项时,我的CORS/XHR请求在请求头中缺乏memorber_xyz cookie。如果我启用该选项,memorber_xyz cookie将包含在请求头中,一切都工作正常。
作为解决方案,我目前通过基本的验证头发送认证凭据。但我认为这不是我想要的,也不是正确的方式。
我怎么能得到记住cookie包含在请求头?
编辑:
在chrome的网络控制台,我可以看到以下内容:
(不带——disable-web-security选项)
记忆cookie由laravel在第一个响应头中发送。但是不会被angular包含在下一个请求的头文件中。为什么?
每个请求在实际请求触发之前都有OPTIONS预飞行请求。飞行前请求是否可能以某种方式删除/破坏cookie ?
(在chrome中使用——disable-web-security选项)
记忆cookie由laravel在第一个响应头中发送,并将在angular的下一个请求头中发送。一切都很好。
编辑2:
我是否应该将响应头中的cookie包含到请求头中?当是的,为什么我不需要这样做与"——禁用web-security"选项在chrome中启用?
我做错了什么?
谢谢!
我不确定我是否在直接回答你的问题,但我会尝试一下。您确实需要为CORS在客户端和服务器端设置特定的标头。
客户端需要知道发送Cookie头,否则它将删除它们。对于jQuery,这意味着在ajax调用中设置withCredentials
参数。在这里查看更多信息。这听起来像是你正在努力解决的问题。
在服务器端,您可能需要确保设置了飞行前请求。
例如,当我在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;
}
希望对你有帮助。