web复习
五层
应用层
传输层
网络层
数据链路层
物理层
socket 套接字 位于应用层和网络传输层之间的虚拟层 一组接口
c/s-->b/s
工作原理
在浏览器地址栏键入URL,按下回车之后会经历以下流程:
- 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
- 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;
- 浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
- 服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
- 释放 TCP连接;
- 浏览器将该 html 文本并显示内容;
请求和响应的格式。
请求
浏览器给服务器发送的消息(request)
请求方法
路径 HTTP/1.1
k1: v1
k2: v2
请求体
响应服务器给浏览器发送的消息(response)
‘HTTP/1.1 状态码 状态码描述
k1: v1
k2: v2
请求方法 8种 GET POST PUT DELETE TARCE OPTIONS HEAD CONNECT
GET 获取页面
POST 提交数据
HTTP状态码
所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。
状态代码的第一个数字代表当前响应的类型:
- 1xx消息——请求已被服务器接收,继续处理
- 2xx成功——请求已成功被服务器接收、理解、并接受
- 3xx重定向——需要后续操作才能完成这一请求
- 4xx请求错误——请求含有词法错误或者无法被执行
- 5xx服务器错误——服务器在处理某个正确请求时发生错误
虽然 RFC 2616 中已经推荐了描述状态的短语,例如"200 OK","404 Not Found",但是WEB开发者仍然能够自行决定采用何种短语,用以显示本地化的状态描述或者自定义信息。
https://www.cnblogs.com/maple-shaw/articles/9060408.html
响应头和体
import socket
sk = socket.socket()
sk.bind(('127.0.0.1', 8000))
sk.listen()
while True:
conn, addr = sk.accept()
data = conn.recv(1024)
conn.send(b'HTTP/1.1 200 ok
content-type: text/html; charset=utf-8
')
#响应头
conn.send(b'<h1>ok</h1>') #响应体
conn.close()
URL
http https
域名 ——》 ip
端口 http 80 https 443
路径
查询参数 ?k1=v1&k2=v2
web框架
本质:socket服务端
功能
1. socket收发消息 (wsgiref 、uwsgi)
2. 根据不同的路径返回不同的内容
3. 返回动态页面(字符串的替换 ——》 模板渲染 jinja2)
原理
1.百度 socket 服务端
2.socket服务端启动
3.绑定ip和端口
4.监听等待连接
8.接受数据
9.返回数据
12断开连接
浏览器socket客户端
5.socket服务端启动
6.连接(ip和端口)
7.发送数据
10.接受数据
11.断开连接
web框架本质--> socket服务端
超文本
双工通信
分类
diango:2 3
flask:2
tornado:1 2 3
其他的分类:
Django
其他: flask tornado