介绍
这篇文章将为大家详细讲解有关去原生http web服务跨域restful api的写法示例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
什么是去
去是golang的简称,golang是谷歌开发的一种静态强类型,编译型,并发型,并具有垃圾回收功能的编程语言,其语法与C语言相近,但并不包括如枚举,异常处理,继承,泛型、断言,虚函数等功能。
错误写法
func 主要(),{ ,,,openHttpListen () } func openHttpListen (), { ,,,http.HandleFunc (“/?, receiveClientRequest) ,,,fmt.Println (“go  server start 运行…“) ,,,err :=, http.ListenAndServe (“: 9090,,, nil) ,,,if err !=, nil { ,,,,,,,log.Fatal (“ListenAndServe:,,,,呃) ,,,} } func receiveClientRequest (w http.ResponseWriter, r * http.Request), { ,,,w.Header()这里(“Access-Control-Allow-Origin",,“*“),,,,,,,,,,,,,//允许访问所有域 ,,,w.Header阀门()(“Access-Control-Allow-Headers",,“Content-Type"),//头的类型 ,,,w.Header()这里(“content-type",,“应用程序/json"),,,,,,,,,,,,,//返回数据格式是json ,,,r.ParseForm () ,,,fmt.Println(“收到客户端请求:,,,,r.Form)
这样还是会报错:
说没有得到响应跨域的头,chrome的网络中确实没有响应Access-Control-Allow-Origin
正确写法:
func LDNS (w http.ResponseWriter, req * http.Request), { ,,,if origin :=, req.Header.Get (“Origin");, origin !=,““, { ,,,,,,,w.Header()这里(“Access-Control-Allow-Origin",,原点) ,,,,,,,w.Header()这里(“Access-Control-Allow-Methods",,,,,,,,,,, DELETE") ,,,,,,,w.Header()这里(“Access-Control-Allow-Headers", ,,,,,,,,,,,,,,内容类型,,内容长度,,接受编码,,,Authorization" X-CSRF-Token) ,,,} ,,,if req.Method ==,“OPTIONS", { ,,,,,,,回来 ,,,} ,,,//,响应http 代码 ,,,w.WriteHeader (200) ,,,query :=, strings.Split (req.Host,,“!”) ,,,,,err :=, ldns.RAMDBMgr.Get(查询[0]) ,,,fmt.Println (“Access-Control-Allow-Origin",,“*”) ,,,if err !=, nil { ,,,,,,,io.WriteString (w,“{“message":““}”) ,,,,,,,回来 ,,,} ,,,io.WriteString (w,价值) }
<>强补充:去http允许跨域强>
1。创建中间件
import ( ,“;github.com/gin-gonic/gin" ,“;net/http" )//,跨域中间件 func 歌珥(),gin.HandlerFunc { ,return func (c * gin.Context), { method 才能:=c.Request.Method origin 才能;:=,c.Request.Header.Get (“Origin") if 才能;origin  !=,““, { ,,c.Header (“Access-Control-Allow-Origin",,原点) ,,c.Header (“Access-Control-Allow-Methods",,,,,,,,,,,删除,UPDATE") ,才能c.Header (“Access-Control-Allow-Headers",,,,, X-Requested-With,,内容类型,,接受,,Authorization") ,,c.Header (“Access-Control-Expose-Headers",,“内容长度,,Access-Control-Allow-Origin,, Access-Control-Allow-Headers,, cache - control,,内容语言,,Content-Type") ,,c.Header (“Access-Control-Allow-Credentials",,“false") ,,c.Set (“content-type",,“应用程序/json") ,,} if 才能;method ==,“OPTIONS", { ,,c.AbortWithStatus (http.StatusNoContent) ,,} c.Next才能() ,} }
2。在路线中引用中间件
router :=, gin.Default ()//,要在路由组之前全局使用“跨域中间件”,,否则选项会返回404 null去原生http web服务跨域restful api的写法示例