http编程

Web服务器的工作原理可以简单归纳为

  • 客户端通过TCP/IP协议建立到服务器的TCP连接
  • 客户端向服务器发送HTTP协议请求包,请求服务器的资源文档
  • 服务器向客户机发送HTTP协议应答包,如果有动态语言,服务器调用动态语言的解释引擎处理,然后再返回给客户端
  • 客户端与服务器断开。由客户端解释HTML文档,在客户端渲染。

Http协议

HTTP协议承载在TCP协议之上

服务端

```go package main

import ( “fmt” “net/http” )

func main() { http.HandleFunc(“/go”, func(writer http.ResponseWriter, request *http.Request) { fmt.Println(request.RemoteAddr, “连接成功”) fmt.Println(request.Method, “请求方式”) fmt.Println(request.URL.Path, “请求地址”) fmt.Println(request.Header, “请求头”) fmt.Println(request.Body, “请求内容”) writer.Write([]byte(“helloWorld”)) }) http.ListenAndServe(“127.0.0.1:8080”, nil) }

  1. > 客户端
  2. > ```go
  3. package main
  4. import (
  5. "fmt"
  6. "io"
  7. "net/http"
  8. )
  9. func main() {
  10. resp, _ := http.Get("http://127.0.0.1:8080/go")
  11. defer resp.Body.Close()
  12. // 200 OK
  13. fmt.Println(resp.Status)
  14. fmt.Println(resp.Header)
  15. buf := make([]byte, 1024)
  16. for {
  17. // 接收服务端信息
  18. n, err := resp.Body.Read(buf)
  19. if err != nil && err != io.EOF {
  20. fmt.Println(err)
  21. return
  22. } else {
  23. fmt.Println("读取完毕")
  24. res := string(buf[:n])
  25. fmt.Println(res)
  26. break
  27. }
  28. }
  29. }