真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

使用Golang怎么實現(xiàn)http重定向https

這期內(nèi)容當中小編將會給大家?guī)碛嘘P(guān)使用Golang怎么實現(xiàn)http重定向https,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

我們提供的服務有:成都做網(wǎng)站、網(wǎng)站設(shè)計、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、和布克賽爾蒙古ssl等。為超過千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術(shù)的和布克賽爾蒙古網(wǎng)站制作公司

如何我們從問題出現(xiàn)的場景開始分析,基本可以得出一個結(jié)論: 在需要轉(zhuǎn)換的場景中,都是用戶習慣性的首先發(fā)出了http請求,然后服務器才需要返回一個https的重定向。 因此實現(xiàn)的第一步就是創(chuàng)建一個監(jiān)聽http請求的端口:

go http.ListenAndServe(":8000", http.HandlerFunc(redirect))

8000端口專門用來監(jiān)聽http請求,不能阻塞https主流程,因此單獨扔給一個協(xié)程來處理。 redirect用來實現(xiàn)重定向:

func redirect(w http.ResponseWriter, req *http.Request) { 
  _host := strings.Split(req.Host, ":")
  _host[1] = "8443"

  target := "https://" + strings.Join(_host, ":") + req.URL.Path
  if len(req.URL.RawQuery) > 0 {
    target += "?" + req.URL.RawQuery
  }

  http.Redirect(w, req, target, http.StatusTemporaryRedirect)
}

8443是https監(jiān)聽的端口。 如果監(jiān)聽默認端口443,那么就可加可不加。 最后調(diào)用sdk中的Redirect函數(shù)封裝Response。

處理完重定向之后,再處理https就變得很容易了:

router := mux.NewRouter() 
  router.Path("/").HandlerFunc(handleHttps)
  c := cors.New(cors.Options{
    AllowedOrigins:  []string{"*.devexp.cn"},
    AllowedMethods:  []string{"HEAD", "GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"},
    AllowedHeaders:  []string{"*"},
    AllowCredentials: true,
    Debug:      false,
    AllowOriginFunc: func(origin string) bool {
      return true
    },
  })

  handler := c.Handler(router)
  logrus.Fatal(http.ListenAndServeTLS(":8443", "cert.crt", "cert.key", handler))

完整代碼如下:

package main

import ( 
  "github.com/gorilla/mux"
  "github.com/rs/cors"
  "github.com/sirupsen/logrus"
  "net/http"
  "encoding/json"
  "log"
  "strings"
)

func main() { 
  go http.ListenAndServe(":8000", http.HandlerFunc(redirect))

  router := mux.NewRouter()
  router.Path("/").HandlerFunc(handleHttps)
  c := cors.New(cors.Options{
    AllowedOrigins:  []string{"*.devexp.cn"},
    AllowedMethods:  []string{"HEAD", "GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"},
    AllowedHeaders:  []string{"*"},
    AllowCredentials: true,
    Debug:      false,
    AllowOriginFunc: func(origin string) bool {
      return true
    },
  })

  handler := c.Handler(router)
  logrus.Fatal(http.ListenAndServeTLS(":8443", "cert.crt", "cert.key", handler))
}

func redirect(w http.ResponseWriter, req *http.Request) { 
  _host := strings.Split(req.Host, ":")
  _host[1] = "8443"

  // remove/add not default ports from req.Host
  target := "https://" + strings.Join(_host, ":") + req.URL.Path
  if len(req.URL.RawQuery) > 0 {
    target += "?" + req.URL.RawQuery
  }
  log.Printf("redirect to: %s", target)
  http.Redirect(w, req, target,
    // see @andreiavrammsd comment: often 307 > 301
    http.StatusTemporaryRedirect)
}

func handleHttps(w http.ResponseWriter, r *http.Request) { 
  json.NewEncoder(w).Encode(struct {
    Name string
    Age  int
    Https bool
  }{
    "lala",
    11,
    true,
  })
}

上述就是小編為大家分享的使用Golang怎么實現(xiàn)http重定向https了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


分享文章:使用Golang怎么實現(xiàn)http重定向https
標題鏈接:http://weahome.cn/article/gphjei.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部