Golang建立最簡單的HTTP和HTTPS服務
阿新 • • 發佈:2018-12-11
Golang可以用很短的程式碼實現HTTP和HTTPS服務
HTTP服務
HTTP是基於傳輸層TCP協議的。
package main
import (
"net/http"
"fmt"
"log"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request){
fmt.Fprint(w, "Hello world")
})
log.Fatal(http.ListenAndServe(":5001", nil))
}
HTTPS服務
HTTPS服務不同於HTTP服務,HTTPS是HTTP over SSL或HTTP over TLS。SSL
要啟用HTTPS首先需要建立私鑰和證書。
有兩種方式生成私鑰和證書:
- OpenSSL方式,生成私鑰key.pem和證書cert.pem,3650代表有效期為10年
openssl genrsa -out key.pem 2048
openssl req -new -x509 -key key.pem -out cert.pem -days 3650
- Golang標準庫crypto/tls裡有generate_cert.go,可以生成私鑰key.pem和證書cert.pem,host引數是必須的,需要注意的是預設有效期是1年
go run $GOROOT/src/crypto/tls/generate_cert.go --host localhost
程式碼
package main
import (
"log"
"net/http"
)
func handler(w http.ResponseWriter, req *http.Request) {
w.Header().Set("Content-Type", "text/plain")
w.Write([]byte("This is an example server.\n"))
}
func main() {
http.HandleFunc("/", handler)
log.Printf("About to listen on 10443. Go to https://127.0.0.1:10443/")
// One can use generate_cert.go in crypto/tls to generate cert.pem and key.pem.
// ListenAndServeTLS always returns a non-nil error.
err := http.ListenAndServeTLS(":10443", "cert.pem", "key.pem", nil)
log.Fatal(err)
}
(END)