我正在研究anghular 4 projet,我有一个关于来自服务器的http请求和响应的问题,例如:
XMLHttpRequest无法加载http://192.168.1.110:8000/updateUser/Contacts/ebba56e9-72eb-971a-9bb6-552de74d0d69 . 对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头 . 因此不允许来源'http:// localhost:4200'访问 . 响应具有HTTP状态代码405 .
我已经找到了这个问题,我发现我必须从服务器端添加 Headers attribut,我做了它,我看到响应包含这个 Headers :HEADERS
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: *
Access-Control-Allow-Methods: GET, POST, OPTIONS,PUT
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Connection: close
Content-Type: application/json
Date: 2017 May 31 13:15:48
Host: 192.168.1.110:8000
X-Debug-Token: fbb39b
X-Debug-Token-Link: http://192.168.1.110:8000/_profiler/fbb39b
X-Powered-By: PHP/5.6.30
我的控制器是:
/**
*
* @Get("/getMenu/{id}")
*/
public function getMenuAction($id ,Request $request){
$fr= $request->get('fr') ;
$url = $this->container->getParameter('serverUri'). wsUrl::Ws_GetMenu . $uniquecsoecid. '?fr='.$fr;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, wsUrl::ws_Headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
$res = new Response();
$res->setCharset('UTF-8');
$res->headers->set('Access-Control-Allow-Method','PUT');
$res->headers->set('Access-Control-Allow-Credentials','true');
$res->headers->set('Access-Control-Allow-Origin','*');
$res->headers->set('Access-Control-Allow-Headers','auth_token');
$res->setContent($response);
return $res ;
}
有关更多详细信息,我正在使用symfony调用另一个后端,并将此后端Web服务的结果返回给我的角度客户端项目 .
但令我感到困惑的是,如果我尝试从restlet或postman发送请求(chrome扩展)并且从我的角度调用Web服务根本不起作用,web服务正常工作 . 有什么不对,请一些帮助
1 回答
由于CORS,您收到错误 . 邮差不受限制 . 但是,在WebService中设置 Headers 应该足以让您在客户端应用程序中使用它 .
你使用的是什么浏览器?有时Chrome对localhost和CORS有点过于敏感 . 如果是这样,您可以尝试使用其他浏览器吗?这是解决它的工具:Chrome CORS Extension