CORS从Firefox到Beego服务器的获取在预飞行后停止
CORS fetch from Firefox to Beego server stops after pre-flight
我有一个 ecmascript 7 浏览器应用程序在 Firefox 44.0.2 浏览器中运行在 http://localhost:3000 上。它正在发布到 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
对我来说,将访问控制允许来源设置为浏览器应用程序域的 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"}。然后正确设置访问控制允许标头,预检成功。在此之后,主要帖子成功。
相关文章:
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- jquery试图按名称获取按钮位置
- 如何在jQuery中获取元素的形式
- 如何在php文件中获取$.post-ajax传递的值
- 在Shopify中获取博客文章的图片
- 使用Javascript获取所选选项ID
- 在jQuery中获取表的行索引
- 使用jquery将mysql数据获取到新的表行中
- 在动态创建的元素上获取对特定选择器的引用
- 从城市名称获取惊喜
- Angular只从数组中获取所需的数据
- 无法将数据从firebase获取到我的html页面
- 从ajax请求中获取javascript对象
- 如何从画布上的某个移动事件中获取X和Y
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 如何在PHP中使用$_POST获取Select元素值
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- CORS从Firefox到Beego服务器的获取在预飞行后停止
- 向javascript关联数组添加新值“;在飞行中”;当试图通过不存在的键获取值时
- 获取飞行组件事件的委托目标