Angular 在飞行前请求选项5中发送自定义标头
我用angular 5构建了一个应用程序,该应用程序连接到一个使用golang开发的REST API,并托管在端口8080上运行的aws ec2实例上。我的角度前端代码创建POST请求,在发出该请求之前,浏览器首先发送COR飞行前请求,该请求失败,并显示以下错误消息: 已阻止跨源请求:同一源策略不允许读取 位于的远程资源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飞
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