我對 Web 服務器對 http keep-alive 標頭的操作感興趣。所以我在http server的基礎上搭建了一個簡單的http server。服務器除了用一個簡單的 html http 正文響應客戶端之外什么都不做。服務器的代碼在這里:package mainimport ( "fmt" "net" "os")func main() { l, err := net.Listen("tcp", "localhost:9765") if err != nil { fmt.Println("Error listening:", err.Error()) os.Exit(1) } defer l.Close() for { conn, err := l.Accept() fmt.Println("New connection...") if err != nil { fmt.Println("Error accepting: ", err.Error()) os.Exit(1) } go handleRequest(conn) }}// handlerfunc handleRequest(conn net.Conn) { for { buf := make([]byte, 512) _, err := conn.Read(buf) if err != nil { fmt.Println("Error reading:", err.Error()) conn.Close() break } fmt.Printf("%s", buf) str := `HTTP/1.1 200 OKConnection: keep-aliveContent-Length: 8Content-Type: application/javascriptalert(1)` conn.Write([]byte(str)) }}我向本地 nginx 靜態服務器添加了一個演示 html:<head> <meta charset="UTF-8"> <script type=text/javascript src="test.js"></script> <script type=text/javascript src="http://localhost:9765/3"></script> <script type=text/javascript src="http://localhost:9765/2"></script> <script type=text/javascript src="http://localhost:9765/1"></script> <script type=text/javascript src="http://localhost:9765/17"></script> <script type=text/javascript src="http://localhost:9765/16"></script> <script type=text/javascript src="http://localhost:9765/15"></script> <script type=text/javascript src="http://localhost:9765/14"></script> <script type=text/javascript src="http://localhost:9765/13"></script></head><body><h1>loader測試頁面</h1><span>hello world</span></body></html>當用chrome訪問文件時,我發現所有響應都是正常的,但是每次http請求后tcp連接都會關閉。TCP 在發送 http 響應后收到 EOF 錯誤。
- 1 回答
- 0 關注
- 154 瀏覽
添加回答
舉報
0/150
提交
取消