HTTP協議簡單認識

Http協議的認識HTPP協議的定義:全稱 Hyper text transfer protocol (超文本傳輸協議),主要作用是客戶端和服務器端的交互,實現從WWW將文本傳輸到客戶端進行渲染顯示,就是我們常說的c/s,客戶端和服務器模式。而且是個問答模式,只有客戶端發送請求了,服務器端纔會響應發送數據,是單向的。而現在webservice可以實現服務器端主動向客戶端發送數據。

HTTP的兩大特點:

1.無連接:http在傳輸之前是需要建立tcp/ip連接的,我的理解就是建立一條通道,建立一條客戶端到服務端的通道,然後http開始發送請求;之前的版本,每一次http請求和響應完成後,這條連接是自動關閉的,所以每一次請求都會頻繁的建立tcp/ip連接,從http1.1版本後,在報頭裏面有個connection來控制這條連接;當connection:close時候,還是像以前一樣,響應完後關閉;如果設置爲connection:keep-alive;都會在一定的時間內,監聽是否還有請求,沒有的話,則會去關閉它;這個時間是由timeout來控制的。

2.無狀態:每一次http事務,都是沒有聯繫的。就是說同一個客戶端這次請求和上次請求在服務端是分辨不出來的,所以採用了cookie和session來解決無狀態協議;用來識別同一個用戶;

如何理解HTTP是應用層協議:換句話說就是軟件上的一種協議。

以下是ISO模型和TCP/IP模型的比較

我們所說的HTTP協議就是工作在頂層的協議,然後往下看,會到傳輸層,再到網絡層,也就是建立tcp/ip連接;最後通過我們的實際鏈路進行傳輸交互;

這裏在擴展一個知識點:TCP和UDP的區別

TCP是必須先請求服務器端,詢問我這由數據是否可以開始傳送,當服務器端給出回覆可以的話,就建立好了連接,然後客戶端開始發送請求數據了;

但是UDP是直接把數據發送過去,沒有徵求你的同意,這樣的話由優點也有缺點

1.首先服務器端可能暫時沒辦法接收和處理數據,你硬塞給它的話,肯定會造成數據的丟包,這就是最大的漏洞;

2.UDP減少了詢問的時間,當然效率也就比較高了。

而我們通常都是用TCP,相對來說安全,不至於丟包,如果數據量小且不重要的倒是可以考慮UDP;個人見解;

HTTP工作流程:

http的每一次過程都被稱爲一個事務,這個事務是沒有記憶能力的。

第一步:根據URL上的域名,在本地host中查找ip與端口號,若沒有,則到DHCP中進行查找;

第二步:根據ip和端口,訪問web服務器,請求建立連接,也就是TCP三次握手的第一步;

第三步:服務端接到請求做出反應,回覆可以開始傳輸數據;TCP三次握手的第二步;

第四步:就是http發送請求數據,TCP三次握手的第三步;

第五步:服務器接受到http的請求數據,則進行響應,並返回一定的數據;

第六步:客戶端根據得到的數據繼續渲染顯示。

URL:uniform resource locator 統一資源定位符,其實就是描述資源的位置,好讓我們通過http協議去獲取到。

例子:http://www.baidu.com/admin/in...?name=maoxiaohai#

第一個:http 說明採用的是http協議;

第二個:www.baidu.com 會到域池裏面也就是DHCP去獲取到對應的ip和端口,http的默認端口是80,https是採用了ssl的,默認端口是443

第三個就是 admin/ 就是文件夾路徑

第四個:index.php就是我們訪問的文件

第五個:?後面的name=maoxiaohai就是我們攜帶過去的參數

第六個:#是個錨,具體是什麼沒去研究。民間高手可以留言下,互相請教;

接下來就是關於http請求和響應的格式了。

1.請求:請求行,請求報頭,請求數據

如上圖所示:

第一部分:請求行,包括請求方式,ur資源路徑,協議版本號。

第二部分:開始就是報頭,由報頭名: 報頭名 格式構成;

第三部分:就是請求數據;

請求方式主要有 get post 的方式。其他的比如head put delete之類的自行百度,我也不知道具體應用在哪裏,有大神會的可以給我留言。

最難的理解就是在報頭那,其實報頭也就是相當傳輸了一些數據到服務器端;我們可以通過$_server 來獲取這些報頭信息,比如可以看瀏覽器信息,請求的主機名等

1.Host:就是我們請求的主機名,域名;

2.Connection:控制tcp/ip的連接關閉

3.Cach-Controll:緩存控制,其實就是控制緩存是否存儲到客戶端;

4.User-Agent:用戶代理,就是描述了瀏覽器的一些配置信息和系統配置信息,主要用處在服務器可以根據一定的規則判斷是手機訪問還是PC端。

5.Accept:接收什麼樣的格式文件,通常都是text/html之類的文件

6.Accept-Encoding:可以接收的壓縮格式,大家也知道文件壓縮後傳輸速度快好多,http傳輸時候會先壓縮,然後傳輸過來,再解壓縮。這個就是給服務器說我可以接收哪些格式的壓縮文件,然後你可以用這個格式傳輸過來。

7.Accept-Language:接受的語言編碼

8.Cookie:傳送cookie過去。

2.響應:狀態行,響應報頭,響應數據

前面幾個是百度的自定義報頭文件。

Content-Type:返回的內容的類型和編碼格式

Expires:緩存的過期時間

Server:web服務器信息

Set-Cookie:設置cookie

Transfer-Encoding:分塊傳輸

等更多的定義自行百度。

著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。互聯網+時代,時刻要保持學習,攜手千鋒PHP,Dream It Possible。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章