總結HTTP中常見的一些名詞
最近讀了《圖解HTTP》,這本書裡面用淺顯易懂的語言介紹了HTTP協議的相關知識,並採用大量圖解的方式使讀者得到更好的理解,很適合作為Web選手入門學習的一本書籍。
這篇部落格對與HTTP相關的一些常見名詞做一下總結,以後做CTF題時經常會見到這些名詞,熟悉了它們,會對我們做題有很大幫助。
筆者水平有限,有些內容無法寫全,以後會慢慢補全,或者有寫的不對的地方,歡迎指正。
一、瞭解Web及網路基礎
1、Web
全球資訊網(World Wide Web)的簡稱,是一種基於超文字和HTTP的、全球性的、動態互動的、跨平臺的分散式圖形資訊系統。
2、協議
協議,網路協議的簡稱,網路協議是通訊計算機雙方必須共同遵從的一組約定。
計算機與網路裝置要相互通訊,雙方就必須基於相同的方法。比如,如何探測到通訊目標,由哪一邊先發起通訊,使用哪種語言進行通訊,怎樣結束通訊等規則都需要事先確定。
不同的硬體、作業系統之間的通訊,所有這一切都需要一種規則。而我們就把這種規則稱為協議(protocol)。
3、HTTP
超文字傳輸協議(HyperText Transfer Protocol),顧名思義,該協議的功能即為客戶端與伺服器之間的文字傳輸。
Web使用HTTP協議作為規範,完成客戶端與伺服器端等一系列運作流程。
4、TCP/IP協議族
TCP/IP(Transmission Control Protocol/Internet Protocol,傳輸控制協議/網際協議)是指能夠在多個不同網路間實現資訊傳輸的協議族。
協議中存在各式各樣的內容。從電纜的規格到IP地址的選定方法、尋找異地使用者的方法、雙方建立通訊的順序,以及Web頁面顯示需要處理的步驟,等等。
像這樣把與網際網路相關聯的協議集合起來總稱為TCP/IP協議族。
IP(Internet Protocol),網際協議,位於網路層。IP協議的作用是把各種資料包傳送給對方。
TCP/IP協議族中的IP指的就是網際協議,這裡的IP協議和IP地址是不同的概念。
IP地址指明瞭節點被分配到的地址,MAC地址是指電腦網路卡所屬的固定地址。IP地址可以和MAC地址進行配對。IP地址可變換,但是MAC地址在網路卡出廠的那一刻起基本上不會改變。
TCP(Transmission Control Protocol),傳輸控制協議。是一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議。
所謂的位元組流是指,為了方便傳輸,將大塊資料分割成以報文段為單位的資料包進行管理。
TCP協議的作用就是把資料分割成容易傳送的資料包,並確保資料最終能夠傳送給對方。
5、三次握手
為了準確無誤的將資料送達目標處,TCP協議採用了三次握手策略。
用TCP協議將資料包傳送出去後,TCP不會對傳送後的情況置之不理,它一定會向對方確認是否成功送達。
傳送端首先傳送一個帶SYN(synchronize)標誌的資料包給對方。接收端收到後,回傳一個帶有SYN/ACK標誌的資料包以傳達確認資訊。最後,傳送端再回傳一個帶ACK(acknowledgement)標誌的資料包,代表握手結束。
6、DNS
域名系統(Domain Name System,縮寫:DNS)是網際網路的一項服務。它作為將域名和IP地址相互對映的一個分散式資料庫,能夠使人更方便地訪問網際網路。
DNS服務位於應用層,它提供域名到IP地址之間的解析服務。
計算機可以被賦予IP地址,也可以被賦予主機名和域名。比如www.baidu.com。
使用者通常使用主機名或域名來訪問對方的計算機,而不是直接通過IP地址來訪問,因為域名比純數字組成的IP地址更方便記憶。
7、URI與URL
統一資源識別符號URI(Uniform Resource Identifier)是一個用於標識某一網際網路資源名稱的字串。
與URI相比,我們更熟悉URL(Uniform Resource Locator,統一資源定位符)。URL正是我們使用Web瀏覽器等訪問Web頁面時需要輸入的網頁地址。比如www.baidu.com
URL是URI的子集。對於網際網路上的資源,我們對其進行標識的方法(URI)有很多種,比如編號、定位等。而URL通過該資源的地址對其進行標識的。
二、簡單的HTTP協議
1、客戶端與伺服器端
請求訪問文字或影像等資源的一端稱為客戶端,而提供資源響應的一端稱為伺服器端。
在兩臺計算機之間使用HTTP協議通訊時,在一條通訊線路上必定有一端是客戶端,另一端則是伺服器端。
有時候客戶端和伺服器端的角色是可以互換的。HTTP協議可以區分哪端是客戶端,哪端是伺服器端。
2、GET與POST方法
GET方法用來請求訪問已被URI識別的資源。
POST方法用來向指定的資源提交要被處理的資料。
3、Keep-Alive
使用HTTP持久連線(Keep-Alive)的方法可以使客戶端與伺服器端之間保持連線,只要任意一端沒有提出斷開連線,則保持TCP連線狀態,這樣就不需要進行大量的握手操作了。
4、Session
Session(會話)在計算機中,尤其是在網路應用中,稱為“會話控制”。Session物件儲存特定使用者會話所需的屬性及配置資訊。
當使用者請求來自應用程式的 Web頁時,如果該使用者還沒有會話,則Web伺服器將自動建立一個 Session物件。當會話過期或被放棄後,伺服器將終止該會話。
5、Cookie
HTTP是一種無狀態協議。HTTP協議自身不對請求和響應之間的通訊狀態進行儲存。
當我們逛淘寶時,經常需要挑選不同的商品,這樣就要不停的進行頁面跳轉,而HTTP協議並不能儲存我們的登入資訊,那麼我們每次跳轉到新頁面都要重新登入,於是我們引入了Cookie技術。
客戶端傳送登入資訊給伺服器端後,伺服器端會在響應報文中生成一個叫做Set-cookie的首部欄位資訊併傳送給客戶端。當客戶端傳送跳轉頁面的請求時,將cookie加入請求報文中,伺服器端就能辨認出“你是剛剛登入的那個傢伙”。
三、HTTP報文資訊
1、HTTP報文
用於HTTP協議互動的資訊被稱為HTTP報文。客戶端的HTTP報文稱為請求報文,伺服器端的HTTP報文稱為稱為響應報文。
HTTP報文大致可分為報文首部和報文主體兩部分,中間由一個空行隔開。
2、HTTP報文首部
請求報文和響應報文的首部內容由請求行、狀態行、首部欄位三部分組成。
請求行包含用於請求的方法和HTTP版本。如:GET/HTTP/1.1
狀態行包含表明響應結果的狀態碼,原因短語和HTTP版本。
首部欄位包含請求和響應各種條件和屬性的各類首部。
3、報文首部欄位
首部欄位是由首部欄位名和欄位值構成的,中間用冒號分隔開。
因為我們抓包的時候看見的都是這些欄位,所以我們要熟悉常見的一些欄位代表的資訊,我們經常能在這些資訊裡找到解題的突破口。
0x01、Cache-Control
通過指定首部欄位Cache-Control的指令,就能操作快取的工作機制。
指令的引數是可選的,多個指令之間用逗號隔開。
Cache-Control: private , max-age=0 , no-cache
private表示僅向特定使用者返回響應。(可省略)
max-age=0表示響應的最大Age值。(必需)
no-cache表示快取前先確認其有效性。(可省略)
相關的指令有很多,這裡不一一列舉,大家可以自行百度。
0x02、Connection
Connection首部欄位有兩個作用:
1、控制不再轉發給代理的首部欄位
2、管理持久連線
Connetion: Keep-Alive
比如我們之前提到的Keep-Alive,保持持久連線就是由Connection發出的指令。
0x03、Date
Date首部欄位表明建立報文的時間。
Date: Tue , 03 Jul 2012 04:40:59 GMT
0x04、Pragma
該首部欄位只用在請求報文中,客戶端會要求所有的中間伺服器不返回快取的資源。
Pragma: no-cache
0x05、Transfer-Encoding
該欄位規定了傳輸報文主體時採用的編碼方式。
分塊傳輸編碼。
Transfer-encoding : chunked
0x06、Accept
該欄位可通知伺服器,使用者代理能夠處理的媒體型別及優先順序。
如Accept-Charset 字符集;Accept-Encoding 內容編碼;Accept-Language 語言……
0x07、Authorization
該欄位用來告知伺服器使用者代理的認證資訊(證書值)。
0x08、Host
該欄位用來告知伺服器,請求的資源所處的網際網路主機名(域名)和埠號(可省略)。
Host : www.baidu.com
0x09、Referer
該欄位會告知伺服器請求的原始資源的URI。
0x0A、Set-Cookie
當伺服器準備開始管理客戶端的狀態時,會事先告知各種資訊。
Set-Cookie: status=enable; expires=Tue,05 Jul 2011 07:26:31 GMT;path=/; domain=.hackr.jp
0x0B、Content-Encoding
該欄位會告知客戶端伺服器對實體的主體部分選用的內容編碼方式。內容編碼即在不丟失實體資訊的前提下所進行的壓縮。
主要的內容編碼方式包括以下4種:gzip、compress、deflate、identity。
0x0C、X-Forwarded-For
X-Forwarded-For(XFF)是用來識別通過HTTP代理或負載均衡方式連線到Web伺服器的客戶端最原始的IP地址的HTTP請求頭欄位。
在CTF題中我們經常用XFF來偽造客戶端IP地址,來繞過伺服器的IP地址過濾。
當然,還有很多首部欄位,這裡就不一一列舉了。
四、返回結果的HTTP狀態碼
1、各種狀態碼及其對應資訊
狀態碼 | 類別 | 原因短語 |
---|---|---|
1xx | 資訊性狀態碼 | 接受的請求正在處理 |
2xx | 成功狀態碼 | 請求正常處理完畢 |
3xx | 重定向狀態碼 | 需要附加操作以完成請求 |
4xx | 客戶端錯誤狀態碼 | 伺服器無法處理請求 |
5xx | 伺服器端錯誤狀態碼 | 伺服器處理請求出錯 |
例如我們常見的404 Not Found ,該狀態碼錶明伺服器上無法找到請求的資源。
當我們抓包發現響應報文中出現302的狀態碼時,要知道這是一個暫時性重定向狀態碼,瀏覽器會自動重定向到指定的頁面,而此頁面並不是我們想要的含有Flag的頁面。這時,我們需要新增一些指令來使頁面不發生重定向。
五、與HTTP協作的Web伺服器
1、代理
代理是一種有轉發功能的應用程式,它扮演了位於伺服器和客戶端“中間人”的角色,接收由客戶端傳送的請求並轉發給伺服器,同時也接收伺服器返回的響應並轉發給客戶端。
例如我們常用的抓包軟體其實就是一個代理伺服器,利用它我們就可以截獲客戶端與伺服器端之間傳輸的資料包。
2、閘道器
閘道器是轉發其他伺服器通訊資料的伺服器,接收從客戶端傳送來的請求時,它就像擁有資源的源伺服器一樣對請求進行處理。
閘道器的工作機制和代理十分相似。而閘道器能使通訊線路上的伺服器提供非HTTP協議服務。
閘道器的結構也和路由器類似,不同的是互連層。閘道器既可以用於廣域網互連,也可以用於區域網互連。
3、快取
快取是指代理伺服器或客戶端本地磁碟內儲存的資源副本。
利用快取可減少對源伺服器的訪問,因此也就節省了通訊流量和通訊時間。
六、HTTP與Web安全
1、HTTPS
HTTP加上加密處理和認證以及完整性保護後即是HTTPS。
&emps;HTTPS並非一種新的協議,只是HTTP披上了SSL或者TSL協議外殼,擁有了HTTPS的加密、證書和完整性保護這些功能。
2、金鑰
在資料傳輸過程中,加密和解密都會用到金鑰。
沒有金鑰就無法對密碼解密,反過來說,任何人只要持有金鑰就能進行解密了。如果金鑰被攻擊者獲得,那加密也就失去了意義。
3、數字證書
數字證書是指在網際網路通訊中標誌通訊各方身份資訊的一個數字認證,人們可以在網上用它來識別對方的身份。
數字證書又稱為數字標識。數字證書對網路使用者在計算機網路交流中的資訊和資料等以加密或解密的形式保證了資訊和資料的完整性和安全性。
就先寫到這吧,以後再做補充和修改,這是我在部落格上寫的第一篇學習總結,在寫的過程中也結合了這段時間做CTF題的一些感受,寫完後感覺對HTTP的知識體系有了更加清晰的認識。
最重要的還是能和大家一起交流學習,共同進步。
相關文章
- DevSecOps 流程中常見名詞縮寫dev
- AD域中常見屬性名詞解釋
- iOS中常見Crash總結iOS
- 區塊鏈交易系統中常見的專業名詞區塊鏈
- 開發中常見問題總結
- oracle中常用名詞解釋Oracle
- windows 中常見的一些埠Windows
- 對於http/http2的一些總結HTTP
- 前端面試中常見的演算法問題總結前端面試演算法
- spring中常見的一些註解Spring
- 使用HttpClient過程中常見的一些問題HTTPclient
- 計組常見名詞縮寫
- 機器學習中常見優化方法彙總機器學習優化
- Deep Learning模型中常見的optimizer優化器演算法總結模型優化演算法
- Android移動應用開發中常見的經驗技巧總結Android
- java開發中的一些概念名詞Java
- 【process】一些常見file和process的作用總結
- 陣列中常用的方法總結陣列
- HTTP總結HTTP
- Oracle中常見的33個等待事件小結Oracle事件
- 幾個網路常見的名詞解釋
- 嵌入式中常見的儲存器總結(一)儲存器分類
- 【FAQ】接入華為帳號服務過程中常見問題總結
- 一些與linux相關的名詞(轉)Linux
- 中考常見同義詞和同義短語總結
- Django開發中常用的命令總結Django
- 【FAQ】接入HMS Core地圖服務過程中常見問題總結地圖
- 一些乾貨:遊戲中常見“洞穴”場景的設計手法遊戲
- 連結串列專題——面試中常見的連結串列問題面試
- C#中常用的ToString()方法總結C#
- MySQL資料庫中常見的日誌檔案彙總!MySql資料庫
- JS 陣列中常用方法總結JS陣列
- Emgucv使用中常用函式總結函式
- 區塊鏈名詞術語彙總區塊鏈
- 一些Java開發人員在程式設計中常見的雷!Java程式設計
- [前端 · 面試 ]HTTP 總結(一)—— HTTP 概述前端面試HTTP
- Oracle中常見的Hint(一)Oracle
- Java中常見的異常Java