'''
网络编程
C/S: client->server
B/S: browser->server
OSI
应用层:
数据层:
会话层
传输层
网络层
数据链路层
物理层
socket 将传输层及以下的数据传输封装成一个socket模块,简化网络通信
import socket
socket(AF_INET/UNIX, SOCK_STREAM/DGRAM)
setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
.bind(('ip', port))
.connect(('ip', port))
.listen(128)
.accept()
.recv(1024)
.recvfrom(1024)
.send(1024)
.sendto(bytes,('ip', port))
.close()
.getsockname()
.setblocking(True)
import struct
.pack('', xx)
.unpack('', xx)
from socketserver import BaseRequestHandler, ThreadingTCPServer
class xx(BaseRequestHandler):
def handle(self):
a = self.request
b = self.client_address
a, b = self.request
t = ThreadingTCPServer(('ip',port),xx)
t.serve_forever()
HTTP
1. 基于请求响应
2. 基于TCP协议,作用于应用层之上
3. 无、短链接
4. 无状态
session cookie token
请求首行(请求方式 请求路径 http协议i版本)
请求头(一大堆k-v)
\r\n
请求体(携带发送给服务端的敏感数据)
响应首行(响应状态码, http协议版本)
响应头(一大堆k-v)
\r\n
响应体(服务器发送给浏览器,需要展示给用户看的数据)
请求方式
GET POST PUSH PATCH DELETE head options trace
响应状态码
1xx
2xx
200 OK GET
201 CREATE POST
202 Accepted *
204 NO CONTENT POST
3xx
4xx
400 INVALID Request POST
422 Unprocesable entity
401 Unauthorized *
403 forbidden *
404 NOT FOUND *
406 not acceptable get
410 Gone get
5xx
INTERNAL SERVER Error *
URL
WSGI
1. 对接收的HTTP协议报文拆包,将请求信息封装成environ
2. 将environ作为0,start_response作为1,传递给WSGI_APP
start_response用于传递规范的HTTP响应头
3. 在APP内进行逻辑处理,对environ再加工
4. 返回正文
from wsgiref.simple_server import make_server
def xxx(environ, start_response):
start_response('200 OK', [('content-type', 'text/html'), ('charset', 'utf-8')])
return [bytes]
a = make_server('ip', port, xxx)
a.socket.getsockname()
a.serve_forever()
'''