社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

python中纯套接字上的http服务器

Alex Q. • 5 年前 • 576 次点击  

我试图用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)
  1. 如果我这样做,我如何通知客户机,例如,我有最多1024*1024个可用的内存字节,我不能处理比这更大的请求?
  2. 如果客户想发送更多的这个限制,他必须发送几个分开的请求,将包含1部分必要的数据?
  3. 例如,对于大POST请求,我必须解析每个ReV(1024),而我发现\r\n\r\n序列,将内容长度和ReCVE()内容长度由1024b部分检查到一些文件中,然后继续进行?
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/46332
 
576 次点击  
文章 [ 1 ]  |  最新文章 5 年前