web请求流程——HTTP协议
一、web请求流程
先从本地DNS域名服务器找相对的IP地址如果没有,找 根DNS服务器——>顶级DNS服务器——>权威DNS服务器——>二级域名的DNS服务器
补充:字符串和字节的转换:
>>> s = "hello"
>>> bytes(s,encoding='utf-8')
b'hello'
>>> b = bytes(s,encoding='utf-8')
>>> str(b, encoding='utf-8')
HTTP协议简单传输
请求头(界面):
GET / HTTP/1.1
Host: 127.0.0.1:8080 (主机名)
Connection: keep-alive (保持链接)
Cache-Control: max-age=0 (缓存不失效)
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
请求体(界面):
就是数据部分,与请求头用\r\n\r\n作为分隔符分开
响应头(后台):
HTTP/1.1 200 OK (最简单的响应头)
响应体(后台):
就是用户能能看到的内容
补充:HTTP:默认端口是80
https:默认端口是443
状态码:2XX: 200 (OK) | 3XX: 302 304 | 4XX 404(not found) 403(forbidden 禁止访问)|
5XX: 500 (服务端代码错误) 502 (网关错误 bad gateway)
了解更多可以看肯《HTTP图解》这本漫画书,日本作家
二、自定义一个简单的web框架
需求:想要通过输入不同的 url, 获得不一样的相应内容
路由系统:
routes = [ ('/xxx', f1), ('/ooo', f2), ('/hhh', f3) ]
def f1():
return b'this is xxxx'
def f2():
return b'this is oooo'
自定义的web框架流程:
a. sokect 服务端
b. uri 和 函数的 对应关系
路由系统
c. 将html代码和mysql的数据进行融合 (自己定制规则 , 使用第三方的工具)
模板引擎渲染
web框架的分类:
第一种维度分类
- a,b,c ----> tornado
- a(用第三方), b, c ----> django wsgiref uwsgi
- a(第三方),b, c(第三方) -----》 flask
第二种维度分类
- django
- 其他