九、python学习之HTTP协议
今天學(xué)習(xí)了HTTP協(xié)議,說(shuō)實(shí)話,我并不想做今天的學(xué)習(xí)筆記,雖然學(xué)習(xí)的東西不多,但是對(duì)于HTTP協(xié)議要是往深層去說(shuō),所有的名詞和用法都解釋出來(lái),寫他個(gè)5篇都算是少的。但是,既然是學(xué)習(xí)筆記,還是本著總結(jié)今天學(xué)習(xí)內(nèi)容的目的,回顧一下今天的學(xué)習(xí)內(nèi)容,當(dāng)然,我也從網(wǎng)上找了一些其他大佬或者組織機(jī)構(gòu)做的一些關(guān)于HTTP協(xié)議的相關(guān)的只是:
博客園:http://www.cnblogs.com/ranyonsue/p/5984001.html
菜鳥(niǎo)教程:http://www.runoob.com/http/http-tutorial.html
w3school的http方法:http://www.w3school.com.cn/tags/html_ref_httpmethods.asp?
廖雪峰官方網(wǎng)站:
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432011939547478fd5482deb47b08716557cc99764e0000
好了,以上的幾篇文章算是對(duì)今天內(nèi)容的一部分補(bǔ)充,當(dāng)然,如果要徹底弄明白什么是HTTP(超文本傳輸)協(xié)議,仍然是一個(gè)較大的工程。?
現(xiàn)在開(kāi)始對(duì)今天學(xué)習(xí)內(nèi)容進(jìn)行進(jìn)行一個(gè)總結(jié):
一、瀏覽器訪問(wèn)服務(wù)器的過(guò)程:
1.瀏覽器向服務(wù)器發(fā)起請(qǐng)求的一般過(guò)程:
實(shí)現(xiàn)過(guò)程:
<1>瀏覽器接受用戶輸入的網(wǎng)址,按下"回車"?
<2>瀏覽器區(qū)分用戶輸入的是ip地址還是域名;如果是域名,瀏覽器想DNS服務(wù)器發(fā)起請(qǐng)求,獲得與該域名對(duì)應(yīng)的IP地址
<3>瀏覽器根據(jù)ip地址和端口(HTTP服務(wù)默認(rèn)端口是80)向服務(wù)器程序發(fā)起連接請(qǐng)求
<4>客戶端(瀏覽器)與服務(wù)建立連接后,客戶端向服務(wù)器發(fā)起數(shù)據(jù)請(qǐng)求
<5>服務(wù)器程序拿到數(shù)據(jù)請(qǐng)求后,根據(jù)需求獲取資源
<6>服務(wù)器程序再將資源發(fā)送回瀏覽器,完成本次數(shù)據(jù)請(qǐng)求操作
2.名詞解釋:
網(wǎng)址:網(wǎng)址又稱URL(Uniform Resoure Locator)統(tǒng)一資源定位符:主要有三部分組成:協(xié)議頭:http://;域名:www.xxx.com和資源路徑
域名:我們?cè)谠L問(wèn)一臺(tái)服務(wù)器的時(shí)候, 需要記住該服務(wù)器的IP地址, 由于IP地址不利于人們記憶, 所以推出的域名技術(shù). 域名是由一串用點(diǎn)分隔的名字組成的 Internet 上某一臺(tái)計(jì)算機(jī)或計(jì)算機(jī)組的名稱, 用于在數(shù)據(jù)傳輸時(shí)標(biāo)識(shí)計(jì)算機(jī)的位置
DNS(域名解析服務(wù)器):萬(wàn)維網(wǎng)上作為域名和ip地址相互映射的一個(gè)分布式數(shù)據(jù)庫(kù),能夠使用戶更方便的訪問(wèn)互聯(lián)網(wǎng),而不用去記住能夠被機(jī)器直接讀取的IP數(shù)串。DNS協(xié)議運(yùn)行在UDP協(xié)議之上,使用端口號(hào)53
二、HTTP協(xié)議:
1.HTTP協(xié)議簡(jiǎn)介:
HTTP協(xié)議就是超文本傳輸協(xié)議(HyperText Transfer Protocol),通俗理解是瀏覽器和web服務(wù)器傳輸數(shù)據(jù)格式的協(xié)議,HTTP協(xié)議是一個(gè)應(yīng)用層協(xié)議。
HTTP協(xié)議是基于TCP協(xié)議的,發(fā)送數(shù)據(jù)之前需要建立好連接
HTTP是萬(wàn)維網(wǎng)的數(shù)據(jù)通信的基礎(chǔ)。設(shè)計(jì)HTTP最初的目的是為了提供一種發(fā)布和接收HTML頁(yè)面<網(wǎng)頁(yè)>的方法。
HTTP協(xié)議的制作者是蒂姆·伯納斯-李,他供職于CERN(歐洲核子研究組織)
- 1991年發(fā)布的0.9版,該版本極其簡(jiǎn)單,只有一個(gè)GET請(qǐng)求方法
- 1996年5月,HTTP/1.0版本發(fā)布
- 1997年1月,HTTP/1.1版本發(fā)布,目前使用就是HTTP/1.1版本
2.網(wǎng)絡(luò)傳輸-TCP/IP四層模型:
學(xué)過(guò)網(wǎng)絡(luò)的同學(xué)都應(yīng)該知道,在網(wǎng)絡(luò)傳輸是遵循OSI七層網(wǎng)絡(luò)傳輸模型(既:應(yīng)用層、表示層、會(huì)話層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層、物理層),通過(guò)七個(gè)層次化的結(jié)構(gòu)模型使不同的系統(tǒng)不同的網(wǎng)絡(luò)之間實(shí)現(xiàn)可靠的通訊。TCP/IP協(xié)議將七層網(wǎng)絡(luò)傳輸模型進(jìn)一步抽象程四層(既:應(yīng)用層、網(wǎng)絡(luò)層、傳輸層、數(shù)據(jù)鏈路層)。TCP/IP協(xié)議可以為各式各樣的應(yīng)用提供服務(wù)(所謂的?everything over IP),同時(shí),TCP/IP 協(xié)議也允許 IP 協(xié)議在各式各樣的網(wǎng)絡(luò)構(gòu)成的互聯(lián)網(wǎng)上運(yùn)行(所謂的?IP over everything)。
?
?
?3.HTTP協(xié)議的工作模式:
HTTP協(xié)議的工作模式是一次請(qǐng)求(request)和一次響應(yīng)(response)的模式
HTTP默認(rèn)端口:80
HTTPS默認(rèn)端口:443
三、開(kāi)發(fā)者工具看HTTP協(xié)議通信過(guò)程:
1.使用chrome瀏覽器開(kāi)發(fā)者工具查看HTTP協(xié)議的通信過(guò)程:
windows和Linux平臺(tái)按F12調(diào)出開(kāi)發(fā)者工具, MAC選擇 視圖 -> 開(kāi)發(fā)者工具。
在 web 應(yīng)用中, 服務(wù)器把網(wǎng)頁(yè)傳給瀏覽器, 實(shí)際就是把網(wǎng)頁(yè)的 HTML 代碼發(fā)送給瀏覽器, 瀏覽器解析顯示出來(lái). 而瀏覽器和服務(wù)器之間的傳輸應(yīng)用層協(xié)議就是 HTTP. 所以:
- HTML 是一種用來(lái)定義網(wǎng)頁(yè)的文本, 會(huì) HTML 就可以編寫網(wǎng)頁(yè).
- HTTP 是用來(lái)在網(wǎng)絡(luò)上傳輸 HTML 文本的協(xié)議, 用于瀏覽器和服務(wù)器的通信.
Chrome 瀏覽器提供了一套完成的開(kāi)發(fā)者工具, 很適合 web 開(kāi)發(fā)者.?
- 元素(Elements):用于查看或修改HTML元素的屬性、CSS屬性、監(jiān)聽(tīng)事件、斷點(diǎn)等.
- 控制臺(tái)(Console):控制臺(tái)一般用于執(zhí)行一次性代碼, 查看JavaScript對(duì)象, 查看調(diào)試日志信息或異常信息.
- 源代碼(Sources):該頁(yè)面用于查看頁(yè)面的HTML文件源代碼、JavaScript源代碼、CSS源代碼, 此外最重要的是可以調(diào)試JavaScript源代碼, 可以給JS代碼添加斷點(diǎn)等.
- 網(wǎng)絡(luò)(Network):網(wǎng)絡(luò)頁(yè)面主要用于查看 header 等與網(wǎng)絡(luò)連接相關(guān)的信息.
注意: Network 中的每一項(xiàng)就是一次請(qǐng)求/響應(yīng)過(guò)程, 點(diǎn)擊每一項(xiàng), 可查看本次請(qǐng)求響應(yīng)的報(bào)文信息.
?
四、HTTP請(qǐng)求報(bào)文格式:
終于到了重點(diǎn)了,請(qǐng)謹(jǐn)慎的往下看,雖然我解釋的不一定好,但這是我的理解:
1.GET報(bào)文請(qǐng)求,以訪問(wèn)百度首頁(yè)為例:
Request Hearders:? # 請(qǐng)求頭
GET / HTTP/1.1? ? ? ? # 請(qǐng)求行,分為三部分
#? GET:請(qǐng)求方法(獲取服務(wù)器的數(shù)據(jù)), POST: 請(qǐng)求方法(可以給服務(wù)器上傳數(shù)據(jù)), HEAD: 請(qǐng)求方法(獲取服務(wù)器響應(yīng)頭相關(guān)信息),一共有5中方法。
# / :請(qǐng)求資源路徑
# HTTP/1.1:http協(xié)議版本
========以下為請(qǐng)求頭========
Host: www.baidu.com? ? ? #?服務(wù)器ip地址,端口號(hào)不顯示,默認(rèn)使用:80(重要)
Connection: keep-alive? ? ?# 連接方式:長(zhǎng)連接
Upgrade-Insecure-Requests: 1? ? ?#?支持http方式的請(qǐng)求,認(rèn)為是安全的請(qǐng)求,不會(huì)有警告
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36? ? ? ?# 用戶的代理情況:操作系統(tǒng)信息,瀏覽器內(nèi)核信息,瀏覽器信息
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
? ? ? #?接收數(shù)據(jù)的類型, 客戶端告訴服務(wù)端接收數(shù)據(jù)的類型
Accept-Encoding: gzip, deflate, br? ? ? ?#?客戶端告訴服務(wù)端支持的壓縮格式算法
Accept-Language: zh-CN,zh;q=0.9? ? ? # 客戶端告訴服務(wù)端支持的語(yǔ)言
# Cookie:客戶端用戶身份的一個(gè)表示?#
Cookie:BAIDUID=EFAE1950C757E609F809C76EBC765ED8:FG=1;BIDUPSID=EFAE1950C757E609F809C76EBC765ED8; PSTM=1532771717; BD_UPN=12314753; MCITY=-131%3A; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BDUSS=lZ6NGZWE9zWUcwN3AybnlFS041a1FtUC15WFBJLUZVUGxwZXl2LUx2aGlEN2RiQUFBQUFBJCQAAAAAAAAAAAEAAACBh61nzqiwrknJ2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGKCj1tigo9be; BDSFRCVID=U-_sJeCCxG37swQ7u0y3evQv1hfpzuq1UpSA3J; H_BDCLCKID_SF=JJkO_D_atKvjDbTnMITHh-F-5fIX5-RLfaILM-OF5lOTJh0Rjnbb0j-0DhueKR5IbJ630tJLb4DaStJbLjbke4tX-NFeJ68ftU5;sugstore=1;delPer=0; BD_CK_SAM=1; PSINO=1;pgv_pvi=3362845696;pgv_si=s1199883264;BDRCVFR[dG2JNJb_ajR]=mk3SLVN4HKm;BDRCVFR[X_XKQks0S63]=mk3SLVN4HKm;BD_HOME=1;BDRCVFR[feWj1Vr5u3D]=I67x6TjHwwYf0; H_PS_645EC=9aa6EdB28ccCWuFn5qMNPpyyoXGtfrK3kEqqogJ%2BOzW6e1WkRaXVXgj0t8TjO1teEri2;H_PS_PSSID=1451_26909_21119_27113
2.POST報(bào)文請(qǐng)求:
----------------------------請(qǐng)求行(狀態(tài)行)--------------------
POST /xmweb?host=mail.itcast.cn&_t=1536205417217 HTTP/1.1??
-----------------------------請(qǐng)求頭-----------------------------------
 Host: mail.itcast.cn
 Connection: keep-alive
 Content-Length: 243
 Upgrade-Insecure-Requests: 1
 Content-Type: application/x-www-form-urlencoded
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
------------------------------\r\n空行-------------------------------------
------------------------------請(qǐng)求體-------------------------------------
#請(qǐng)求體(客戶端給服務(wù)器發(fā)送的數(shù)據(jù)), 只有post請(qǐng)求才可能有請(qǐng)求體,get請(qǐng)求一定沒(méi)有請(qǐng)求體
form data
 chr=gb&func=login&isp_domain=&verifycookie=&verifyip=&buttonType=1&usr=guohaibin&domain=itcast.cn&domainType=wm&encode=on&username=guohaibin&pass=%241031%3B%241171%3B%241111%3B%241161%3B%241051%3B%241101%3B%241031%3B%24491%3B%24501%3B%24511%3B
?
3.小結(jié):
HTTP請(qǐng)求報(bào)文可以分為GET請(qǐng)求和POST請(qǐng)求報(bào)文,要注意的是GET請(qǐng)求沒(méi)有請(qǐng)求體,POST請(qǐng)求有請(qǐng)求體信息
?五、HTTP響應(yīng)報(bào)文格式:
1.響應(yīng)請(qǐng)求,以訪問(wèn)百度首頁(yè)為例:
----------響應(yīng)行(狀態(tài)行)--------------
HTTP/1.1 200 OK? ? ? # 協(xié)議版本、狀態(tài)碼、狀態(tài)描述
-----------------響應(yīng)頭------------------------
Cache-Control: private? ? # 緩存控制
Connection: Keep-Alive? ? # 連接方式:長(zhǎng)連接
Content-Encoding: gzip? ? ?# 內(nèi)容壓縮格式
Content-Type: text/html;charset=utf-8? ? ? # 服務(wù)器告訴客戶端瀏覽器數(shù)據(jù)類型及編碼格式
Date: Mon, 10 Sep 2018 07:56:57 GMT? ? # 服務(wù)器時(shí)間
Expires: Mon, 10 Sep 2018 07:56:57 GMT? ? ?# 連接有效時(shí)間
Server: BWS/1.1? ? ?# 服務(wù)器版本
X-Ua-Compatible: IE=Edge,chrome=1? ? ?#?服務(wù)器程序程序員自己設(shè)置的響應(yīng)頭信息
Transfer-Encoding: chunked? ?#? 表示服務(wù)器發(fā)送給客戶端的數(shù)據(jù)大小不確定,如果發(fā)送數(shù)據(jù)完成會(huì)有一個(gè)特殊的標(biāo)識(shí)數(shù)據(jù)\0\r\n , Content-Length: 100 明確告訴客戶端發(fā)送數(shù)據(jù)的長(zhǎng)度, 兩者會(huì)有其一
?--------空行(\r\n)--------------
?--------響應(yīng)體(查看響應(yīng)體數(shù)據(jù)選擇response選項(xiàng)卡)--------------------------
 比如: 服務(wù)端真正發(fā)送給客戶端的數(shù)據(jù)信息: html數(shù)據(jù)
2 補(bǔ)充:常見(jiàn)的狀態(tài)碼:
200:OK,相應(yīng)正常
302 redirect, 我們通過(guò) 302 狀態(tài)碼可以指示瀏覽器跳轉(zhuǎn)到某一個(gè) URL.?
404 NOT FOUND, 我們?cè)L問(wèn)一個(gè)了不存在的 URL?
500 Internal Server Error, 服務(wù)器遇到了一個(gè)未曾預(yù)料的狀況,?一般來(lái)說(shuō), 這個(gè)問(wèn)題都會(huì)在服務(wù)器端的源代碼出現(xiàn)錯(cuò)誤時(shí)出現(xiàn)
3.小結(jié):
HTTP協(xié)議響應(yīng)報(bào)文分為4部分,每部分之間使用\r\n進(jìn)行分割
七、長(zhǎng)連接和短鏈接:
在HTTP/1.0中, 默認(rèn)使用的是短連接.也就是說(shuō), 瀏覽器和服務(wù)器每進(jìn)行一次HTTP操作, 就建立一次連接, 但任務(wù)結(jié)束就中斷連接.如果客戶端瀏覽器訪問(wèn)的某個(gè)HTML或其他類型的 Web 頁(yè)中包含有其他的Web資源,如js文件、圖像文件、CSS文件等;當(dāng)瀏覽器每遇到這樣一個(gè)Web資源,就會(huì)建立一個(gè)HTTP會(huì)話。
但從 HTTP/1.1起,默認(rèn)使用長(zhǎng)連接,用以保持連接特性。使用長(zhǎng)連接的HTTP協(xié)議,會(huì)在響應(yīng)頭有加入這行代碼:
Connection:keep-alive在真正的讀寫操作之前,server與client之間必須建立一個(gè)連接,
當(dāng)讀寫操作完成后,雙方不再需要這個(gè)連接時(shí)它們可以釋放這個(gè)連接,
連接的建立通過(guò)三次握手,釋放則需要四次握手,
所以說(shuō)每個(gè)連接的建立都是需要資源消耗和時(shí)間消耗的。
1.TCP短鏈接:
1.1連接過(guò)程:
從上面的描述看,短連接一般只會(huì)在 client/server 間傳遞一次讀寫操作!
2. TCP長(zhǎng)連接:
2.1 連接過(guò)程:
3. TCP長(zhǎng)/短連接的優(yōu)缺點(diǎn):
-  長(zhǎng)連接可以省去較多的TCP建立和關(guān)閉的操作,節(jié)約時(shí)間。但是如果用戶量太大容易造成服務(wù)器負(fù)載過(guò)高最終導(dǎo)致服務(wù)不可用 
-  短連接對(duì)于服務(wù)器來(lái)說(shuō)實(shí)現(xiàn)起來(lái)較為簡(jiǎn)單,存在的連接都是有用的連接,不需要額外的控制手段。但是如果用戶訪問(wèn)量很大, 往往可能在很短時(shí)間內(nèi)需要?jiǎng)?chuàng)建大量的連接,造成服務(wù)器響應(yīng)速度過(guò)慢 
4.小結(jié):
- 長(zhǎng)連接: 連接建立成功后,可以發(fā)送多次請(qǐng)求和響應(yīng),等雙方不進(jìn)行通信的時(shí)候,服務(wù)端做好斷開(kāi)連接的操作
- 短連接: 連接建立成功后,一次請(qǐng)求和響應(yīng)完成以后連接就會(huì)斷開(kāi),每次發(fā)送請(qǐng)求需要先建立好連接
- 長(zhǎng)連接減少了用戶的等待時(shí)間,提升了訪問(wèn)速度,但是增加了服務(wù)端的資源開(kāi)銷
- 短連接不會(huì)占用服務(wù)端過(guò)多的資源,但是增加了用戶的等待時(shí)間,減慢了訪問(wèn)速速
總結(jié)
以上是生活随笔為你收集整理的九、python学习之HTTP协议的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: LaTeX中文、英文字体属性设置
- 下一篇: html5数字色板,推荐10款色板源码(
