我对 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 关注
- 119 浏览
添加回答
举报
0/150
提交
取消