确保允许CRO
res.setHeader('Access-Control-Allow-Origin', '*');
// methods you wish to allow
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
注:
我在本例中使用Express。
这个
documentation
有点变了。
希望有帮助。
更新时间:
在使用Symfony之前,我们遇到了同样的问题。
我找到的解决方案有:
-
服务器返回
OPTIONS
方法,允许CRO
-
然后发送http谓词(GET、POST,…)之后
以下是我的意思:
RestListner的代码:
class RestListener
{
/**
* Constructor
*/
public function __construct()
{
}
public function onKernelResponse(FilterResponseEvent $event)
{
if (!$event->isMasterRequest())
return;
$responseHeaders = $event->getResponse()->headers;
$responseHeaders->set('Access-Control-Allow-Headers', 'origin, content-type, accept, x-wsse, set-cookie, x-sessid');
$responseHeaders->set('Access-Control-Allow-Origin', '*');
$responseHeaders->set('Access-Control-Expose-Headers', '*');
$responseHeaders->set('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS');
$request = $event->getRequest();
$method = $request->getRealMethod();
if (strtoupper($method) === 'OPTIONS') {
header('Access-Control-Allow-Headers: origin, content-type, accept, x-wsse, set-cookie, x-sessid');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Expose-Headers', '*');
header('Access-Control-Allow-Methods: POST, GET, PUT, DELETE, OPTIONS');
die(json_encode(array(
'message' => 'Accepted',
'status' => 202,
)));
}
}
}
我们使用symfony作为后端和Angular 2。x作为前端。
通过该解决方案,可以通过CRO。