angular - CORS 策略已阻止从源“http://localhost:4200”访问“http://localhost:8080/BeginSignup”获取
问题描述
我正在尝试向我的 Golang AppEngine API 发送 fetch POST 请求。但是,我收到了 CORS 策略错误,我不知道为什么。这是我的代码:
这是从 Angular 调用 API 的代码
private async sendHTTPPut(data: UserInfo, func: string) {
let requestHeaders = { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' } as HeadersInit;
console.log(requestHeaders)
return await fetch(
this.endpoint + func,
{
method: 'POST',
headers: requestHeaders,
body: JSON.stringify(data),
mode: "cors"
}
)
}
这是处理 CORS 的服务器代码:
func StartApp() {
router = mux.NewRouter()
router.HandleFunc("/", hello)
router.HandleFunc("/hello", hello)
router.HandleFunc("/AcceptMember", AcceptMember)
router.HandleFunc("/CreateTeam", CreateTeam)
router.HandleFunc("/Leave", Leave)
router.HandleFunc("/InviteMember", InviteMember)
router.HandleFunc("/BeginSignup", BeginSignup)
router.HandleFunc("/ProcessSignup", ProcessSignup)
router.HandleFunc("/CompleteSignup", CompleteSignup)
// Scoring
router.HandleFunc("/GetLocalScore", GetLocalScore)
allowedOrigins := handlers.AllowedOrigins([]string { "* always" })
allowedHeaders := handlers.AllowedHeaders([]string { "Content-Type" })
if err := http.ListenAndServe(":8080", handlers.CORS(allowedOrigins, allowedHeaders)(router)); err != nil {
log.Fatal(err)
}
}
这是发送到服务器的请求:
Request URL: http://localhost:8080/BeginSignup
Referrer Policy: no-referrer-when-downgrade
Provisional headers are shown
Access-Control-Allow-Origin: *
Content-Type: application/json
Referer: http://localhost:4200/
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36 Edg/85.0.564.68
PAYLOAD
{member: {phoneNum: "0648503047"},…}
member: {phoneNum: "0648503047"}
score: null
team: {teamName: ".None", teamMembers: ["0648503047"], teamLeader: "0648503047"}
这是从服务器发回的响应:
Request URL: http://localhost:8080/BeginSignup
Request Method: OPTIONS
Status Code: 200 OK
Remote Address: [::1]:8080
Referrer Policy: no-referrer-when-downgrade
Content-Length: 0
Date: Mon, 05 Oct 2020 20:34:51 GMT
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Access-Control-Request-Headers: access-control-allow-origin,content-type
Access-Control-Request-Method: POST
Connection: keep-alive
Host: localhost:8080
Origin: http://localhost:4200
Referer: http://localhost:4200/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36 Edg/85.0.564.68
解决方案
我假设您在开发模式下运行 Angular ( ng serve
)。在这种情况下,CORS 错误来自角度。
您必须添加一个 proxy.conf.json,其中包含 src 中不同端点的条目:
{
"/api/*": {
"target": "http://localhost:<your-port>",
"secure": false,
"logLevel": "debug"
}
}
并在你的 angular.json 中引用这个文件:
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"browserTarget": "<your-app>:build",
"proxyConfig": "src/proxy.conf.json"
},
...
},
推荐阅读
- java - 如何在java中反转字符串,输入是ATGC,预期输出是GCAT
- c# - 考虑到以下网络限制,如何非常快速地抓取 XML?
- java - ParseQuery.whereContainedIn() 不返回任何结果
- android - 在没有 SpannableString 样式的 Textview 中选择文本
- java - 每当我第一次启动应用程序时,应用程序崩溃,然后它会询问我用户权限
- reactjs - 尽管测试成功,但“npm test”失败(使用 create-react-app 创建的 reactjs 应用程序)
- php - 如何通过从数据库中获取值来制作可靠的下拉列表
- laravel - 加入表并从多对多获取(Laravel)
- javascript - 如何修复“将请求的模式设置为'no-cors'”错误?
- swift - Swift:使用 tableView DidSelect 方法更改单元格的 UIButton 图像