跳过正文

接口跨域问题

·277 字
目录

前端请求接口跨域
#

前端报错信息

Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight

原因及解决办法

  1. 浏览器因为判断请求接口有安全隐患,会先进行preflight请求,这是一个OPTIONS方式请求,所以接口要支持OPTIONS请求方式

  2. 响应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,
	}))
}