我们先来认识一下网络编程:
网络编程:
OSI五层模型:
应用层
传输层
网络层
数据链路层
物理层
socket:套接字,位于应用层和传输层的一个虚拟层,是一个接口。
服务器(socket服务端)
1.启动
2.绑定IP和端口
3.监听
4.等待链接
6.收到连接
8.接收消息
9.返回消息
浏览器(socket客户端)
5. 发送连接
7. 发送消息
10.接收消息
这就是服务器和客户端通信的过程
HTTP协议简介
超文本传输协议(英文:Hyper Text Transfer Protocol,HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。HTTP有很多应用,但最著名的是用于web浏览器和web服务器之间的双工通信。
HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。我们称这个客户端为用户代理程序(user agent)。应答的服务器上存储着一些资源,比如HTML文件和图像。我们称这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或者隧道(tunnel)。
在浏览器地址栏键入URL,按下回车之后会经历以下流程:
- 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
- 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;
- 浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
- 服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
- 释放 TCP连接;
- 浏览器将该 html 文本并显示内容。
HTTP请求方法:
GET HEAD POST PUT DELETE TRACE OPTION CONNECT
但是现阶段最重要的是 get,和post
HTTP请求格式
HTTP响应格式
1. HTTP协议:
1.请求(浏览器发给服务端的消息——request)
请求方法 URL 协议版本
k1:v1
k2:v2
请求体 —— 》 可以有,可以没有 GET请求没有
2. 响应(服务端返回给浏览器的消息——response)
协议版本 状态码 状态码描述符
k1:v1
k2:v2
Content-Type: text/html;charset=utf8;
响应体 —— 》 HTML代码
1.什么是web框架?
根据URL中不同的路径返回不同的内容--函数进阶版 """ import socket sk = socket.socket() sk.bind(("127.0.0.1", 8080)) # 绑定IP和端口 sk.listen() # 监听 # 将返回不同的内容部分封装成不同的函数 def index(url): s = "这是{}页面XX!".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 True: # 等待连接 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 item in list1: if item[0] == url: func = item[1] break if func: response = func(url) else: response = b"404 not found!" # 返回具体的响应消息 conn.send(response) conn.close()
2. web框架
本质:socket服务端
功能:
1. socket收发消息
2. url和函数的对应关系,根据不同的URL执行不同函数
3. 字符串的替换(模板渲染)
3. web框架分类
实现1、2、3的框架 ——》 tornado
实现 2、3的框架,使用的第三方1 wsgiref uwsgi ——》 django
实现 2 的框架 ——》 flask
分类:
1、django
2、其他