HTTP協(xié)議
http協(xié)議是:是基于TCP/IP協(xié)議超文本傳輸協(xié)議,它是一個(gè)短連接寥茫。超文本是指由HTML標(biāo)簽語言編寫的能被瀏覽器識(shí)別并解析出頁面樣式的文本文件,超文本傳輸協(xié)議就是向服務(wù)器發(fā)起請(qǐng)求矾麻,服務(wù)器傳輸所請(qǐng)求的域名中的超文本文件纱耻,然后在客戶端通過瀏覽器識(shí)別解析。他們所遵循的就是http協(xié)議
輸入域名到展示的過程
1险耀、域名解析
根據(jù)輸入的域名弄喘,解析出服務(wù)器的IP地址。域名解析的順序是反向的甩牺,從.com開始到www.結(jié)束
2蘑志、瀏覽器發(fā)起請(qǐng)求
在RequestHeader欄中可以看到瀏覽器發(fā)起的請(qǐng)求
GET / HTTP/1.1
GET表示一個(gè)讀取請(qǐng)求,將從服務(wù)器獲得網(wǎng)頁數(shù)據(jù)贬派,/表示URL的路徑急但,URL總是以/開頭,/就表示主頁搞乏,最后的HTTP/1.1指示采用的HTTP協(xié)議版本是1.1波桩。目前HTTP協(xié)議的版本就是1.1,但是有部分服務(wù)器也支持1.0版本请敦,主要區(qū)別在于1.1版本允許多個(gè)HTTP請(qǐng)求復(fù)用一個(gè)TCP連接镐躲,以加快傳輸速度。
Host: www.baidu.com
表示請(qǐng)求的域名是www.baidu.com如果一臺(tái)服務(wù)器有多個(gè)網(wǎng)站侍筛,服務(wù)器就需要通過Host來區(qū)分瀏覽器請(qǐng)求的是哪個(gè)網(wǎng)站萤皂。
3、服務(wù)器響應(yīng)
在Response Header中點(diǎn)擊 view source 顯示服務(wù)器返回的原始響應(yīng)數(shù)據(jù)
HTTP響應(yīng)分為Header和Body兩部分(Body是可選項(xiàng))匣椰,我們?cè)贜etwork中看到的Header最重要的幾行如下:
HTTP/1.1 200 OK
200表示一個(gè)成功的響應(yīng)裆熙,后面的OK是說明。
如果返回的不是200,那么往往有其他的功能入录,例如:
????失敗的響應(yīng)有:
????◆404 Not Found:網(wǎng)頁不存在
????◆500 Internal Server Error:服務(wù)器內(nèi)部出錯(cuò)
...等等...
Content-Type: text/html; charset=utf-8
Content-Type指示響應(yīng)的內(nèi)容齐媒,這里是text/html表示HTML文本。
注意:瀏覽器響應(yīng)的數(shù)據(jù)類型只能從content-type的值來判斷纷跛,而不是url地址中的文件后綴名
Content-Encoding: gzip
當(dāng)存在Content-Encoding時(shí)喻括,Body數(shù)據(jù)是被壓縮的,最常見的壓縮方式是gzip贫奠,所以唬血,看到Content-Encoding: gzip時(shí),需要將Body數(shù)據(jù)先解縮唤崭,才能得到真正的數(shù)據(jù)拷恨。壓縮的目的在于減少Body的大小,加快網(wǎng)絡(luò)傳輸谢肾。
瀏覽器解析過程:
當(dāng)瀏覽器讀取到百度的HTML源碼后腕侄,它會(huì)解析HTML,顯示網(wǎng)頁芦疏,然后冕杠,根據(jù)HTML中的各種鏈接,再發(fā)送HTTP請(qǐng)求給百度服務(wù)
器酸茴,拿到相應(yīng)的圖片分预、視頻、Flash薪捍、JavaScript腳本笼痹、CSS等各種資
源,最終顯示出一個(gè)完整的完整酪穿。所以我們?cè)贜etwork下面能看到很多
額外的HTTP請(qǐng)求凳干。
總結(jié)
步驟1:瀏覽器首先向服務(wù)器發(fā)送HTTP請(qǐng)求,請(qǐng)求包括:
方法:GET還是POST被济,GET僅請(qǐng)求資源救赐,POST會(huì)附帶用戶數(shù)據(jù);
路徑:/full/url/path溉潭;
域名:由Host頭指定:Host: www.sina.com
以及其他相關(guān)的Header净响;
如果是POST少欺,那么請(qǐng)求還包括一個(gè)Body喳瓣,包含用戶數(shù)據(jù)
步驟2:服務(wù)器向?yàn)g覽器返回HTTP響應(yīng),響應(yīng)包括:
響應(yīng)代碼:200表示成功赞别,3xx表示重定向畏陕,4xx表示客戶端發(fā)送的請(qǐng)求
有錯(cuò)誤,5xx表示服務(wù)器端處理時(shí)發(fā)生了錯(cuò)誤仿滔;
響應(yīng)類型:由Content-Type指定惠毁;
以及其他相關(guān)的Header犹芹;
通常服務(wù)器的HTTP響應(yīng)會(huì)攜帶內(nèi)容,也就是有一個(gè)Body鞠绰,包含響應(yīng)的
內(nèi)容腰埂,網(wǎng)頁的HTML源碼就在Body中。
步驟3:如果瀏覽器還需要繼續(xù)向服務(wù)器請(qǐng)求其他資源蜈膨,比如圖片屿笼,就再次發(fā)出HTTP請(qǐng)求,重復(fù)步驟1翁巍、2驴一。
Web采用的HTTP協(xié)議采用了非常簡(jiǎn)單的請(qǐng)求-響應(yīng)模式,從而大大簡(jiǎn)化
了開發(fā)灶壶。當(dāng)我們編寫一個(gè)頁面時(shí)肝断,我們只需要在HTTP請(qǐng)求中把HTML
發(fā)送出去,不需要考慮如何附帶圖片驰凛、視頻等胸懈,瀏覽器如果需要請(qǐng)求圖
片和視頻,它會(huì)發(fā)送另一個(gè)HTTP請(qǐng)求恰响,因此箫荡,一個(gè)HTTP請(qǐng)求只處理
一個(gè)資源(此時(shí)就可以理解為TCP協(xié)議中的短連接,每個(gè)鏈接只獲取一
個(gè)資源渔隶,如需要多個(gè)就需要建立多個(gè)鏈接)
HTTP協(xié)議同時(shí)具備極強(qiáng)的擴(kuò)展性羔挡,雖然瀏覽器請(qǐng)求的 是 http://www.baidu.com 的首頁,但是百度在HTML中可以鏈接其他服務(wù)器 的資源间唉,比如圖片或者視頻的url鏈接绞灼,從而將請(qǐng)求壓力分散到各個(gè)服務(wù)器上,并且呈野,一個(gè)站點(diǎn)可以鏈接到 其他站點(diǎn)低矮,無數(shù)個(gè)站點(diǎn)互相鏈接起來,就形成了World Wide Web被冒,簡(jiǎn)稱 WWW军掂。
WSGI服務(wù)器
PythonWeb服務(wù)器網(wǎng)關(guān)接口(Python Web Server Gateway Interface,縮寫為WSGI)是Python應(yīng)用程序或框架和Web服務(wù)器之間的一種接口昨悼,已經(jīng)被廣泛接受, 它已基本達(dá)成它的可移植性方面的目標(biāo)蝗锥。
當(dāng)我們使用Framework【開發(fā)框架】開發(fā)web應(yīng)用后,如何將web應(yīng)用和服務(wù)器聯(lián)系起來率触,讓服務(wù)器為客戶端提供服務(wù)是首要解決的問題终议,當(dāng)python的web架構(gòu)并不能匹配服務(wù)器時(shí),就無法讓Server和Framework協(xié)同工作,但是WSGI服務(wù)器可以解決這個(gè)問題穴张。