对预检请求的响应未通过访问控制

时间:2017-05-31 13:47:14

标签: web-services angular symfony cors authorization

我正在研究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服务正常工作。 有什么不对,请帮忙

1 个答案:

答案 0 :(得分:0)

由于CORS,您收到错误。邮差不受限制。但是,在WebService中设置标题应足以让您在客户端应用程序中使用它。

您使用的浏览器是什么?有时Chrome对localhost和CORS有点过于敏感。如果是这样,您可以尝试使用其他浏览器吗?以下是解决此问题的工具:Chrome CORS Extension