眾所周知, golang可用於http server
編程, 但是包括http header 都需要自己去定義。
如何實現http 1.1協議
rfc2616 的一個簡單的http server 呢?
http 1.1 協議
主要是實現了各種http header 和code 的請求和反應處理,比如 瀏覽器 請求一個 index.html 后,服務器返回index.html,瀏覽器還會請求 css
js
文件.
這兩天我在看 golang webAssembly ,偶然發現這不就是一個最簡單的FileServer 么,而 golang的http
包已經實現了
那么這個類似於nginx的簡單的web http server的代碼就是:
//reference https://github.com/golang/go/wiki/WebAssembly
package main
import (
"flag"
"log"
"net/http"
)
var (
listen = flag.String("listen", ":8080", "listen address")
dir = flag.String("dir", ".", "directory to serve")
)
func main() {
flag.Parse()
log.Printf("listening on %q...", *listen)
err := http.ListenAndServe(*listen, http.FileServer(http.Dir(*dir)))
log.Fatalln(err)
}
當然,nginx
支持很多功能,比如反向代理,支持外掛php腳本,cgi等,golang
完全可以實現一個替代nginx
的程序,或者叫做重寫nginx
.
不知道有沒有這樣的,全功能 golang web http 服務器