Web框架本质
我们可以这样过理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端。这样我们就可以自己实现Web框架了。
半成品自定义web框架
import socket ks = socket.socket() ks.bind(('127.0.0.1',8080)) ks.listen() while True: conn,addr = ks.accept() data = conn.recv(1024) conn.send(b'OK') conn.close()
可以说Web服务本质上都是在这十几行代码的基础上扩展出来的。
用户给浏览器输入网址,会给服务端发送数据,那浏览器会发送什么数据?怎么发?这个谁来定?你的这个网站是这个规定,他那个网站按照他的那个规定,这样互联网就没法玩了?
所以,必须有一个统一规定,让大家发送消息、接收消息的时候有个格式依据,不能随便写。
这个规则就是HTTP协议,以后浏览器发送请求信息也好,服务器回复响应也罢,都要按照这个规则来。
HTTP协议主要规定了客户端和服务器之间的通信格式,那HTTP协议是怎么规定消息格式的呢?
让我们首先打印下我们在服务端接收到的消息是什么。
import socket ks = socket.socket() ks.bind(('127.0.0.1',8080)) ks.listen() while True: conn,addr = ks.accept() data = conn.recv(1024) #将浏览器发来的消息打印出来 print(data) #jiang conn.send(b'OK') conn.close()
输出:
b'GET / HTTP/1.1 Host: 127.0.0.1:8080 Connection: keep- alive Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp, image/apng,*/*;q=0.8 DNT: 1 Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 Cookie: csrftoken=RKBXh1d3M97iz03Rpbojx1bR6mhHudhyX5PszUxxG3bOEwh1lxFpGOgWN9WN93ZH3zv '