1. 程式人生 > 其它 >2021/6/14 網路程式設計

2021/6/14 網路程式設計

'''
網路程式設計
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()
'''