Http協(xié)議的認(rèn)識HTPP協(xié)議的定義:全稱 Hyper text transfer protocol (超文本傳輸協(xié)議),主要作用是客戶端和服務(wù)器端的交互巷怜,實現(xiàn)從WWW將文本傳輸?shù)娇蛻舳诉M行渲染顯示闲询,就是我們常說的c/s涤浇,客戶端和服務(wù)器模式宙拉。而且是個問答模式笨触,只有客戶端發(fā)送請求了懦傍,服務(wù)器端才會響應(yīng)發(fā)送數(shù)據(jù),是單向的芦劣。而現(xiàn)在webservice可以實現(xiàn)服務(wù)器端主動向客戶端發(fā)送數(shù)據(jù)粗俱。
HTTP的兩大特點:
1.無連接:http在傳輸之前是需要建立tcp/ip連接的,我的理解就是建立一條通道虚吟,建立一條客戶端到服務(wù)端的通道寸认,然后http開始發(fā)送請求;之前的版本串慰,每一次http請求和響應(yīng)完成后偏塞,這條連接是自動關(guān)閉的,所以每一次請求都會頻繁的建立tcp/ip連接邦鲫,從http1.1版本后灸叼,在報頭里面有個connection來控制這條連接;當(dāng)connection:close時候庆捺,還是像以前一樣古今,響應(yīng)完后關(guān)閉;如果設(shè)置為connection:keep-alive滔以;都會在一定的時間內(nèi)捉腥,監(jiān)聽是否還有請求,沒有的話你画,則會去關(guān)閉它抵碟;這個時間是由timeout來控制的。
2.無狀態(tài):每一次http事務(wù)撬即,都是沒有聯(lián)系的立磁。就是說同一個客戶端這次請求和上次請求在服務(wù)端是分辨不出來的,所以采用了cookie和session來解決無狀態(tài)協(xié)議剥槐;用來識別同一個用戶唱歧;
如何理解HTTP是應(yīng)用層協(xié)議:換句話說就是軟件上的一種協(xié)議。
以下是ISO模型和TCP/IP模型的比較
我們所說的HTTP協(xié)議就是工作在頂層的協(xié)議,然后往下看颅崩,會到傳輸層几于,再到網(wǎng)絡(luò)層,也就是建立tcp/ip連接沿后;最后通過我們的實際鏈路進行傳輸交互沿彭;
這里在擴展一個知識點:TCP和UDP的區(qū)別
TCP是必須先請求服務(wù)器端,詢問我這由數(shù)據(jù)是否可以開始傳送尖滚,當(dāng)服務(wù)器端給出回復(fù)可以的話喉刘,就建立好了連接,然后客戶端開始發(fā)送請求數(shù)據(jù)了漆弄;
但是UDP是直接把數(shù)據(jù)發(fā)送過去睦裳,沒有征求你的同意,這樣的話由優(yōu)點也有缺點
1.首先服務(wù)器端可能暫時沒辦法接收和處理數(shù)據(jù)撼唾,你硬塞給它的話廉邑,肯定會造成數(shù)據(jù)的丟包,這就是最大的漏洞倒谷;
2.UDP減少了詢問的時間蛛蒙,當(dāng)然效率也就比較高了。
而我們通常都是用TCP渤愁,相對來說安全牵祟,不至于丟包,如果數(shù)據(jù)量小且不重要的倒是可以考慮UDP猴伶;個人見解课舍;
HTTP工作流程:
http的每一次過程都被稱為一個事務(wù),這個事務(wù)是沒有記憶能力的他挎。
第一步:根據(jù)URL上的域名,在本地host中查找ip與端口號捡需,若沒有办桨,則到DHCP中進行查找;
第二步:根據(jù)ip和端口站辉,訪問web服務(wù)器呢撞,請求建立連接,也就是TCP三次握手的第一步饰剥;
第三步:服務(wù)端接到請求做出反應(yīng)殊霞,回復(fù)可以開始傳輸數(shù)據(jù);TCP三次握手的第二步汰蓉;
第四步:就是http發(fā)送請求數(shù)據(jù)绷蹲,TCP三次握手的第三步;
第五步:服務(wù)器接受到http的請求數(shù)據(jù),則進行響應(yīng)祝钢,并返回一定的數(shù)據(jù)比规;
第六步:客戶端根據(jù)得到的數(shù)據(jù)繼續(xù)渲染顯示。
URL:uniform resource locator 統(tǒng)一資源定位符拦英,其實就是描述資源的位置蜒什,好讓我們通過http協(xié)議去獲取到。
例子:http://www.baidu.com/admin/in...疤估?name=maoxiaohai#
第一個:http 說明采用的是http協(xié)議灾常;
第二個:www.baidu.com 會到域池里面也就是DHCP去獲取到對應(yīng)的ip和端口,http的默認(rèn)端口是80铃拇,https是采用了ssl的岗憋,默認(rèn)端口是443
第三個就是 admin/ 就是文件夾路徑
第四個:index.php就是我們訪問的文件
第五個:?后面的name=maoxiaohai就是我們攜帶過去的參數(shù)
第六個:#是個錨,具體是什么沒去研究锚贱。民間高手可以留言下仔戈,互相請教;
接下來就是關(guān)于http請求和響應(yīng)的格式了拧廊。
1.請求:請求行监徘,請求報頭,請求數(shù)據(jù)
如上圖所示:
第一部分:請求行吧碾,包括請求方式凰盔,ur資源路徑,協(xié)議版本號倦春。
第二部分:開始就是報頭户敬,由報頭名: 報頭名 格式構(gòu)成;
第三部分:就是請求數(shù)據(jù)睁本;
請求方式主要有 get post 的方式尿庐。其他的比如head put delete之類的自行百度,我也不知道具體應(yīng)用在哪里呢堰,有大神會的可以給我留言抄瑟。
最難的理解就是在報頭那,其實報頭也就是相當(dāng)傳輸了一些數(shù)據(jù)到服務(wù)器端枉疼;我們可以通過$_server 來獲取這些報頭信息皮假,比如可以看瀏覽器信息,請求的主機名等
1.Host:就是我們請求的主機名骂维,域名惹资;
2.Connection:控制tcp/ip的連接關(guān)閉
3.Cach-Controll:緩存控制,其實就是控制緩存是否存儲到客戶端航闺;
4.User-Agent:用戶代理褪测,就是描述了瀏覽器的一些配置信息和系統(tǒng)配置信息,主要用處在服務(wù)器可以根據(jù)一定的規(guī)則判斷是手機訪問還是PC端。
5.Accept:接收什么樣的格式文件汰扭,通常都是text/html之類的文件
6.Accept-Encoding:可以接收的壓縮格式稠肘,大家也知道文件壓縮后傳輸速度快好多,http傳輸時候會先壓縮萝毛,然后傳輸過來项阴,再解壓縮。這個就是給服務(wù)器說我可以接收哪些格式的壓縮文件笆包,然后你可以用這個格式傳輸過來环揽。
7.Accept-Language:接受的語言編碼
8.Cookie:傳送cookie過去。
2.響應(yīng):狀態(tài)行庵佣,響應(yīng)報頭歉胶,響應(yīng)數(shù)據(jù)
前面幾個是百度的自定義報頭文件。
Content-Type:返回的內(nèi)容的類型和編碼格式
Expires:緩存的過期時間
Server:web服務(wù)器信息
Set-Cookie:設(shè)置cookie
Transfer-Encoding:分塊傳輸
等更多的定義自行百度巴粪。
著作權(quán)歸作者所有通今。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處肛根”杷互聯(lián)網(wǎng)+時代,時刻要保持學(xué)習(xí)派哲。