【第二章】深入HTTP請求流程
Web2.0:網際網路架構從C/S 變為了B/S(瀏覽器/伺服器)。
當客戶與Web 伺服器互動時,就存在Web 請求,而這一請求就是基於HTTP 協議實現的。
2.1 HTTP 協議解析
HTTP(HyperText Transfer Protocol)即超文字傳輸協議。
它允許將HTML(超文字標記語言)文件從Web 伺服器傳送到Web瀏覽器。
2.1.1 發起HTTP 請求
URL(統一資源定位符)也被稱作網址。其標準格式如下:
協議://伺服器IP[:埠]/路徑/[?查詢]
如:
http://www.test.com/index.php
藉助Linux中的curl命令傳送一個簡單的HTTP 請求:
HTTP 請求返回的HTML 資料
HTTP 響應頭
經過瀏覽器處理能讓使用者看到更直觀的介面
2.1.2 HTTP 協議詳解
目前HTTP協議最新版是1.1,是一種無狀態協議,無狀態即Web瀏覽器與伺服器之間不需要建立持久的連線。這意味著客戶端傳送了請求(Request),伺服器返回了響應(Response)之後連線就被關閉了。並且,HTTP 請求只能由客戶端發起。
1.HTTP 請求與響應
(1)HTTP 請求
HTTP請求包括三部分:
請求行(請求方法)
請求頭(訊息報頭)
請求正文
(2)HTTP 響應
與HTTP請求對應的是HTTP 響應,其也由三部分構成:
響應行
響應頭(訊息報頭)
響應正文(訊息主題)
2.HTTP 請求方法
(1)GET
用於請求頁面指定資訊。如果請求的動態指令碼,如index.jsp,那麼文字會返回Web容器解析後的HTML 原始碼,而不是index.jsp的原始檔。
一個GET請求:
使用GET 請求index.php並且id引數為1,而引數都是指令碼預先設計好的,多個引數之間用&連線。如id=1&name=admin,但是如果是你自己加的其它引數,如將name 改為了username ,伺服器並不回覆搭理你的username 引數,而只會接收id=1 這個引數值。
(2)HEAD
HEAD方法除了不會在響應裡返回訊息主體外,其它都與GET方法相同。通常用於測試連結的有效性、可訪問性和最近改變。掃描工具就常用此方法,因為不用返回訊息主體,所以速度一定是最快的。
一個HEAD請求:
(3)POST
POST方法與GET方法最大的區別在於,POST請求可以傳送大量資料,而GET傳送的資料有長度限制,並且資料不會顯示在瀏覽器端,相對安全。通常向伺服器提交資料都是用的此方法。
一個POST請求:
用POST方法向伺服器請求login.php,並且傳遞引數user=admin&pw=123456789
(4)PUT
PUT方法用於請求伺服器儲存請求中的實體於請求資源下,如果資源已存在,那麼替換其中的資料。如果不存在,則會建立這個資源。
一個PUT請求:
PUT /input.txt
HOST: www.xxser.com
Content-Length: 6
123456
這段PUT請求會在主機根目錄下查詢input.txt資源,並將內容替換為123456,如果沒有此資源,則會建立一個input.txt。通常,伺服器都會關閉此方法,因為這屬於危險方法之一。
(5)DELETE
DELETE方法用於請求伺服器刪除指定資源。伺服器通常也會關閉此方法,其也屬於危險方法之一。
(6)TRACE
TRACE方法被用於激發一個遠端的應用層的訊息迴路。簡單來說,客戶端會回顯伺服器收到的請求。常利用此方法去測試或者診斷。
(7)CONNECT
HTTP1.1 協議規範保留了此方法,為了用於能動態切換隧道的代理。
(8)OPTIONS
用於請求獲得在通訊過程中可以使用的功能選項。通過此方法可以在採取具體資源請求之前,決定對該資源採取何種必要措施,或者瞭解伺服器效能。
一個OPTIONS請求:
以上為HTTP/1.1 常見的方法。
3.HTTP 狀態碼
當客戶端發出請求,伺服器接收後,會向客戶端傳送響應資訊,其中HTTP 響應中的第一行中,最重要的就是HTTP 狀態碼。
如:
HTTP/1.1 200 OK
此條響應資訊的狀態碼為200,表示請求成功。
HTTP狀態碼由三位數字組成,第一位數字定義了響應類別,且只有以下五種:
- 1xx:資訊提示,表示請求已被成功接收,繼續處理。(100~101)
- 2xx:成功,伺服器成功地處理了請求。(200~206)
- 3xx:重定向,用於告訴客戶端,訪問的資源已被移動,並且告訴新的資源地址位置。這時,瀏覽器將對新資源重新發起請求。(300~305)
- 4xx:客戶端錯誤狀態碼,有時客戶端會傳送一些伺服器無法處理的東西,比如格式錯誤,最常見的就是請求了一條不存在的URL。(400~415)
- 5xx:伺服器內部錯誤,有時候客戶端傳送了一條有效請求,但是Web伺服器出錯了,可能是伺服器執行出錯,也可能是網站掛了。(500~505)
常見的狀態嗎如下:
200:客戶端請求成功,最常見。
302:重定向。
400:客戶端請求有語法錯誤,伺服器不能夠理解。
403:伺服器收到請求,但是拒絕提供服務。
404:請求的資源不存在,也常見。
500:伺服器內部錯誤,常見。
503:伺服器當前不能處理客戶端請求,一段時間後可能恢復正常。
4.HTTP 訊息
HTTP 訊息又稱HTTP 請求(報)頭(HTTP header),由請求頭、響應頭、普通頭和實體頭組成。
(1)請求頭
請求頭只會出現在HTTP 請求中,其允許客戶端向伺服器傳遞請求的附加資訊和客戶端自身的資訊。常用的HTTP 請求頭如下。
① Host
Host 請求報頭域主要用於被指定資源的Internet 主機號和埠號,例如:
HOST: www.test.com:80
② User-Agent
User-Agent 請求報頭域允許客戶端將它的作業系統、瀏覽器版本和其他屬性告訴伺服器。
③ Referer
Referer 包含一個URL,代表當前訪問URL的上一個URL,也就是說,使用者從什麼地方來到本頁面。如:
Referer: www.test.com/login.php
代表使用者從login.php來到當前頁。
④ Cookie
Cookie 是非常重要的請求頭,他是一段文字,常用來表示請求者的身份。
⑤ Range
Range 可以請求實體的部分內容,多執行緒下載一定會用到此請求。例如:
表示頭500位元組:bytes=0~499
表示第二個500位元組:bytes=500~999
表示最後500位元組:bytes=-500
表示500位元組以後:bytes=500-
⑥ x-forward-for
即XXF 頭,代表請求端的IP,可以有多個,用逗號隔開。
⑦Accept
Accept 請求報頭域用於指定客戶端接收哪些MIME型別資訊,如:
Accept:text/html
表明客戶端希望接受HTML文字。
⑧ Accept-Charset
用於指定客戶端接受的字符集。如:
Accept-Charset:UTF-8,gb2312
如果請求訊息中沒有設定,預設接受任何字符集。
(2)響應頭
響應頭是伺服器根據請求傳送的HTTP 頭。常見的HTTP 響應頭如下:
① Server
伺服器所使用的Web 伺服器型別及版本,如
Server:Apache/1.3.6(Unix)
攻擊者通過檢視此頭可以探測Web伺服器型別以及版本。
② Set-Cookie
向客戶端設定Cookie,通過檢視此頭,可以清楚地看到伺服器向客戶端設定的Cookie資訊。
③ Last-Modified
伺服器通過這個頭告訴客戶端,資源最後修改的時間。
④ Location
伺服器通過這個頭告訴瀏覽器去訪問哪個頁面,即重定向位置。瀏覽器接收到這個請求後,通常會立刻訪問其所指向的頁面。這個頭通常配合302重定向狀態碼使用。
⑤ Refresh
伺服器通過Refresh 頭告訴瀏覽器定時重新整理時間。
(3)普通頭
普通報頭中,少數報頭域用於所有的請求和響應,但並不用於傳輸實體,只用於傳輸訊息。如:Date,代表訊息產生日期和時間。Connection,允許傳送指定的連線選項。例如,指定連線是連續的,或者指定close 選項通知伺服器在響應完成後,關閉連線。Cache-Control,用於指定快取指令,快取是單向且獨立的。
(4)實體頭
請求和響應訊息都可以傳送一個實體頭。實體頭定義了關於實體正文和請求所標示的資源的元資訊。元資訊也就是試題內容的屬性,包括實體資訊型別、長度、壓縮方法、最後一次修改時間等。常見實體頭如下:
① Content-Type
用於向接收方指示實體的介質型別。
② Content-Ecoding
Content-Ecoding 頭被用作媒體型別的修飾符,它的值指示了已經被應用到實體正文的附加內容編碼,因而要獲得Content-Type 報頭域中所引用的媒體型別,必須採用相應的解碼機制。
③ Content-Length
用於指明實體正文長度,以位元組方式儲存的十進位制數字;來表示。
④ Last-Modified
用於指示資源最後的修改日期和時間。
2.1.3 模擬HTTP 請求
一次簡單的手動HTTP請求:
第一步:開啟CMD執行框,輸入Telnet www.baidu.com 80 後按Enter鍵,利用快捷鍵Ctrl+] 來開啟Telnet回顯(Telnet 預設不回顯)。
如果顯示:‘telnet’ 不是內部或外部命令,也不是可執行的程式 或批處理檔案。進入 控制皮膚\所有控制皮膚項\程式和功能 點選啟動或關閉Windows功能 勾選Telnet Client 點選確定即可。
第二步:按Enter鍵後,進入編輯狀態。
第三步:輸入
GET /index.html HTTP/1.1
HOST: www.badiu.com
連續快速按兩次回車(提交請求)。
就會接收伺服器到響應。
2.1.4 HTTP協議與HTTPS協議的區別
HTTPS是以安全為目標的HTTP通道,其實就是HTTP的升級版本,比HTTP更安全。
HTTPS的安全基礎是SSL,即在HTTP下加入SSL層。也就是HTTPS通過安全傳輸機制進行傳輸資料,這種機制可以保護網路傳送的所有資料的隱蔽性和完整性,可以降低非侵入性攔截攻擊的可能性。
HTTPS 與HTTP 的請求和響應都是以相同的方式進行工作的。
兩者的主要區別:
- HTTP 是超文字傳輸協議,是明文傳輸,HTTPS則是具有安全性的SSL加密傳輸協議。
- HTTP 採用80埠而HTTPS 採用443埠
- HTTPS 協議需要CA證照。而HTTP 不需要。
- HTTP 連線相對簡單,是無狀態的,而HTTPS 協議是由SSL+HTTP協議構造的可進行加密傳輸、身份認證的網路協議,相對來說,它比HTTP協議更安全。
2.2 擷取HTTP 請求
許多網站為了減少伺服器端壓力,在後臺方面減少驗證,而只在Web前端使用JavaScript進行驗證,這樣極大地增加了安全隱患。在滲透測試中,經常會進行HTTP請求的擷取來發現一些隱蔽的漏洞。例如:繞過JavaScript驗證、發現隱藏標籤內容等。
相關文章
- go http請求流程分析GoHTTP
- http請求概述HTTP
- Jsoup http請求JSHTTP
- go http請求GoHTTP
- Go Web 程式設計--深入學習解析 HTTP 請求GoWeb程式設計HTTP
- 請求基本流程
- 合併HTTP請求vs並行HTTP請求,到底誰更快?HTTP並行
- 合併HTTP請求 vs 並行HTTP請求,到底誰更快?HTTP並行
- HTTP請求報文HTTP
- Cookie 與 HTTP請求CookieHTTP
- python做http請求PythonHTTP
- Spring框架系列(5) - 深入淺出SpringMVC請求流程和案例框架SpringMVC
- 圖解 Spring:HTTP 請求的處理流程與機制【1】圖解SpringHTTP
- HTTP協議請求工作流程是什麼?linux學習HTTP協議Linux
- Http請求資料格式HTTP
- HTTP 請求與響應HTTP
- Http請求與響應HTTP
- Http請求相關(轉)HTTP
- go搞笑http請求庫GoHTTP
- HTTP網路請求原理HTTP
- HTTP請求預設值HTTP
- HTTP的請求過程HTTP
- java傳送http請求JavaHTTP
- HTTP GET請求傳bodyHTTP
- golang 的 http 請求池GolangHTTP
- 七種HTTP請求方法HTTP
- Http請求體詳解HTTP
- Java實現Http請求JavaHTTP
- HTTP請求格式和HTTP響應格式HTTP
- 【爬蟲】第二章-基本請求庫爬蟲
- (轉)解密 Golang 的 Request 物件:深入理解 HTTP 請求的關鍵解密Golang物件HTTP
- 【HTTP】HTTP請求體中的四種格式HTTP
- face 31減少http請求HTTP
- HTTP的請求與響應HTTP
- Go如何響應http請求?GoHTTP
- 使用 Netcat 模擬 HTTP 請求HTTP
- python-http請求帶AuthorizationPythonHTTP
- python傳送HTTP POST請求PythonHTTP