分享
Golang创建最简单的HTTP和HTTPS服务
肥羊 · · 11052 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
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是"Secure Sockets Layer"的缩写,中文叫做"安全套接层"。它是在上世纪90年代中期,由NetScape公司设计的。为啥要发明 SSL 这个协议捏?因为原先互联网上使用的 HTTP 协议是明文的,存在很多缺点——比如传输内容会被偷窥(嗅探)和篡改。发明 SSL 协议,就是为了解决这些问题。
到了1999年,SSL 因为应用广泛,已经成为互联网上的事实标准。IETF 就在那年把 SSL 标准化。标准化之后的名称改为TLS是"Transport Layer Security"的缩写,中文叫做"传输层安全协议"。
很多相关的文章都把这两者并列称呼(SSL/TLS),因为这两者可以视作同一个东西的不同阶段。参考
要启用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
将生成的key.pem、cert.pem和以下代码放在同一目录下
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)
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信11052 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
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是"Secure Sockets Layer"的缩写,中文叫做"安全套接层"。它是在上世纪90年代中期,由NetScape公司设计的。为啥要发明 SSL 这个协议捏?因为原先互联网上使用的 HTTP 协议是明文的,存在很多缺点——比如传输内容会被偷窥(嗅探)和篡改。发明 SSL 协议,就是为了解决这些问题。
到了1999年,SSL 因为应用广泛,已经成为互联网上的事实标准。IETF 就在那年把 SSL 标准化。标准化之后的名称改为TLS是"Transport Layer Security"的缩写,中文叫做"传输层安全协议"。
很多相关的文章都把这两者并列称呼(SSL/TLS),因为这两者可以视作同一个东西的不同阶段。参考
要启用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
将生成的key.pem、cert.pem和以下代码放在同一目录下
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)