中间件解决跨域问题

中间件的意思是,我们运行博客后,用户访问一个链接,程序会最终执行这个链接对应的控制器。在执行控制器里面的代码之前运行的其他代码,我们就叫做中间件。

在 CORS-跨域资源共享 中,用 OPTIONS 方法发起一个预检请求,以检测实际请求是否可以被服务器所接受。

出于安全原因,浏览器限制从脚本内发起的跨源HTTP请求。当一个资源从与该资源本身所在的服务器不同的域或端口请求一个资源时,资源会发起一个跨域 HTTP 请求。

添加一个中间件cors跨域处理options请求(同时允许把Cookie包含在请求中发到服务器):

func Cors(ctx iris.Context) {
	ctx.Header("Access-Control-Allow-Credentials", "true") //支持cookie跨域
	ctx.Header("Access-Control-Allow-Origin", "*")//允许所有域名的访问
	//拦截OPTIONS请求
	if ctx.Request().Method == "OPTIONS" {
		//支持GET,POST,PUT,DELETE,PATCH,OPTIONS这几种请求方法。
		ctx.Header("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,PATCH,OPTIONS")
		//支持Content-Type, Api, Accept, Authorization, Version, Token这些字段
		ctx.Header("Access-Control-Allow-Headers", "Content-Type, Api, Accept, Authorization, Version, Token")
		//最后返回200状态,表示这个请求执行成功。
		ctx.StatusCode(200)
		return
	}
	ctx.Next()
}

中间件使用方法

app := iris.New()
app.Use(Cors)