web框架的原理
- B/S架构: 底层也是一个socket模块收发信息
- 本质: 互联网上两台机器之间通信(IP,端口,协议)
- 所以在用户在浏览器上输入网址时,就给服务端发送数据,不能任意发,必须有一个统一的规则,以后浏览器发送请求也好,服务器回复响应信息也罢,都要按照这个规则来,这个规则就是HTTP协议
-
超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础. HTTP的发展是由蒂姆·伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。HTTP的标准制定由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)进行协调,最终发布了一系列的RFC,其中最著名的是1999年6月公布的 RFC 2616,定义了HTTP协议中现今广泛使用的一个版本——HTTP 1.1 HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。我们称这个客户端为用户代理程序(user agent)。应答的服务器上存储着一些资源,比如HTML文件和图像。我们称这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或者隧道(tunnel)。 尽管TCP/IP协议是互联网上最流行的应用,HTTP协议中,并没有规定必须使用它或它支持的层。事实上,HTTP可以在任何互联网协议上,或其他网络上实现。HTTP假定其下层协议提供可靠的传输。因此,任何能够提供这种保证的协议都可以被其使用。因此也就是其在TCP/IP协议族使用TCP作为其传输层。 通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。
- HTTP协议收发消息的格式要求
- 一个HTTP包含Header和Body两部分,其中body是可选的,http响应的Header中的有一个Content-Type表民响应的内容格式,如text/html表示HTML网页.
- HTTP GET 请求格式:
-
HTTP 响应的格式:
web框架初现
'''框架第一版:函数版''' import socket sk = socket.socket() sk.bind(('127.0.0.1',8080)) sk.listen() def login(url): return bytes('这是登录页面',encoding='utf8') def home(url): return bytes('这是主页面',encoding='utf8') URL_DIC = { '/login/':login, '/home/':home } while 1: conn,addr = sk.accept() data = conn.recv(9000) ''' 接收到一个bytes类型的符合http协议的一串字节 都遵循了http协议规定的客户端和服务器之间的通信格式, ''' ''' GET / HTTP/1.1 Host: 192.168.12.23:8000这是根目录 如果在网址中输入192.168.12.23:8000/index/后都会发给服务端,可以根据这个来满足用户需求 ''' d1 = str(data,encoding='utf8').split(' ')[0] url_f = d1.split(' ')[1] #经过接收到的数据处理后得到用户输入的命令 ''' http响应的格式: 协议版本 空格 状态码 空格 状态描述 回车符 换行符 中间是响应头部:一些键值对,里面包含一些东西 回车符 换行符 响应正文(你想返回的html内容) ''' conn.send(b'HTTP/1.1 200 OK ') if url_f in URL_DIC.keys(): msg = URL_DIC[url_f](url_f) #根据不同命令调用不同函数 else: msg = b'404 not found' conn.send(msg) conn.close()
- 牵扯到的知识点:
- 请求和响应python
- 请求:浏览器给服务端发消息的过程叫请求(request)
- 响应:服务端给浏览器回复消息的过程叫响应(response)
- 请求和响应都必须遵循一个固定的格式
- 协议:
- HTTP:默认端口是80
- HTTPS:默认端口是443
- 数据库默认端口是3306
- Python中web框架的分类:
-
a:收发socket消息,按照HTTP协议解析消息的 b:字符串替换,用来实现动态网页的 c:业务逻辑
所以web框架根据abc可以分成三类 - 1.自己实现a、b、c的有:tornado;
- 2.自己实现b和c的,使用第三方的a:django
- 3.自己实现c的,使用第三方的a和b:轻量级的框架flask
-
- 请求和响应python