socket实现web应用的本质

2024-01-02 18:48:03

Django基础

Django是一个高级的Python Web框架,用于快速开发安全且可维护的网站。它遵循MVC设计模式,但通常使用MTV(Model-Template-View)架构来描述其组件。

CS模式与BS模式
  • CS模式(Client-Server):客户端和服务器直接通信,客户端通常需要安装特定的软件。
  • BS模式(Browser-Server):通过Web浏览器与服务器通信,不需要在客户端安装额外软件,更加轻便和普遍。
WEB相关
  • HTTP协议:Web通信的基础,定义了客户端和服务器之间如何交换信息。
  • 浏览器:作为客户端,使用HTTP协议向服务器发送请求。
  • 服务器:响应来自浏览器的请求,并发送回相应的数据。
请求响应模型
  1. 基于请求响应:Web通信建立在请求和响应的基础上,浏览器发出请求,服务器给出响应。
  2. 请求协议格式:通常包括请求行(方法、URL、协议版本)、请求头(附加信息)和请求体(POST数据等)。
  3. 响应协议格式
    • 响应首行:包括协议/版本号、状态码和状态消息(如“HTTP/1.1 200 OK”)。
    • 响应头:包含关于响应的附加信息,如Content-Type指明响应内容的类型(如text/html表示HTML文档)。
    • 响应体:实际返回给浏览器的数据内容,如HTML代码、JSON对象等。
socket实现web应用的本质
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="icon" href="https://www.jd.com/favicon.ico">
</head>
<body>
<h1>Hello, world!</h1>
<img src='data:image/jpeg;base64,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'>
</body>
</html>
import socket
def handle_request(client):
    request_data = client.recv(1024)
    print("request_data: ",request_data)
    # client.send("HTTP/1.1 200 OK\r\nstatus:200\r\nContent-Type:text/html\r\n\r\n<h1>Hello, world!</h1><img src=''>".encode("utf8"))

    with open("jd.html","rb") as f:
        data=f.read()

    client.send(b"HTTP/1.1 200 OK\r\nstatus:200\r\nContent-Type:text/html\r\n\r\n"+data)
def main():
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.bind(('localhost',8812))
    sock.listen(5)
    while True:
        print("the server is waiting for client-connection....")
        connection, address = sock.accept()
        handle_request(connection)
        connection.close()

if __name__ == '__main__':
    main()

文章来源:https://blog.csdn.net/Python_1981/article/details/135344255
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。