Go语言服务端处理HTTP、HTTPS请求
发布时间:2020-12-16 09:36:16 所属栏目:大数据 来源:网络整理
导读:本节我们主要来介绍一下使用Go语言编写的 HTTP 服务端是如何处理 HTTP 和 HTTPS 请求的。 处理 HTTP 请求 使用 net/http 包提供的 http.ListenAndServe() 方法,可以对指定的地址进行监听,开启一个 HTTP,服务端该方法的原型如下: func ListenAndServe(addr
本节我们主要来介绍一下使用Go语言编写的 HTTP 服务端是如何处理 HTTP 和 HTTPS 请求的。处理 HTTP 请求使用 net/http 包提供的 http.ListenAndServe() 方法,可以对指定的地址进行监听,开启一个 HTTP,服务端该方法的原型如下:func ListenAndServe(addr string,handler Handler) error 该方法用于在指定的 TCP 网络地址 addr 进行监听,然后调用服务端处理程序来处理传入的连接请求。ListenAndServe 方法有两个参数,其中第一个参数 addr 即监听地址,第二个参数表示服务端处理程序,通常为空。第二个参数为空时,意味着服务端调用 http.DefaultServeMux 进行处理,而服务端编写的业务逻辑处理程序 http.Handle() 或 http.HandleFunc() 默认注入 http.DefaultServeMux 中,代码如下所示: http.Handle("/foo",fooHandler) http.HandleFunc("/bar",func(w http.ResponseWriter,r *http.Request) { fmt.Fprintf(w,"Hello,%q",html.EscapeString(r.URL.Path)) }) log.Fatal(http.ListenAndServe(":8080",nil))如果想更多地控制服务端的行为,可以自定义 http.Server,代码如下所示: s := &http.Server{ Addr: ":8080",Handler: myHandler,ReadTimeout: 10 * time.Second,WriteTimeout: 10 * time.Second,MaxHeaderBytes: 1 << 20,} log.Fatal(s.ListenAndServe())下面通过一个简单的服务端示例来演示一下Go语言是如何处理 HTTP 请求的,代码如下所示: package main import ( "io" "log" "net/http" ) func HelloServer(w http.ResponseWriter,req *http.Request) { io.WriteString(w,"C语言中文网n") } func main() { http.HandleFunc("/hello",HelloServer) err := http.ListenAndServe(":12345",nil) if err != nil { log.Fatal("ListenAndServe: ",err) } }成功运行上面的代码会占用 12345 端口,我们可以使用浏览器访问 http://localhost:12345/hello 来查看运行结果,如下所示:![]() 处理 HTTPS 请求net/http 包还提供 http.ListenAndServeTLS() 方法,用于处理 HTTPS 连接请求:func ListenAndServeTLS(addr string,certFile string,keyFile string,handler Handler) error ListenAndServeTLS 函数和 ListenAndServe 函数的行为基本一致,区别在于 ListenAndServeTLS?函数只处理 HTTPS 请求。此外,服务器上必须提供证书文件和对应的私钥文件,比如 certFile 对应 SSL 证书文件存放路径,keyFile 对应证书私钥文件路径。如果证书是由权威机构签发的,certFile 参数指定的路径必须是存放在服务器上的经由 CA 认证过的 SSL 证书。 开启 SSL 监听服务也很简单,如下列代码所示: http.Handle("/foo",html.EscapeString(r.URL.Path)) }) log.Fatal(http.ListenAndServeTLS(":10443","cert.pem","key.pem",nil))或者是: ss := &http.Server{ Addr: ":10443",} log.Fatal(ss.ListenAndServeTLS("cert.pem","key.pem"))下面通过示例来演示一下Go语言时如何处理 HTTPS 请求的,代码如下所示: package main import ( "log" "net/http" ) func handler(w http.ResponseWriter,req *http.Request) { w.Header().Set("Content-Type","text/plain") w.Write([]byte("C语言中文网n")) } func main() { http.HandleFunc("/",handler) log.Printf("监听 1234 端口成功,可以通过 https://127.0.0.1:1234/ 访问") err := http.ListenAndServeTLS(":1234",nil) if err != nil { log.Fatal(err) } }运行上面的程序需要用到 cert.pem 和 key.pem 这两个文件,可以使用 crypto/tls 包的 generate_cert.go 文件来生成 cert.pem 和 key.pem 这两个文件,运行结果如下: ![]() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |