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()
为啥浏览器响应内容不完整?
如图所示:
正常应该显示如下:
回答:
显式的去处理\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文件的内容
以上是 Python读取html文件使用socket响应给浏览器http请求,无法正常显示? 的全部内容, 来源链接: utcz.com/p/938707.html