这个Web服务器对于简单的Web服务任务运行良好,但是当向移动的Chrome设备发送大文件时,它会给我一个“断管”错误。与移动的Chrome唯一不同的是,它不会在标头中发送“Keep-alive”。
我什么都没做。我希望能像其他浏览器一样成功连接。
我的准则
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind(('0.0.0.0', 80))
s.listen()
while True:
conn, addr = s.accept()
with conn:
req = conn.recv(1024).decode("utf-8")
print(req)
req = req.split(" ")
if(req[0] == "GET"):
try:
fname = req[1]
if(fname == "/"):
fname = "index.html"
else:
fname = os.path.relpath(os.path.abspath("." + fname))
with open(fname, "rb") as f:
mtype = mimetypes.guess_type(fname)[0]
conn.sendall(f"HTTP/1.1 200 OK\nContent-Type: {mtype}\n\n".encode('utf-8') + f.read())
except:
conn.sendall(b"HTTP/1.1 404 Not Found")
else:
print("LOL No!")
conn.sendall(b"HTTP/1.1 400 Bad Request\n\n")
1条答案
按热度按时间g52tjvyc1#
我写的这个HTTP服务器基本上可以工作,但是在移动的Chrome上有一个问题
如果只是猜测HTTP协议应该是什么样子,而不是实际遵循标准,通常会发生这种情况。不同的客户端以不同的方式容忍发送格式错误的协议数据。
从你的代码来看:
\n
作为行分隔符,而不是\r\n
不要因为HTTP是基于文本的就认为它很简单。而是遵循实际的和相当复杂的标准。