💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## 一、web工作流程 * Web服务器的工作原理可以简单地归纳为 客户机通过TCP/IP协议建立到服务器的TCP连接 客户端向服务器发送HTTP协议请求包,请求服务器里的资源文档 服务器向客户机发送HTTP协议应答包,如果请求的资源包含有动态语言的内容,那么服务器会调用动态语言的解释引擎负责处理“动态内容”,并将处理得到的数据返回给客户端 客户机与服务器断开。由客户端解释HTML文档,在客户端屏幕上渲染图形结果 ## 二、HTTP协议 * 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议,它详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议 * HTTP协议通常承载于TCP协议之上 ## 三、HTTP服务端 ~~~ package main import ( "net/http" "fmt" ) func main() { //第一个参数是匹配路径 //第二个参数是响应事件 http.HandleFunc("/go", myHandler) //监听 http.ListenAndServe("127.0.0.1:8000", nil) } //ResponseWriter, *Request //handle函数 func myHandler(w http.ResponseWriter, r *http.Request) { fmt.Println(r.RemoteAddr, "连接成功") fmt.Println("method=", r.Method) //url /go fmt.Println("url=", r.URL.Path) fmt.Println("header=", r.Header) fmt.Println("body =", r.Body) w.Write([]byte("够浪")) } ~~~ ## 四、HTTP服务端 ~~~ package main import ( "net/http" "fmt" "io" ) func main() { resp, err := http.Get("http://127.0.0.1:8000/go") if err != nil { fmt.Println(err) return } fmt.Println(resp.Status) defer resp.Body.Close() fmt.Println("header=", resp.Header) //缓冲 buf := make([]byte, 1024) var tmp string for { //读取服务端数据 n, err := resp.Body.Read(buf) if err != nil && err != io.EOF { fmt.Println(err) return } if n == 0 { fmt.Println("读取内容完毕") break } //累加读取的内容 tmp += string(buf[:n]) } fmt.Println("buf=", string(tmp)) } ~~~ 测试服务器和测试端的时候,先启动服务端