zoukankan      html  css  js  c++  java
  • web服务本质

    django 框架引入:

    web框架本质

    
    web框架本质:
    
    软件开发架构: c / s ; b/ s
    
    --所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端
    
    import socket
    def server():
    
        sk = socket.socket()
        sk.bind(("127.0.0.1", 8080))
        sk.listen()	
    
        while True:
            conn, addr = sk.accept()
            data = conn.recv(8096)
            conn.send(b"OK")
            conn.close()
    if __name__ == '__main__':
        server()
    

    HTTP协议

    HTTP协议:
    HTTP协议主要统一规定了客户端和服务器之间的通信格式
    
    "b'GET / HTTP/1.1
    Host: 127.0.0.1:8080
    Connection:...."
    
    规定请求数据 / 响应数据格式!
    每个HTTP请求和响应都遵循相同的格式,一个HTTP包含Header和Body两部分,其中Body是可选的。 HTTP响应的Header中有一个 Content-Type表明响应的内容格式
    
    

    import socket
    
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.bind(('127.0.0.1', 8000))
    sock.listen()
    
    while True:
        conn, addr = sock.accept()
        data = conn.recv(8096)
        # 给回复的消息加上响应状态行
        conn.send(b"HTTP/1.1 200 OK
    
    ")
        conn.send(b"OK")
        conn.close()
    

    多功能web服务

    实现多功能web服务:
    Web服务根据用户请求的URL不同而返回不同的内容:
    	从请求相关数据里面拿到请求URL的路径,然后拿路径做一个判断 ---> 切割 + replace
    #s1:   
    import socket
    sk = socket.socket()
    sk.bind(("127.0.0.1", 8080))  # 绑定IP和端口
    sk.listen()  # 监听
    
    
    # 将返回不同的内容部分封装成函数
    def index(url):
        s = "这是{}页面!".format(url)
        return bytes(s, encoding="utf8")
    
    
    def home(url):
        s = "这是{}页面!".format(url)
        return bytes(s, encoding="utf8")
    
    
    while 1:
        # 等待连接
        conn, add = sk.accept()
        data = conn.recv(8096)  # 接收客户端发来的消息
        # 从data中取到路径
        data = str(data, encoding="utf8")  # 把收到的字节类型的数据转换成字符串
        # 按
    分割
        data1 = data.split("
    ")[0]
        url = data1.split()[1]  # url是我们从浏览器发过来的消息中分离出的访问路径
        conn.send(b'HTTP/1.1 200 OK
    
    ')  # 因为要遵循HTTP协议,所以回复的消息也要加状态行
        # 根据不同的路径返回不同内容,response是具体的响应体
        if url == "/index/":
            response = index(url)
        elif url == "/home/":
            response = home(url)
        else:
            response = b"404 not found!"
    
        conn.send(response)
        conn.close()
        
    

    封装,分发处理

    #s2:
    # 将返回不同的内容部分封装成函数
    def index(url):
        s = "这是{}页面!".format(url)
        return bytes(s, encoding="utf8")
    
    
    def home(url):
        s = "这是{}页面!".format(url)
        return bytes(s, encoding="utf8")
    
    
    # 定义一个url和实际要执行的函数的对应关系
    list1 = [
        ("/index/", index),
        ("/home/", home),
    ]
    
    while 1:
        # 等待连接
        conn, add = sk.accept()
        data = conn.recv(8096)  # 接收客户端发来的消息
        # 从data中取到路径
        data = str(data, encoding="utf8")  # 把收到的字节类型的数据转换成字符串
        # 按
    分割
        data1 = data.split("
    ")[0]
        url = data1.split()[1]  # url是我们从浏览器发过来的消息中分离出的访问路径
        conn.send(b'HTTP/1.1 200 OK
    
    ')  # 因为要遵循HTTP协议,所以回复的消息也要加状态行
        # 根据不同的路径返回不同内容
        func = None  # 定义一个保存将要执行的函数名的变量
        for i in list1:
            if i[0] == url:
                func = i[1]
                break
        if func:
            response = func(url)
        else:
            response = b"404 not found!"
    
        # 返回具体的响应消息
        conn.send(response)
        conn.close()
    
  • 相关阅读:
    VTK初学一,b_PolyVertex多个图形点的绘制
    VTK初学一,a_Vertex图形点的绘制
    Python基础学习之集合
    Apache
    NTP时间同步服务和DNS服务
    NFS服务及DHCPD服务
    samba服务及vsftpd服务
    Linux rpm和yum软件管理
    Linux网络技术管理及进程管理
    Linux RAID磁盘阵列
  • 原文地址:https://www.cnblogs.com/shaozheng/p/11907562.html
Copyright © 2011-2022 走看看