去原生http web服务跨域restful api的写法示例

  介绍

这篇文章将为大家详细讲解有关去原生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的写法示例