我试图用python编写非常简单的http服务器。工作版本如下:
def run(self, host='localhost',port=8000):
with socket.socket(socket.AF_INET,socket.SOCK_STREAM) as s:
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((host,port))
s.listen(1)
while True:
connection, adress = s.accept()
with connection:
data = b''
while True:
recived = connection.recv(1024)
data += recived
if len(recived) < 1024:
break
if data != b'':
handle_request(data,connection)
这很管用,但我有点误会。
据我所知,socket“s”接受来自客户端的连接->并返回新的socket对象“connection”,从中我可以读取客户端发送给我的内容并发送响应。我从连接读取数据,直到客户端发送空行B''。在此之后,TCP部分结束,我将接收的字节传递给处理程序,处理程序将接收的数据解析为HTTP。
qestions:此时,我读取了客户端发送给我的所有数据,但是如果我想限制http请求的最大大小,我应该这样做:
..................................
with connection:
data = b''
request_size_limit=1024*100 # some desired http request max size
while True:
recived = connection.recv(1024)
data += recived
if len(recived) < 1024 or len(data) > request_size_limit:
break
if data != b'':
handle_request(data,connection)
-
如果我这样做,我如何通知客户机,例如,我有最多1024*1024个可用的内存字节,我不能处理比这更大的请求?
-
如果客户想发送更多的这个限制,他必须发送几个分开的请求,将包含1部分必要的数据?
-
例如,对于大POST请求,我必须解析每个ReV(1024),而我发现\r\n\r\n序列,将内容长度和ReCVE()内容长度由1024b部分检查到一些文件中,然后继续进行?