九、python学习之HTTP协议
今天學習了HTTP協議,說實話,我并不想做今天的學習筆記,雖然學習的東西不多,但是對于HTTP協議要是往深層去說,所有的名詞和用法都解釋出來,寫他個5篇都算是少的。但是,既然是學習筆記,還是本著總結今天學習內容的目的,回顧一下今天的學習內容,當然,我也從網上找了一些其他大佬或者組織機構做的一些關于HTTP協議的相關的只是:
博客園:http://www.cnblogs.com/ranyonsue/p/5984001.html
菜鳥教程:http://www.runoob.com/http/http-tutorial.html
w3school的http方法:http://www.w3school.com.cn/tags/html_ref_httpmethods.asp?
廖雪峰官方網站:
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432011939547478fd5482deb47b08716557cc99764e0000
好了,以上的幾篇文章算是對今天內容的一部分補充,當然,如果要徹底弄明白什么是HTTP(超文本傳輸)協議,仍然是一個較大的工程。?
現在開始對今天學習內容進行進行一個總結:
一、瀏覽器訪問服務器的過程:
1.瀏覽器向服務器發起請求的一般過程:
實現過程:
<1>瀏覽器接受用戶輸入的網址,按下"回車"?
<2>瀏覽器區分用戶輸入的是ip地址還是域名;如果是域名,瀏覽器想DNS服務器發起請求,獲得與該域名對應的IP地址
<3>瀏覽器根據ip地址和端口(HTTP服務默認端口是80)向服務器程序發起連接請求
<4>客戶端(瀏覽器)與服務建立連接后,客戶端向服務器發起數據請求
<5>服務器程序拿到數據請求后,根據需求獲取資源
<6>服務器程序再將資源發送回瀏覽器,完成本次數據請求操作
2.名詞解釋:
網址:網址又稱URL(Uniform Resoure Locator)統一資源定位符:主要有三部分組成:協議頭:http://;域名:www.xxx.com和資源路徑
域名:我們在訪問一臺服務器的時候, 需要記住該服務器的IP地址, 由于IP地址不利于人們記憶, 所以推出的域名技術. 域名是由一串用點分隔的名字組成的 Internet 上某一臺計算機或計算機組的名稱, 用于在數據傳輸時標識計算機的位置
DNS(域名解析服務器):萬維網上作為域名和ip地址相互映射的一個分布式數據庫,能夠使用戶更方便的訪問互聯網,而不用去記住能夠被機器直接讀取的IP數串。DNS協議運行在UDP協議之上,使用端口號53
二、HTTP協議:
1.HTTP協議簡介:
HTTP協議就是超文本傳輸協議(HyperText Transfer Protocol),通俗理解是瀏覽器和web服務器傳輸數據格式的協議,HTTP協議是一個應用層協議。
HTTP協議是基于TCP協議的,發送數據之前需要建立好連接
HTTP是萬維網的數據通信的基礎。設計HTTP最初的目的是為了提供一種發布和接收HTML頁面<網頁>的方法。
HTTP協議的制作者是蒂姆·伯納斯-李,他供職于CERN(歐洲核子研究組織)
- 1991年發布的0.9版,該版本極其簡單,只有一個GET請求方法
- 1996年5月,HTTP/1.0版本發布
- 1997年1月,HTTP/1.1版本發布,目前使用就是HTTP/1.1版本
2.網絡傳輸-TCP/IP四層模型:
學過網絡的同學都應該知道,在網絡傳輸是遵循OSI七層網絡傳輸模型(既:應用層、表示層、會話層、傳輸層、網絡層、數據鏈路層、物理層),通過七個層次化的結構模型使不同的系統不同的網絡之間實現可靠的通訊。TCP/IP協議將七層網絡傳輸模型進一步抽象程四層(既:應用層、網絡層、傳輸層、數據鏈路層)。TCP/IP協議可以為各式各樣的應用提供服務(所謂的?everything over IP),同時,TCP/IP 協議也允許 IP 協議在各式各樣的網絡構成的互聯網上運行(所謂的?IP over everything)。
?
?
?3.HTTP協議的工作模式:
HTTP協議的工作模式是一次請求(request)和一次響應(response)的模式
HTTP默認端口:80
HTTPS默認端口:443
三、開發者工具看HTTP協議通信過程:
1.使用chrome瀏覽器開發者工具查看HTTP協議的通信過程:
windows和Linux平臺按F12調出開發者工具, MAC選擇 視圖 -> 開發者工具。
在 web 應用中, 服務器把網頁傳給瀏覽器, 實際就是把網頁的 HTML 代碼發送給瀏覽器, 瀏覽器解析顯示出來. 而瀏覽器和服務器之間的傳輸應用層協議就是 HTTP. 所以:
- HTML 是一種用來定義網頁的文本, 會 HTML 就可以編寫網頁.
- HTTP 是用來在網絡上傳輸 HTML 文本的協議, 用于瀏覽器和服務器的通信.
Chrome 瀏覽器提供了一套完成的開發者工具, 很適合 web 開發者.?
- 元素(Elements):用于查看或修改HTML元素的屬性、CSS屬性、監聽事件、斷點等.
- 控制臺(Console):控制臺一般用于執行一次性代碼, 查看JavaScript對象, 查看調試日志信息或異常信息.
- 源代碼(Sources):該頁面用于查看頁面的HTML文件源代碼、JavaScript源代碼、CSS源代碼, 此外最重要的是可以調試JavaScript源代碼, 可以給JS代碼添加斷點等.
- 網絡(Network):網絡頁面主要用于查看 header 等與網絡連接相關的信息.
注意: Network 中的每一項就是一次請求/響應過程, 點擊每一項, 可查看本次請求響應的報文信息.
?
四、HTTP請求報文格式:
終于到了重點了,請謹慎的往下看,雖然我解釋的不一定好,但這是我的理解:
1.GET報文請求,以訪問百度首頁為例:
Request Hearders:? # 請求頭
GET / HTTP/1.1? ? ? ? # 請求行,分為三部分
#? GET:請求方法(獲取服務器的數據), POST: 請求方法(可以給服務器上傳數據), HEAD: 請求方法(獲取服務器響應頭相關信息),一共有5中方法。
# / :請求資源路徑
# HTTP/1.1:http協議版本
========以下為請求頭========
Host: www.baidu.com? ? ? #?服務器ip地址,端口號不顯示,默認使用:80(重要)
Connection: keep-alive? ? ?# 連接方式:長連接
Upgrade-Insecure-Requests: 1? ? ?#?支持http方式的請求,認為是安全的請求,不會有警告
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? ? ? ?# 用戶的代理情況:操作系統信息,瀏覽器內核信息,瀏覽器信息
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
? ? ? #?接收數據的類型, 客戶端告訴服務端接收數據的類型
Accept-Encoding: gzip, deflate, br? ? ? ?#?客戶端告訴服務端支持的壓縮格式算法
Accept-Language: zh-CN,zh;q=0.9? ? ? # 客戶端告訴服務端支持的語言
# Cookie:客戶端用戶身份的一個表示?#
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報文請求:
----------------------------請求行(狀態行)--------------------
POST /xmweb?host=mail.itcast.cn&_t=1536205417217 HTTP/1.1??
-----------------------------請求頭-----------------------------------
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空行-------------------------------------
------------------------------請求體-------------------------------------
#請求體(客戶端給服務器發送的數據), 只有post請求才可能有請求體,get請求一定沒有請求體
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.小結:
HTTP請求報文可以分為GET請求和POST請求報文,要注意的是GET請求沒有請求體,POST請求有請求體信息
?五、HTTP響應報文格式:
1.響應請求,以訪問百度首頁為例:
----------響應行(狀態行)--------------
HTTP/1.1 200 OK? ? ? # 協議版本、狀態碼、狀態描述
-----------------響應頭------------------------
Cache-Control: private? ? # 緩存控制
Connection: Keep-Alive? ? # 連接方式:長連接
Content-Encoding: gzip? ? ?# 內容壓縮格式
Content-Type: text/html;charset=utf-8? ? ? # 服務器告訴客戶端瀏覽器數據類型及編碼格式
Date: Mon, 10 Sep 2018 07:56:57 GMT? ? # 服務器時間
Expires: Mon, 10 Sep 2018 07:56:57 GMT? ? ?# 連接有效時間
Server: BWS/1.1? ? ?# 服務器版本
X-Ua-Compatible: IE=Edge,chrome=1? ? ?#?服務器程序程序員自己設置的響應頭信息
Transfer-Encoding: chunked? ?#? 表示服務器發送給客戶端的數據大小不確定,如果發送數據完成會有一個特殊的標識數據\0\r\n , Content-Length: 100 明確告訴客戶端發送數據的長度, 兩者會有其一
?--------空行(\r\n)--------------
?--------響應體(查看響應體數據選擇response選項卡)--------------------------
比如: 服務端真正發送給客戶端的數據信息: html數據
2 補充:常見的狀態碼:
200:OK,相應正常
302 redirect, 我們通過 302 狀態碼可以指示瀏覽器跳轉到某一個 URL.?
404 NOT FOUND, 我們訪問一個了不存在的 URL?
500 Internal Server Error, 服務器遇到了一個未曾預料的狀況,?一般來說, 這個問題都會在服務器端的源代碼出現錯誤時出現
3.小結:
HTTP協議響應報文分為4部分,每部分之間使用\r\n進行分割
七、長連接和短鏈接:
在HTTP/1.0中, 默認使用的是短連接.也就是說, 瀏覽器和服務器每進行一次HTTP操作, 就建立一次連接, 但任務結束就中斷連接.如果客戶端瀏覽器訪問的某個HTML或其他類型的 Web 頁中包含有其他的Web資源,如js文件、圖像文件、CSS文件等;當瀏覽器每遇到這樣一個Web資源,就會建立一個HTTP會話。
但從 HTTP/1.1起,默認使用長連接,用以保持連接特性。使用長連接的HTTP協議,會在響應頭有加入這行代碼:
Connection:keep-alive在真正的讀寫操作之前,server與client之間必須建立一個連接,
當讀寫操作完成后,雙方不再需要這個連接時它們可以釋放這個連接,
連接的建立通過三次握手,釋放則需要四次握手,
所以說每個連接的建立都是需要資源消耗和時間消耗的。
1.TCP短鏈接:
1.1連接過程:
從上面的描述看,短連接一般只會在 client/server 間傳遞一次讀寫操作!
2. TCP長連接:
2.1 連接過程:
3. TCP長/短連接的優缺點:
-
長連接可以省去較多的TCP建立和關閉的操作,節約時間。但是如果用戶量太大容易造成服務器負載過高最終導致服務不可用
-
短連接對于服務器來說實現起來較為簡單,存在的連接都是有用的連接,不需要額外的控制手段。但是如果用戶訪問量很大, 往往可能在很短時間內需要創建大量的連接,造成服務器響應速度過慢
4.小結:
- 長連接: 連接建立成功后,可以發送多次請求和響應,等雙方不進行通信的時候,服務端做好斷開連接的操作
- 短連接: 連接建立成功后,一次請求和響應完成以后連接就會斷開,每次發送請求需要先建立好連接
- 長連接減少了用戶的等待時間,提升了訪問速度,但是增加了服務端的資源開銷
- 短連接不會占用服務端過多的資源,但是增加了用戶的等待時間,減慢了訪問速速
總結
以上是生活随笔為你收集整理的九、python学习之HTTP协议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LaTeX中文、英文字体属性设置
- 下一篇: python求sinx近似值_c语言求s