默认情况下,localhost上未启用HTTP2

时间:2017-07-02 00:05:03

标签: http go localhost webserver http2

我可能对此毫无头绪,但我的基本本地主机服务器由于某些奇怪的原因而没有启用HTTP2,我通常在Caddy之后代理,但因为我不想在这方面使用我的域名项目,我在Go中创建了一个基本服务器,并运行它,它工作正常,但标题显示HTTP / 1.1而不是2.0,这是错误的?

package main

import (
  "fmt"
  "net/http"
  "html/template"
  "os"
)

func IfError(err error, Quit bool) {
  if err != nil {
    fmt.Println(err.Error())
    if(Quit) {
      os.Exit(1);
    }
  }
}

func ServeHome(w http.ResponseWriter, r *http.Request) {
  t, err := template.ParseFiles("html/home")
  IfError(err, false)
  err = t.Execute(w, nil)
  IfError(err, false)
}

func RedirectRoot(fs http.Handler, home http.Handler) http.Handler {
  return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    if r.URL.Path == "/" {
      home.ServeHTTP(w, r)
    } else {
      fs.ServeHTTP(w, r)
    }
  })
}

func main()  {
  proto := ":8081"
  ServeFiles := http.FileServer(http.Dir("static/"))
  http.Handle("/", RedirectRoot(ServeFiles, http.HandlerFunc(ServeHome)))
  fmt.Printf("Listening on ... %s", proto)
  IfError(http.ListenAndServe(proto, nil), true)
}

非常基本的东西,但即使认为文档说它默认工作也没有用。另外,我的版本是1.8.3

1 个答案:

答案 0 :(得分:2)

是的,当您使用SSL证书时,默认情况下会启用它。

  

Doc Reference:从Go 1.6开始,http包具有透明性   使用HTTPS时支持HTTP / 2协议。

err := http.ListenAndServeTLS(":8081", "server.crt", "server.key", handler)
if err != nil && err != http.ErrServerClosed {
    log.Fatal("ListenAndServe: ", err)
}

然后,通过

访问它
https://localhost:8081/