1、http編程
1.1.1 web工作流程
Web服務(wù)器的工作原理可以簡單地歸納為
客戶機(jī)通過TCP/IP協(xié)議建立到服務(wù)器的TCP連接
客戶端向服務(wù)器發(fā)送HTTP協(xié)議請求包,請求服務(wù)器里的資源文檔
服務(wù)器向客戶機(jī)發(fā)送HTTP協(xié)議應(yīng)答包,如果請求的資源包含有動態(tài)語言的內(nèi)容,那么服務(wù)器會調(diào)用動態(tài)語言的解釋引擎負(fù)責(zé)處理“動態(tài)內(nèi)容”,并將處理得到的數(shù)據(jù)返回給客戶端
客戶機(jī)與服務(wù)器斷開。由客戶端解釋HTML文檔,在客戶端屏幕上渲染圖形結(jié)果
1.1.2. HTTP協(xié)議
超文本傳輸協(xié)議(HTTP,HyperText Transfer Protocol)是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議,它詳細(xì)規(guī)定了瀏覽器和萬維網(wǎng)服務(wù)器之間互相通信的規(guī)則,通過因特網(wǎng)傳送萬維網(wǎng)文檔的數(shù)據(jù)傳送協(xié)議文章來源:http://www.zghlxwxcb.cn/news/detail-702416.html
HTTP協(xié)議通常承載于TCP協(xié)議之上文章來源地址http://www.zghlxwxcb.cn/news/detail-702416.html
1.1.3.HTTP服務(wù)端
package main
import (
"fmt"
"net/http"
)
func main() {
//http://127.0.0.1:8000/go
// 單獨(dú)寫回調(diào)函數(shù)
http.HandleFunc("/go", myHandler)
//http.HandleFunc("/ungo",myHandler2 )
// addr:監(jiān)聽的地址
// handler:回調(diào)函數(shù)
http.ListenAndServe("127.0.0.1:8000", nil)
}
// handler函數(shù)
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)
// 回復(fù)
w.Write([]byte("www.5lmh.com"))
}
1.1.4 HTTP服務(wù)端
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
//resp, _ := http.Get("http://www.baidu.com")
//fmt.Println(resp)
resp, _ := http.Get("http://127.0.0.1:8000/go")
defer resp.Body.Close()
// 200 OK
fmt.Println(resp.Status)
fmt.Println(resp.Header)
buf := make([]byte, 1024)
for {
// 接收服務(wù)端信息
n, err := resp.Body.Read(buf)
if err != nil && err != io.EOF {
fmt.Println(err)
return
} else {
fmt.Println("讀取完畢")
res := string(buf[:n])
fmt.Println(res)
break
}
}
}
到了這里,關(guān)于Go語言網(wǎng)絡(luò)編程(socket編程)http編程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!