Preface
昨天整 nginx 代理 wss 的事情。
没有前端,自己把前端的发布版本搞来部署到 nginx 上;
没有api服务,所以自己用 golang 写了个代理服务器,将前端的 api hack到我的代理服务器来,
然后这里可以灵活的代理某个服务器,顺便用 nginx 代理一下此端口,实现 https 支持。
话说 js 真心脆弱…..
Content
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| package apiserver
import ( "fmt" "github.com/julienschmidt/httprouter" "github.com/rs/cors" "io" "io/ioutil" "net/http" )
const target_api string = "http://192.168.1.91:8088"
func Start(port int32) { router := httprouter.New() router.GET("/GameHandle",apiHandler) router.GET("/TokenHandle",apiHandler) handler := cors.Default().Handler(router) http.ListenAndServe(fmt.Sprintf(":%d",port),handler) }
func apiHandler(w http.ResponseWriter,r *http.Request, ps httprouter.Params) { realUrl := target_api+r.RequestURI fmt.Println(realUrl) resp,err := http.Get(realUrl) if err != nil { fmt.Fprint(w,err) } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Fprint(w,err) } w.Header().Set("Content-Type","text/plain; charset=utf-8") w.Header().Set("X-Powered-By","Golang/httprouter") w.Header().Set("Content-Length",fmt.Sprintf("%d",len(body))) io.WriteString(w,string(body)) fmt.Print(string(body)) }
|
cors问题
以上使用了 rs/cors 解决了跨域访问的问题,实际上你可以可以通过 ResponseWriter().Header() 去加入支持跨域访问的几个头,例如 Access-Alow-Domain 等等。
Reference