本地主机上的'Access-Control-Allow-Origin'

时间:2019-10-22 18:23:40

标签: angular symfony http-headers

我在前端使用Angular,在后端使用Symfony。

这是我尝试从后端获取数据的方式:

getTechnologies(): Observable<Itechnologies[]> {
  return this.http.get<Itechnologies[]>('http://localhost/technologies');
}

这是尝试从后端发送数据的方法:

public function getTechnologies(Request $request) {
    $technologies = $this->technologyService->getTechnologies($request->getContent());
    return new Response(json_encode($technologies));
}

这就是我得到的:

  

从“ http://localhost/technologies”访问XMLHttpRequest   原产地“ http://localhost:4200”已被CORS政策禁止:否   请求中存在“ Access-Control-Allow-Origin”标头   资源。

我也使用header('Access-Control-Allow-Origin: *');进行了尝试,但是遇到了同样的错误。

如果它们都在本地主机上,为什么会出现此错误?

2 个答案:

答案 0 :(得分:2)

端口是来源的一部分,这就是为什么在此处检测到CORS的原因。要针对本地开发处理此问题,您有两种选择:

  1. 使用可设置CORS标头的浏览器插件(请仅用于本地开发者设置)。

  2. 使用本地代理在同一端口上同时交付(前端和后端)(请参见here)。

当然,您还可以通过应用程序设置CORS响应标头,但是对于开发和生产,所需的值将有所不同。还要注意,'Access-Control-Allow-Origin:*'绝对不能在生产中使用,因为它基本上会禁用CORS保护。请注意,如果您处理的是CORS,则必须处理可能会更改服务器状态(如POST,PUT,DELETE等)的强制性OPTIONS请求。

答案 1 :(得分:1)

您还可以查看此捆绑包:https://github.com/nelmio/NelmioCorsBundle用于后端,并将其用于开发依赖项。