gpt4 book ai didi

javascript - 飞行前停止从 Firefox 到 Beego 服务器的 CORS 提取

转载 作者:数据小太阳 更新时间:2023-10-29 05:29:11 24 4
gpt4 key购买 nike

我有一个运行在 http://localhost:3000 上的 ecmascript 7 浏览器应用程序在 Firefox 44.0.2 浏览器中。它正在发布到运行在 https://localdev.net:8443 上的 Beego 1.6.0 服务器. 'localdev.net' 在同一个盒子上并解析为本地主机地址。浏览器代码是:

var serverURL = 'https://localdev.net:8443/v1/user/login'
fetch(serverURL, {
method: 'post',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
mode: 'cors',
cache: 'default',
body: JSON.stringify({username: this.state.username, password: this.state.password})
})
.then(function(response){
if (response.status >= 200 && response.status < 300) {
return Promise.resolve(response)
}
return Promise.reject(new Error(response.statusText))
})
.then(function(data){
console.log('data: ' + data)
})
.catch((err) => console.error(serverURL, err.toString()))

beego 服务器配置为处理 CORS 请求如下:

beego.InsertFilter("*", beego.BeforeRouter, cors.Allow(&cors.Options{
AllowOrigins: []string{"*"},
AllowMethods: []string{"*"},
AllowHeaders: []string{"Origin"},
ExposeHeaders: []string{"Content-Length"},
AllowCredentials: true,
}))

Wireshark 看到客户端向服务器发送飞行前 CORS 选项请求:

OPTIONS /v1/user/login HTTP/1.1\r\n
Host: localdev.imaginout.net:8443\r\n
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:44.0) Gecko/20100101 Firefox/44.0\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n
Accept-Language: en-US,en;q=0.5\r\n
Accept-Encoding: gzip, deflate, br\r\n
Access-Control-Request-Method: POST\r\n
Access-Control-Request-Headers: content-type\r\n
Origin: http://localhost:3000\r\n
Connection: keep-alive\r\n

作为响应,beego 服务器输出:

2016/03/05 12:54:29 [router.go:828][D] | OPTIONS    | /v1/user/login                           | 102.08µs         | not match   |

即使服务器说“不匹配”,wireshark 也会记录响应:

HTTP/1.1 200 OK\r\n
Access-Control-Allow-Credentials: true\r\n
Access-Control-Allow-Origin: http://localhost:3000\r\n
Access-Control-Expose-Headers: Content-Length\r\n
Server: beegoServer:1.6.0\r\n
Date: Sat, 05 Mar 2016 17:54:29 GMT\r\n
Content-Length: 0\r\n
Content-Type: text/plain; charset=utf-8\r\n

对我来说,将 Access-Control-Allow-Origin 设置为浏览器应用程序域的 200 状态表示 CORS 预检成功,但 Firefox 开发人员控制台显示:

"https://localdev.net:8443/v1/user/login" TypeError: NetworkError when attempting to fetch resource.

所以应用程序和/或 Firefox 似乎认为请求失败了。 Wireshark 显示应用程序不会向服务器发送另一个请求。我在等一个帖子。

关于 CORS 有很多问题,但浏览器/API/服务器变化很大,所以我没有找到完全匹配的问题。深入研究,但我们将不胜感激。

最佳答案

已修复。需要在Beego CORS选项中设置Access-Control-Allow-Headers为[]string{"Origin", "Content-Type"}。然后 Access-Control-Allow-Headers 设置正确,飞行前成功。在此之后主帖子成功。

关于javascript - 飞行前停止从 Firefox 到 Beego 服务器的 CORS 提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35817926/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com