Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 在飞行前请求选项5中发送自定义标头_Angular_Go_Cors_Http Headers - Fatal编程技术网

Angular 在飞行前请求选项5中发送自定义标头

Angular 在飞行前请求选项5中发送自定义标头,angular,go,cors,http-headers,Angular,Go,Cors,Http Headers,我用angular 5构建了一个应用程序,该应用程序连接到一个使用golang开发的REST API,并托管在端口8080上运行的aws ec2实例上。我的角度前端代码创建POST请求,在发出该请求之前,浏览器首先发送COR飞行前请求,该请求失败,并显示以下错误消息: 已阻止跨源请求:同一源策略不允许读取 位于的远程资源 https://signup.mysite.com:8080/api/v1/merchant/signup。(理由: CORS标头中缺少令牌“访问控制允许凭据” 来自CORS飞

我用angular 5构建了一个应用程序,该应用程序连接到一个使用golang开发的REST API,并托管在端口8080上运行的aws ec2实例上。我的角度前端代码创建POST请求,在发出该请求之前,浏览器首先发送COR飞行前请求,该请求失败,并显示以下错误消息:

已阻止跨源请求:同一源策略不允许读取 位于的远程资源
https://signup.mysite.com:8080/api/v1/merchant/signup
。(理由: CORS标头中缺少令牌“访问控制允许凭据” 来自CORS飞行前频道的“访问控制允许标头”)

浏览器在选项请求中将以下标头发送到REST API服务器:

Access-Control-Request-Headers : access-control-allow-credentia…rol-allow-origin,content-type
Access-Control-Request-Method : POST
在golang上启用了COR,但不确定它们是否工作。我怎样才能解决这个问题

编辑 使用以下代码在angular 5中的post请求中添加头

import { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http';



let headers = new HttpHeaders();
  headers = headers.append('Access-Control-Allow-Origin', '*');
  headers = headers.append('Access-Control-Allow-Credentials', 'true');

  return this.http.post<Response>(this.apiUrl+'merchant/signup', JSON.stringify(formValues),{headers: headers}).map(response => response.response);'true');
也使用核心包

router.Use(cors.Default())

您必须从服务器端代码启用cors

func setupResponse(w *http.ResponseWriter, req *http.Request) {
    (*w).Header().Set("Access-Control-Allow-Origin", "*")
    (*w).Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE")
    (*w).Header().Set("Access-Control-Allow-Headers", "Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization")
}

func yourApi(w http.ResponseWriter, req *http.Request) {
    setupResponse(&w, req) 

    // process the request...
}

您可以在本地Chrome副本的开发过程中禁用CORS。如果您在MAC OS上,请在终端中发出以下命令:

open -a Google\ Chrome --args --disable-web-security --user-data-dir

此步骤将禁用一些(如果不是全部)Chrome安全功能,因此请小心操作。如果您无法控制服务器端,这将消除您的错误,并允许您继续开发。

显示已启用的cors@SachilaRanawaka使用标题更新问题设置服务中的标题。不要把它寄给我server@SachilaRanawaka不确定您的意思,请解释使用此代码的服务器端语言必须在飞行前请求的答案中。这是非常重要的,否则永远无法实现。
open -a Google\ Chrome --args --disable-web-security --user-data-dir