一、Web工作流程
Web服务器的工作原理可以简单归纳为:
1. 客户端通过TCP/IP协议与服务器建立连接
2. 客户端向服务器发送HTTP协议请求包,请求服务器里的文档资源
3. 服务器向客户端发送HTTP协议应答包,如果请求的资源中包含动态语言的内容,那么服务器会调用动态语言的解释引擎负责处理“动态内容”,并将处理得到的数据返回给客户端
4. 客户端与服务器断开TCP连接。由客户端解释HTML文档,在客户端屏幕上渲染图形效果
二、HTTP协议
超文本传输协议(HTTP)是互联网上应用最为广泛的一种网络协议,它详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议
HTTP协议通常承载于TCP协议之上
HTTP服务器端httpServer\maingo:
package main
import (
"fmt"
"net/http"
)
//handler函数
func myHandler(w http.ResponseWriter, r *http.Request) {
fmt.Println(r.RemoteAddr, "连接成功")
//请求方式: GET POST DELETE PUT UPDATE
fmt.Println("method:", r.Method)
// /go
fmt.Println("url:", r.URL.Path)
fmt.Println("header:", r.Header)
fmt.Println("body:", r.Body)
//响应回复(显示在浏览器的内容)
w.Write([]byte("恭喜!你get到了"))
}
func main() {
//http://127.0.0.1:8000/go
//单独写回调函数
fmt.Println("Listening……")
http.HandleFunc("/go_zls", myHandler)
//addr:监听的地址
//handler:回调函数
http.ListenAndServe("127.0.0.1:8000", nil)
}
HTTP客户端httpClient\main.go:
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
resp, _ := http.Get("http://127.0.0.1:8000/go_zls")
defer resp.Body.Close()
//200 OK
fmt.Println(resp.Status)
fmt.Println(resp.Header)
buf := make([]byte, 1024)
for {
//接收服务端信息
n, err := resp.Body.Read(buf)
if err != nil && err != io.EOF {
fmt.Println("http error, err:", err)
return
} else {
fmt.Println("读取完毕")
res := string(buf[:n])
fmt.Println(res)
break
}
}
}
客户端输出结果:
也可用在浏览器地址栏输入http://localhost:8000/go_zls,显示结果如下:
服务器端输出如下: