首页 文章

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

提问于
浏览
0

我正在研究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 回答

  • 0

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

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

相关问题