使用Python手動(dòng)搭建一個(gè)網(wǎng)站服務(wù)器,在瀏覽器中顯示你想要展現(xiàn)的內(nèi)容
前言
在公司網(wǎng)站開發(fā)中,我們往往借助于Flask、Django等網(wǎng)站開發(fā)框架去提高網(wǎng)站開發(fā)效率。那么在面試后端開發(fā)工程師的時(shí)候,面試官可能就會(huì)問到網(wǎng)站開發(fā)的底層原理是什么?
我們不止僅僅會(huì)使用框架開發(fā),還需要知其所以然
今天領(lǐng)大家不借助任何框架的基礎(chǔ)上手動(dòng)搭建一個(gè)資料查找網(wǎng)站

主要內(nèi)容
TCP網(wǎng)絡(luò)模型
正則表達(dá)式匹配資源
如何編寫一個(gè)tcp server服務(wù)端
開始我們的代碼,先是導(dǎo)入模塊
如何實(shí)現(xiàn)一個(gè)靜態(tài)的服務(wù)器呢? 可以使用Python自帶的一個(gè)通訊模型:socket
python中內(nèi)置的網(wǎng)絡(luò)模型庫tcp / udp
為瀏覽器發(fā)送數(shù)據(jù)的函數(shù)
1. 當(dāng)瀏覽器鏈接到網(wǎng)站服務(wù)器的時(shí)候
2. 向?yàn)g覽器發(fā)送http數(shù)據(jù)
如果瀏覽器在接收完http協(xié)議數(shù)據(jù)之后遇到了換行,自動(dòng)將下面的數(shù)據(jù)轉(zhuǎn)成網(wǎng)站內(nèi)容body中去
3. 瀏覽器接受到的數(shù)據(jù)是由編碼集的,所以我們需要對(duì)字符串進(jìn)行一次編碼
4. 當(dāng)服務(wù)完瀏覽器之后,需要釋放系統(tǒng)資源
創(chuàng)建一個(gè)執(zhí)行函數(shù)
1. 創(chuàng)建一個(gè)tcp套接字
socket模塊需要兩個(gè)參數(shù) 網(wǎng)絡(luò)協(xié)議(pc ipv4 ipv6) 模型類型
我們操作系統(tǒng)內(nèi)部有65535個(gè)服務(wù)端口,當(dāng)一個(gè)程序運(yùn)行的時(shí)候[進(jìn)程] 占用一個(gè)端口
瀏覽器軟件運(yùn)行占用的端口:80
文件上傳端口:22
網(wǎng)站指定端口:443
端口是有限的,當(dāng)程序完成任務(wù)之后一定要釋放端口 刷新資源
2. 當(dāng)網(wǎng)站服務(wù)中斷時(shí) 需要立即釋放端口
3.綁定本機(jī)信息
通過瀏覽器去訪問網(wǎng)站資源 [數(shù)據(jù) html css JavaScript 靜態(tài)文件(圖片 音頻)]
需要讓瀏覽器首先能找到這臺(tái)電腦 ip 才可以訪問這臺(tái)電腦的數(shù)據(jù)資源
需要綁定電腦的ip地址
4.將網(wǎng)站服務(wù)設(shè)置成監(jiān)聽模式
等待瀏覽器鏈接
網(wǎng)站服務(wù)
啟動(dòng)程序
運(yùn)行代碼

出現(xiàn)亂碼,可以把utf-8改為GBK
