猿问

如果内容长度错误,Chrome 会关闭 tcp 连接吗?

我对 Web 服务器对 http keep-alive 标头的操作感兴趣。所以我在http server的基础上搭建了一个简单的http server。服务器除了用一个简单的 html http 正文响应客户端之外什么都不做。


服务器的代码在这里:


package main


import (

    "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)

    }

}


// handler

func 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 OK

Connection: keep-alive

Content-Length: 8

Content-Type: application/javascript


alert(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 错误。


阿波罗的战车
浏览 120回答 1
1回答

ibeautiful

如果您在标头中发送错误的内容长度,浏览器将挂起(等待永远不会出现的内容)或关闭连接(当它在内容后看到无效垃圾时)。它还能做什么?
随时随地看视频慕课网APP

相关分类

Go
我要回答