中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Golang怎么實現http重定向https

發布時間:2021-05-31 18:00:01 來源:億速云 閱讀:831 作者:Leah 欄目:編程語言

這期內容當中小編將會給大家帶來有關使用Golang怎么實現http重定向https,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

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

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

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

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監聽的端口。 如果監聽默認端口443,那么就可加可不加。 最后調用sdk中的Redirect函數封裝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怎么實現http重定向https了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

莱阳市| 荣成市| 崇义县| 宁海县| 广德县| 明溪县| 深水埗区| 天峻县| 奉新县| 内丘县| 巴东县| 吉林市| 通道| 永康市| 镇沅| 丹江口市| 台南县| 青岛市| 修文县| 长宁区| 江口县| 台东市| 新民市| 遂溪县| 思茅市| 子洲县| 密云县| SHOW| 广灵县| 曲阳县| 衡水市| 剑河县| 六盘水市| 封开县| 庄河市| 浦北县| 阳新县| 宁晋县| 台前县| 新巴尔虎右旗| 油尖旺区|