前端请求接口跨域#
前端报错信息
Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight
原因及解决办法
浏览器因为判断请求接口有安全隐患,会先进行preflight请求,这是一个OPTIONS方式请求,所以接口要支持OPTIONS请求方式
响应Header缺少Access-Control-Allow-Headers Header头或Access-Control-Allow-Headers中没有Content-Type值,添加该Header头即可
Beego框架可以使用cors包+filter方式进行允许跨域配置
package routers
import (
"github.com/beego/beego/v2/server/web"
"github.com/beego/beego/v2/server/web/filter/cors"
)
func InitFilter() {
// cors跨域处理
web.InsertFilter("*", web.BeforeRouter, cors.Allow(&cors.Options{
// AllowAllOrigins: true,
AllowOrigins: []string{"http://dev.example.com", "https://prod.example.com"},
AllowMethods: []string{"*"},
AllowHeaders: []string{"Origin", "Accept", "Content-Type", "Authorization"},
ExposeHeaders: []string{"*"},
AllowCredentials: true,
}))
}