Python读取html文件使用socket响应给浏览器http请求,无法正常显示?

最近在学习python,课后练习要求同学使用读取文件+socket 响应客户端浏览器请求。
我的静态页面index.html如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .container{
            height: 100vh;
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-content: center;
        }
        .container>div{
            flex: 1;
            text-align: center;
            display: flex;
            align-items: center;
            justify-content: center;

        }
        .container>div:nth-child(odd){
            background: antiquewhite;
        }
        .container>div:nth-child(even){
            background: coral;
        }
    </style>
</head>
<body>
    <div class="container">
        <div>Python http 传输</div>
        <div>http 网页渲染</div>
    </div>
</body>
</html>

python读取文件并响应代码文件 http_html_response.py文件如下

from socket import *

# 创建tcp套接字
s = socket()
s.bind(('0.0.0.0', 8000))
s.listen(3)

while True:
    c, addr = s.accept()
    print('Connect from', addr)
    data = c.recv(4096)
    print(data)

    # http响应
    # data = """HTTP/1.1 200 OK
    # Content-Type:text/html
    #
    # <h1>Hello</h1>
    #
    #
    # """

    # 读取html文件,作为响应发送给客户端
    with open('index.html', mode='rb') as html_file:

        head_row=b"""HTTP/1.1 200 OK
        Content-Type:text/html  
        
          
        """
        c.send(head_row)
        while True:
            data = html_file.read(1024)
            if not data:
                break

            c.send(data)
    c.close()
s.close()

为啥浏览器响应内容不完整?
如图所示:

正常应该显示如下:

阅读 3.1k
2 个回答

显式的去处理\r\n

head_row=b"""HTTP/1.1 200 OK\r\nContent-Type:text/html\r\n\r\n"""

http缺content-length头, 另外看另一个回答, 使用显示的 \r\n, 否则里面的空白你根本看不清楚. 响应格式应该是 HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nContent-Length: 数字\r\n\r\nHTML文件的内容

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题