web框架基础:
socket 基于TCP协议的
浏览器相当于socket客户端
ftp 只要建立链接,就一直而已互相发消息
http 协议 短链接(只有一次交互),无状态(不会保存客户端的信息)
html中:get是从服务器上获取数据,post是向服务器传送数据。
http请求:规定http请求有自己的格式(规则)
http只有一次的交互
1、请求
浏览器--->服务端
2、响应
服务端--->浏览器
规则:用\r\n\r\n来分割 头 和 内容,头中的每一个键值对用\r\n分割
请求和响应:
GET请求
请求头
HTTP1.1 /URL/ 状态码
\r\n
\r\n\r\n
请求体
POST
请求头
HTTP1.1 /URL/ 状态码
\r\n
\r\n\r\n
请求体
uesrname:xxx
password:xxx
请求内容:
请求header: # 是键值对的形式存的,每一个键值对用\r\n分割,header和body之间用\r\n\r\n分割
b'GET / HTTP/1.1 # GET是类型 后面" / "是URL路径 然后是HTTP版本
Host: 127.0.0.1:8080
Connection: keep-alive
Cache-Control: max-age=0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\nAccept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
'
请求体
b''
响应内容:
响应header:
HTTP/1.1 200 OK # 200是状态码
Date: Fri, 24 Nov 2017 02:17:37 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Cache-Control: public, max-age=6
Expires: Fri, 24 Nov 2017 02:17:44 GMT
Last-Modified: Fri, 24 Nov 2017 02:17:14 GMT
X-UA-Compatible: IE=10
X-Frame-Options: SAMEORIGIN
Content-Encoding: gzip
响应体:
页面内容
get请求是放到url后面的,想要取到当前页面的内容可以放到url后面
127.0.0.1:8080/login/?要提交的数据&提交的数据2
a 标签的跳转, href="/跳转页面/?要提交的数据&提交的数据2"
post提交方法:
action="/要提交到的页面/"
提交数据的格式:以key,value的形式提交
{
"name":"value",
"name":"value"
}
实现web框架:
自己实现web框架
socket服务端
1、开启服务(IP:POST)等待连接(监听)
4、服务端接收请求
5、返回响应
socket客户端(浏览器)
2、浏览器连接服务器
3、发送请求
实现一个web框架:
a、socket服务端
b、根据不同的url调用不同的函数
url 对应的函数 ,函数中放逻辑内容
c、返回内容
模板渲染(字符串替换)
python中的web框架:
1、a b c ---> tornado
2、第三方的a 自己写的b 自己写的c ---> Django
2、第三方的a 自己写的b 第三方的的c ---> flask
从另一方面分:
Django 大而全
其他
web应用 和 web server(uWsgi nginx)
WSGI协议