http协议:基于TCP/IP协议基础上的应用层协议,底层实现仍为socket(HyperText Transport Protocol)是超文本传输协议
基于请求-响应模式:通信一定是从客户端开始,服务器端接收到客户端一定会做出对应响应
无状态:协议不对任何一次通信状态和任何数据做保存
无连接:一次连接只完成一次请求-响应,请求-响应完毕后会立即断开连接
请求:
请求行:GET|POST(请求方式)/(请求路径)
HTTP/1.1(http协议版本)
请求头:...
请求体:GET 请求体放在请求路径后进行拼接 POST会在请求行与请求头结束后,以数据包方式单独发送
响应:
响应行:HTTP/1.1(http协议版本) 200(状态码) OK(状态结束)
响应头:(了解)
响应体:具体的数据
web应用
运行在浏览器上的应用
c/s b/s 架构
client/server:客户端服务器架构,C++
brower/server:浏览器服务器架构,Java,Python底层均是基于socket
Python Web框架
socket 页面路由 模板渲染
Django wsgiref 自己写的 自己写的 功能全面
Flask 第三方 自己写的 自己写的 小而轻
Tornado 自己写 自己写的 自己写的 支持高并发
浏览器错误:发送的响应无效,原因:响应不满足http协议
请求发来的数据:
b'GET / HTTP/1.1
HOST: 127.0.0.1:8801
Connection: keep-alive
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Macintosh;Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML,like Gecko)Chrome/70.0.3538.110 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: csrftoken=szfYLDVuqvRhlveNpNE2rp1GYOcI5x7
mRNfvkRWTMRNRwWxXMZWOhL1MqknYJ7jg; sessionid=3pphvmw
2icub0bea7nn02u6wev17k4uw
'
http工作原理:(事物)
一次http操作称之为一个事物,工作过程可分为四步
客户端与服务器建立连接
客户端发生一个http协议指定格式的请求
服务器端接收请求后,响应一个http协议指定格式的响应
客户端将服务器的响应显示展现给用户
- 请求报文
```python
# 请求行 请求头 请求体
'''
POST / HTTP/1.1
Host: 127.0.0.1:8001
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
usr=abc&pwd=123
'''
- 响应报文
```python
# 响应行 响应头 响应体
'''
HTTP/1.1 200 OK
Content-type:text/html
Login Success
'''
- [状态码](https://baike.baidu.com/item/HTTP%E7%8A%B6%E6%80%81%E7%A0%81)
```python
# 1打头:消息通知
# 2打头:请求成功
# 3打头:重定向
# 4打头:客户端错误
# 5打头:服务器端错误
# 设置路由
urls = {
# 请求路径与请求处理函数一一对应
'/index': index,
favicon.jpeg: ico,
'/user': user
}