我正在研究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。
我已经找到了这个问题,我发现我必须从服务器端添加标题attribut,我做了它,我看到响应包含这个标题: 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或邮递员(chrome扩展名)发送请求并且从我的角度调用Web服务根本不起作用,则web服务正常工作。 有什么不对,请帮忙
答案 0 :(得分:0)
由于CORS,您收到错误。邮差不受限制。但是,在WebService中设置标题应足以让您在客户端应用程序中使用它。
您使用的浏览器是什么?有时Chrome对localhost和CORS有点过于敏感。如果是这样,您可以尝试使用其他浏览器吗?以下是解决此问题的工具:Chrome CORS Extension