HTTP協(xié)議與靜態(tài)Web服務(wù)器開發(fā)
學(xué)習(xí)目標(biāo)
1、了解HTTP協(xié)議的基本概念?
2、掌握HTTP請(qǐng)求報(bào)文與響應(yīng)報(bào)文?
3、學(xué)會(huì)使用開發(fā)者工具查看HTTP協(xié)議的通信過程?
4、搭建Python自帶的靜態(tài)Web服務(wù)器?
5、掌握Python靜態(tài)Web服務(wù)器開發(fā)
一、HTTP協(xié)議概述
1、網(wǎng)址URL
網(wǎng)址又稱為URL,URL的英文全拼是(Uniform Resoure Locator),表達(dá)的意思是統(tǒng)一資源定位符,通俗理解就是網(wǎng)絡(luò)資源地址。 URL地址:https://www.itcast.com/18/1122/10/E178J2O4000189FH.html
2、URL的組成

3、HTTP協(xié)議
☆ 場(chǎng)景導(dǎo)入
首先我們來看一個(gè)場(chǎng)景:

在瀏覽器與Web服務(wù)器通信過程中,其數(shù)據(jù)格式有什么規(guī)則么,是否可以任意設(shè)置??
答:不是的,瀏覽器與Web服務(wù)器端的通信,必須使用HTTP協(xié)議來規(guī)定瀏覽器和web服務(wù)器之間通訊的數(shù)據(jù)的格式。
☆ 什么是HTTP協(xié)議?
HTTP協(xié)議的全稱是(HyperText Transfer Protocol),翻譯過來就是超文本傳輸協(xié)議。 超文本是指在文本數(shù)據(jù)的基礎(chǔ)上還包括非文本數(shù)據(jù),非文本數(shù)據(jù)有圖片、音樂、視頻等,而這些非文本數(shù)據(jù)會(huì)使用鏈接的方式進(jìn)行加載顯示,通俗來說超文本就是帶有鏈接的文本數(shù)據(jù)也就是我們常說的網(wǎng)頁數(shù)據(jù),如下圖所示:

☆ HTTP協(xié)議的概念及作用
HTTP協(xié)議的制作者是蒂姆·伯納斯-李,1991年設(shè)計(jì)出來的,HTTP協(xié)議設(shè)計(jì)之前目的是傳輸網(wǎng)頁數(shù)據(jù)的,現(xiàn)在允許傳輸任意類型的數(shù)據(jù)。 傳輸HTTP協(xié)議格式的數(shù)據(jù)是基于TCP傳輸協(xié)議的,發(fā)送數(shù)據(jù)之前需要先建立連接。 TCP傳輸協(xié)議是用來保證網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)的安全性的,HTTP協(xié)議是用來規(guī)定這些數(shù)據(jù)的具體格式的。
注意:HTTP協(xié)議規(guī)定的數(shù)據(jù)格式是瀏覽器和Web服務(wù)器通信數(shù)據(jù)的格式,也就是說瀏覽器和Web服務(wù)器通信需要使用HTTP協(xié)議。
☆ 瀏覽器訪問Web服務(wù)器的過程

二、HTTP請(qǐng)求報(bào)文與響應(yīng)報(bào)文
1、HTTP請(qǐng)求報(bào)文
HTTP最常見的請(qǐng)求報(bào)文有兩種:① GET方式的請(qǐng)求報(bào)文 ② POST方式的請(qǐng)求報(bào)文 GET: 獲取Web服務(wù)器數(shù)據(jù) POST: 向Web服務(wù)器提交數(shù)據(jù)
2、GET請(qǐng)求報(bào)文格式

3、GET請(qǐng)求報(bào)文分析
在Windows系統(tǒng)中,換行符使用\n來實(shí)現(xiàn)。但是在Linux以及Unix系統(tǒng)中,換行符需要使用\r\n來實(shí)現(xiàn)。
4、POST請(qǐng)求報(bào)文格式

5、POST請(qǐng)求報(bào)文分析
6、GET與POST請(qǐng)求報(bào)文小結(jié)
① 一個(gè)HTTP請(qǐng)求報(bào)文可以由請(qǐng)求行、請(qǐng)求頭、空行和請(qǐng)求體4個(gè)部分組成 ② 請(qǐng)求行是由三部分組成: 請(qǐng)求方式、請(qǐng)求資源路徑、HTTP協(xié)議版本(1.1或2.0) ③ GET方式的請(qǐng)求報(bào)文沒有請(qǐng)求體,只有請(qǐng)求行、請(qǐng)求頭、空行組成 ④ POST方式的請(qǐng)求報(bào)文可以有請(qǐng)求行、請(qǐng)求頭、空行、請(qǐng)求體四部分組成。 注意:POST方式可以允許沒有請(qǐng)求體,但是這種格式很少見。

7、HTTP 響應(yīng)報(bào)文分析(重點(diǎn))

響應(yīng)頭信息主要是告訴瀏覽器的客戶端應(yīng)該如何處理我們返回的數(shù)據(jù)。
8、HTTP響應(yīng)狀態(tài)碼
是用于表示W(wǎng)eb服務(wù)器響應(yīng)狀態(tài)的3位數(shù)字代碼

三、查看HTTP協(xié)議的通信過程
1、谷歌瀏覽器開發(fā)者工具
安裝GoogleChrome瀏覽器,在Windows和Linux平臺(tái)按F12或Ctrl+Shift+I調(diào)出開發(fā)者工具,Mac中選擇“視圖 ->開發(fā)者->”開發(fā)者工具或者直接使用alt+command+i 這個(gè)快捷鍵,還有一個(gè)多平臺(tái)通用的操作就是在網(wǎng)頁右擊選擇檢查。
提示:開發(fā)者工具還是查看網(wǎng)頁布局和JS代碼調(diào)試的利器。
2、HTTP協(xié)議的通信過程

注意:每一次瀏覽器和服務(wù)器的數(shù)據(jù)通訊,都是成對(duì)出現(xiàn)的即請(qǐng)求和響應(yīng),同時(shí)每一次請(qǐng)求和響應(yīng)都必須符合HTTP協(xié)議的格式
3、谷歌瀏覽器開發(fā)者工具使用
第一步:了解各選項(xiàng)卡功能
編輯切換為居中 第二步:使用Network發(fā)送HTTP請(qǐng)求

第三步:查看HTTP協(xié)議的通信過程 請(qǐng)求頭、請(qǐng)求頭信息

響應(yīng)頭、響應(yīng)體信息

4、小結(jié)
谷歌瀏覽器的開發(fā)者工具是查看http協(xié)議的通信過程利器,通過Network標(biāo)簽選項(xiàng)可以查看每一次的請(qǐng)求和響應(yīng)的通信過程,調(diào)出開發(fā)者工具的通用方法是在網(wǎng)頁右擊選擇檢查。 Headers選項(xiàng)總共有三部分組成:?
① General: 主要信息?
② Response Headers: 響應(yīng)頭?
③ Request Headers: 請(qǐng)求頭 Response選項(xiàng)是查看響應(yīng)體信息的
四、搭建Python自帶的靜態(tài)Web服務(wù)器
1、什么是靜態(tài)Web服務(wù)器
可以為發(fā)出請(qǐng)求的瀏覽器提供靜態(tài)文檔(html/css/js/圖片/音頻/視頻)的程序。 平時(shí)我們?yōu)g覽百度新聞數(shù)據(jù)的時(shí)候,每天的新聞數(shù)據(jù)都會(huì)發(fā)生變化,那訪問的這個(gè)頁面就是動(dòng)態(tài)的,而我們開發(fā)的是靜態(tài)的,每天訪問我們自己的靜態(tài)web服務(wù)器,頁面的數(shù)據(jù)不會(huì)發(fā)生變化。
2、搭建Python自帶的靜態(tài)Web服務(wù)器
Linux創(chuàng)建方式:

Windows創(chuàng)建方式:?
① 創(chuàng)建一個(gè)文件夾,然后把所有的資源文件都放入這個(gè)文件夾中 ② 在DOS窗口使用cd命令切換到此目錄?
③ 使用python -m命令創(chuàng)建靜態(tài)Web服務(wù)器
-m表示運(yùn)行包里面的模塊,執(zhí)行這個(gè)命令的時(shí)候,需要進(jìn)入你自己指定靜態(tài)文件的目錄,然后通過瀏覽器就能訪問對(duì)應(yīng)的html文件了,這樣一個(gè)靜態(tài)的web服務(wù)器就搭建好了。?
④ 訪問Web靜態(tài)服務(wù)器:

查看HTTP通信過程:

3、小結(jié)
靜態(tài)Web服務(wù)器是為發(fā)出請(qǐng)求的瀏覽器提供靜態(tài)文檔的程序,搭建Python自帶的Web服務(wù)器使用 python –m http.server 端口號(hào)這個(gè)命令即可,端口號(hào)不指定默認(rèn)是8000
強(qiáng)調(diào)!:應(yīng)答體中攜帶的數(shù)據(jù)發(fā)送到瀏覽器,瀏覽器經(jīng)過渲染產(chǎn)生具體頁面
五、使用Python開發(fā)自己的Web服務(wù)器
Web服務(wù)器 = TCP服務(wù)器(七步走) + ?HTTP協(xié)議(請(qǐng)求、響應(yīng))
1、開發(fā)步驟

編輯切換為居中
2、返回固定頁面的數(shù)據(jù)
3、返回指定頁面的數(shù)據(jù)
分析步驟:?
① 獲取用戶請(qǐng)求資源的路徑?
② 根據(jù)請(qǐng)求資源的路徑,讀取指定文件的數(shù)據(jù)
③ 組裝指定文件數(shù)據(jù)的響應(yīng)報(bào)文,發(fā)送給瀏覽器?
④ 判斷請(qǐng)求的文件在服務(wù)端不存在,組裝404狀態(tài)的響應(yīng)報(bào)文,發(fā)送給瀏覽器 獲取用戶請(qǐng)求資源的路徑:
獲取指定頁面的數(shù)據(jù):
組裝指定頁面數(shù)據(jù)的響應(yīng)報(bào)文:
組裝404頁面數(shù)據(jù)的響應(yīng)報(bào)文:
六、FastAPI框架
學(xué)習(xí)目標(biāo)
能夠知道什么是FastAPI
能夠知道怎么安裝FastAPI
能夠掌握FastAPI的基本使用
能夠掌握FastAPI實(shí)現(xiàn)訪問多個(gè)指定網(wǎng)頁
1. 什么是FastAPI
FastAPI是一個(gè)現(xiàn)代的,快速(高性能)python web框架. 基于標(biāo)準(zhǔn)的python類型提示,使用python3.6+構(gòu)建API的Web框架.

簡(jiǎn)單講FastAPI就是把做web開發(fā)所需的相關(guān)代碼全部簡(jiǎn)化, 我們不需要自己實(shí)現(xiàn)各種復(fù)雜的代碼, 例如多任務(wù),路由裝飾器等等. 只需要調(diào)用FastAPI提供給我們的函數(shù), 一調(diào)用就可以實(shí)現(xiàn)之前需要很多復(fù)雜代碼才能實(shí)現(xiàn)的功能.
FastAPI的特點(diǎn)
性能快:高性能,可以和NodeJS和Go相提并論
快速開發(fā):開發(fā)功能速度提高約200%至300%
更少的Bug:
Fewer bugs: 減少40%開發(fā)人員容易引發(fā)的錯(cuò)誤
直觀:完美的編輯支持
簡(jiǎn)單: 易于使用和學(xué)習(xí),減少閱讀文檔的時(shí)間
代碼簡(jiǎn)潔:很大程度上減少代碼重復(fù)。每個(gè)參數(shù)可以聲明多個(gè)功能,減少bug的發(fā)生
標(biāo)準(zhǔn)化:基于并完全兼容API的開發(fā)標(biāo)準(zhǔn):OpenAPI(以前稱為Swagger)和JSON Schema
搭建環(huán)境
python環(huán)境:Python 3.6+
fastapi安裝
☆ 安裝方式1:
安裝fastapi
pip install fastapi
如果用于生產(chǎn),那么你還需要一個(gè)ASGI服務(wù)器,如Uvicorn或Hypercorn
pip install uvicorn
☆ 安裝方式2 : 1)選擇File->Settings

2)選擇對(duì)應(yīng)項(xiàng)目的Project Interpreter -> 選擇pygame(可以輸入pygame進(jìn)行搜索,節(jié)省時(shí)間) -> install package按鈕 -> 等待項(xiàng)目安裝pygame 包完成(可能需要幾分鐘到十幾分鐘)-> 返回后如果有pygame package信息,則說明項(xiàng)目配置成功


2. FastAPI的基本使用
功能需求:
搭建服務(wù)器
返回html頁面
基本步驟:
導(dǎo)入模塊
創(chuàng)建FastAPI框架對(duì)象
通過@app路由裝飾器收發(fā)數(shù)據(jù)
運(yùn)行服務(wù)器
代碼實(shí)現(xiàn):
3. 通過FastAPI訪問多個(gè)指定網(wǎng)頁
路由裝飾器的作用:

實(shí)際上通過路由裝飾器我們就可以讓一個(gè)網(wǎng)頁對(duì)應(yīng)一個(gè)函數(shù), 也就可以實(shí)現(xiàn)訪問指定網(wǎng)頁了.
4. 小結(jié)
基本步驟:
導(dǎo)入模塊
創(chuàng)建FastAPI框架對(duì)象
通過@app路由裝飾器收發(fā)數(shù)據(jù)
運(yùn)行服務(wù)器