前言
在公司網站開發中,我們往往借助於Flask、Django等網站開發框架去提高網站開發效率。那么在面試后端開發工程師的時候,面試官可能就會問到網站開發的底層原理是什么?
我們不止僅僅會使用框架開發,還需要知其所以然
今天領大家不借助任何框架的基礎上手動搭建一個資料查找網站
- TCP網絡模型
- 正則表達式匹配資源
- 如何編寫一個tcp server服務端
如何實現一個靜態的服務器呢? 可以使用Python自帶的一個通訊模型:socket
python中內置的網絡模型庫tcp / udp
import socket
def service_client(new_socket): request = new_socket.recv(1024) print(request)
如果瀏覽器在接收完http協議數據之后遇到了換行,自動將下面的數據轉成網站內容body中去
response = 'HTTP/1.1 200 OK \r\n' response += '\r\n' # 構建你想要顯示的數據內容 response += 'hello world'
new_socket.send(response.encode('utf-8'))
new_socket.close()
socket模塊需要兩個參數 網絡協議(pc ipv4 ipv6) 模型類型
def main(): tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
我們操作系統內部有65535個服務端口,當一個程序運行的時候[進程] 占用一個端口
瀏覽器軟件運行占用的端口:80
文件上傳端口:22
網站指定端口:443
端口是有限的,當程序完成任務之后一定要釋放端口 刷新資源
tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
tcp_server_socket.bind(('', 80))
通過瀏覽器去訪問網站資源 [數據 html css JavaScript 靜態文件(圖片 音頻)]
需要讓瀏覽器首先能找到這台電腦 ip 才可以訪問這台電腦的數據資源
需要綁定電腦的ip地址
等待瀏覽器鏈接
tcp_server_socket.listen(128)
while True: ''' new_socket 負責向瀏覽器發送數據的 client_addr 記錄當前鏈接電腦的信息(ip port) ''' new_socket, client_addr = tcp_server_socket.accept() service_client(new_socket) # 使用new_socket向瀏覽器發送數據
if __name__ == "__main__": main()

出現亂碼,可以把utf-8改為GBK
