2017-07-02 80 views
0

我可能對此毫無頭緒,但我的基本本地主機服務器沒有HTTP2由於某種奇怪的原因而啓用,我通常代替凱迪背後,但因爲我不想使用我的域對於這個側面項目,我在Go中創建了一個基本的服務器,並運行它,它工作正常,但標題顯示HTTP/1.1而不是2.0,出了什麼問題?在本地主機上默認啓用HTTP2

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

回答

2

是的,它在默認情況下啓用時使用SSL證書。

Doc Reference:與轉到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/ 
訪問它