摘要:介紹Web開(kāi)發(fā)的幾個(gè)發(fā)展階段;HTTP協(xié)議簡(jiǎn)介,請(qǐng)求信息、響應(yīng)信息的分析;HTTP工作原理。
*寫(xiě)在前面:為了更好的學(xué)習(xí)python,博主記錄下自己的學(xué)習(xí)路程。本學(xué)習(xí)筆記基于廖雪峰的Python教程,如有侵權(quán),請(qǐng)告知?jiǎng)h除。歡迎與博主一起學(xué)習(xí)Pythonヽ( ̄▽?zhuān)?? *
目錄
Web開(kāi)發(fā)
HTTP協(xié)議簡(jiǎn)介
HTTP請(qǐng)求信息
HTTP響應(yīng)信息
HTTP工作原理
小結(jié)
Web開(kāi)發(fā)
如今,很多軟件都是以web形式提供,比如新浪微博、網(wǎng)易新聞等等??梢哉f(shuō),Web應(yīng)用開(kāi)發(fā)是目前軟件開(kāi)發(fā)中最重要的部分。
Web開(kāi)發(fā)經(jīng)歷了幾個(gè)階段:
1.靜態(tài)Web頁(yè)面,直接顯示靜態(tài)的HTML頁(yè)面,修改頁(yè)面則要編輯HTML源文件,早期的互聯(lián)網(wǎng)頁(yè)面就是靜態(tài)的。
2.出現(xiàn)CGI,Common Gateway Interface。頁(yè)面可以處理用戶發(fā)送的動(dòng)態(tài)數(shù)據(jù),比如用戶注冊(cè)。CGI用C/C++編寫(xiě)。
3.出現(xiàn)ASP/JSP/PHP。由于Web應(yīng)用修改頻率高,C/C++這樣的低級(jí)語(yǔ)言不適合Web開(kāi)發(fā)。而腳本語(yǔ)言開(kāi)發(fā)效率高,且與HTML結(jié)合緊密,因此迅速取代了CGI。ASP是微軟推出的用VBScript腳本編程的Web開(kāi)發(fā)技術(shù),JSP是用Java來(lái)編寫(xiě)腳本,PHP本身是開(kāi)源的腳本語(yǔ)言。
4.出現(xiàn)MVC,Model-View-Controller。為了提高Web的可維護(hù)性,引入了“模型-視圖-控制器”的模式,簡(jiǎn)化了Web開(kāi)發(fā)。
5.現(xiàn)階段,Web開(kāi)發(fā)技術(shù)仍在快速發(fā)展,如異步開(kāi)發(fā)等。
Python是一種解釋型的腳本語(yǔ)言,開(kāi)發(fā)效率高,而且有許多Web開(kāi)發(fā)框架以及成熟的模板技術(shù),非常適合用來(lái)做Web開(kāi)發(fā)。
HTTP協(xié)議簡(jiǎn)介
HTTP協(xié)議(Hyper Text Transfer Protocol),字面意思為超文本傳輸協(xié)議。是瀏覽器與服務(wù)器之間的傳輸協(xié)議。
用戶通過(guò)瀏覽器向服務(wù)器發(fā)送HTTP請(qǐng)求信息(Request),服務(wù)器收到請(qǐng)求后,向?yàn)g覽器發(fā)送響應(yīng)信息(Response)。
我們用例子分析一下請(qǐng)求信息與響應(yīng)信息具體是怎么樣的。
HTTP請(qǐng)求信息
用瀏覽器打開(kāi)網(wǎng)頁(yè)之后,按F12,會(huì)出現(xiàn)一個(gè)開(kāi)發(fā)者工具界面,在里面可以看到網(wǎng)頁(yè)的結(jié)構(gòu)、通信信息等。
我們以163網(wǎng)易為例,在進(jìn)入網(wǎng)易官網(wǎng)后,按F12,在出現(xiàn)的界面中選擇network,然后在左側(cè)選擇第一個(gè)文件,之后右側(cè)就會(huì)顯示相關(guān)信息,點(diǎn)擊view source可以看到具體的信息。

我們截取部分信息來(lái)分析一下。
先來(lái)看請(qǐng)求信息:
GET / HTTP/1.1
Host: www.163.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36 LBBROWSER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer: http://www.163.com/
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: zh-CN,zh;q=0.8
第一部分,是請(qǐng)求行。說(shuō)明請(qǐng)求類(lèi)型、訪問(wèn)資源以及HTTP版本。在這里是第一行。
GET表示請(qǐng)求類(lèi)型是GET請(qǐng)求,/表示URL路徑,/是首頁(yè),HTTP/1.1表示采用的HTTP協(xié)議是1.1版本.
第二部分,是請(qǐng)求頭部。說(shuō)明服務(wù)器要使用的附加信息。在這里第一行往后都屬于這一部分。
其中Host表示請(qǐng)求的域名。
第三部分,空行。請(qǐng)求頭部后面的空行是必須的。
第四部分,請(qǐng)求數(shù)據(jù)。這里沒(méi)有請(qǐng)求數(shù)據(jù)。
HTTP響應(yīng)信息
我們?cè)賮?lái)看一下響應(yīng)信息部分:
HTTP/1.1 200 OK
Expires: Thu, 20 Sep 2018 07:39:34 GMT
Date: Thu, 20 Sep 2018 07:38:14 GMT
Server: nginx
Content-Type: text/html; charset=GBK
Transfer-Encoding: chunked
Vary: Accept-Encoding,User-Agent,Accept
Cache-Control: max-age=80
Content-Encoding: gzip
X-Via: 1.1 PSgdmmsxsw84:1 (Cdn Cache Server V2.0), 1.1 PSgdzsydzd33:0 (Cdn Cache Server V2.0)
Connection: keep-alive
第一部分,狀態(tài)行。說(shuō)明HTTP版本、信息狀態(tài)碼和狀態(tài)信息。這里是第一行。
狀態(tài)碼200表示請(qǐng)求成功。
第二部分,信息報(bào)頭。說(shuō)明客戶端要使用的一些附加信息。第一行后面的都是。
其中Content-Type表示響應(yīng)的內(nèi)容,text/html表示HTML網(wǎng)頁(yè)。
第三部分,空行。消息報(bào)頭后面的空行是必須的。
第四部分,響應(yīng)正文。即HTML源碼。
我們?cè)陂_(kāi)發(fā)者工具中點(diǎn)擊Response,就能看到:

HTTP工作原理
看了HTTP的請(qǐng)求信息和響應(yīng)信息,我們來(lái)總結(jié)一下HTTP的工作原理。
第一步,建立連接。
瀏覽器與Web服務(wù)器的端口建立一個(gè)TCP連接。
第二步,發(fā)送HTTP請(qǐng)求。
瀏覽器向服務(wù)器發(fā)送HTTP請(qǐng)求,包括請(qǐng)求方法、路徑、域名以及其他相關(guān)Header。
第三步,接收HTTP請(qǐng)求并返回響應(yīng)信息。
Web服務(wù)器解析請(qǐng)求,并返回響應(yīng)信息,包括響應(yīng)狀態(tài)、響應(yīng)類(lèi)型、其他相關(guān)Header以及響應(yīng)正文。
第四步,釋放連接或繼續(xù)請(qǐng)求。
若connection為close,則Web服務(wù)器主動(dòng)斷開(kāi)連接;若connection為keepalive,則Web服務(wù)器繼續(xù)等待請(qǐng)求。
第五步,解析響應(yīng)信息。
瀏覽器解析響應(yīng)信息,包括響應(yīng)頭和響應(yīng)正文。最終解析HTML文本并顯示出來(lái)。
小結(jié)
想要詳細(xì)了解HTTP協(xié)議,可以看HTTP權(quán)威指南 (廖雪峰推薦)。
以上就是本節(jié)的全部?jī)?nèi)容,感謝你的閱讀。
下一節(jié)內(nèi)容:Web開(kāi)發(fā)之 HTML簡(jiǎn)介
有任何問(wèn)題與想法,歡迎評(píng)論與吐槽。
和博主一起學(xué)習(xí)Python吧( ̄▽?zhuān)?~*