HTTP請求頭部的內容
HTTP請求由三部分組成,分別是請求行、消息報頭、請求正文;
(1)請求行
請求行以一個方法符號開頭,以空格分開,後面跟着請求的URL和協議的版本;
標準的請求行格式:
Method Request-URL HTTP-Version CRLF
- Method表示請示方法;
- Request-URL是一個統一資源標識符;
- HTTP-Version:請求的HTTP協議版本;
- CRLF:表示回車和換行(除了作爲結尾的CRLF外,不允許出現單獨的CR或LF字符)
HTTP協議定義了多種請求方法:
- GET:請求獲取Request-URL所標識的資源;
- POST:在Request-URL所標識的資源後附加新的數據;
- HEAD:請求獲取由Request-URL所標識的資源的響應消息報頭;
- PUT:請求服務器存儲一個資源,並用Request-URL作爲其標識;
- DELETE:請求服務器刪除Request-URL所標識的資源;
- TRACE:請求服務器回送收到的請求信息,主要用戶測試或診斷;
- CONNECT:保留;
- OPTIONS:請求查詢服務器的性能,或者查詢與資源相關的選項和需求;
在實際應用中,考慮到安全因素,主要使用GET和POST兩種方式開展請求,GET和POST請求的主要區別爲:
GET方法:通過在瀏覽器的地址欄中輸入網址訪問網頁時,瀏覽器採用GET方法向服務器獲取資源,
對應的請求行示例爲:
GET /form.html HTTP/1.1
POST方法:要求被請求服務器接收附在請求後面的數據,常用於提交表單,對應的請求行示例爲:POST /nep/v1/ HTTP/1.1
GET和POST方法的最大區別就是提交參數在HTTP請求包的位置不同,使用GET方式時Request body部分爲空白,POST方式則可利用URL及Request body發送請求,但是在實際應用中,兩者的安全性一致,都可能因鏈路劫持而出現參數泄露的情況;
目前,有一些系統依然支持HEAD方法,HEAD方法與GET方法在使用方面幾乎一致,利用HEAD方法的好處在於不必傳輸整個資源內容,就可以得到Request-URL所標識的資源信息,該方法常用於 測試鏈接的有效性;
(2)請求消息報頭
請求消息報頭用來向服務器端傳遞客戶端自身的信息以及用戶的附加信息,這些信息可以幫助服務器更好地識別用戶的請求,以提供對應的響應內容,報頭中涉及安全的內容字段如下:
- Host:主要用於指定被請求資源的internet主機和端口號,即標識請求目標,其來源爲當前訪問的URL,默認端口號爲80,若指定了端口號進行防衛,則變爲:www.a.com:8000
- Content-Length:標識當前請求包中的內容長度;
- Origin:標識本次請求的發起源,只適用於POST方式;
- Referer:標識當前請求的發起頁面;
- Accept:指定客戶端接收哪些類型的信息;
- Accept-Encoding:告知服務器端當前客戶端可接受的內容編碼;
- Accept-Language:告知服務器端當前支持的語音類型;
- User-Agent:包含當前用戶的操作系統、瀏覽器的基本信息,用於告知服務器當前訪問者的情況;
(3)請求正文內容
請求正文中包含HTTP傳輸的信息,當請求方法爲GET時,請求正文爲空白,所有內容通過在URL後面添加參數進行傳輸,只有請求方法爲POST時,HTTP請求正文中才有信息,通常爲Web系統自動以的參數,用於實現與服務器的交互,其中的參數是由Web系統自定義定義的,在Web系統開發時一般會根據參數用途指定特定的名稱,如username、code等;但是這樣也會讓攻擊者清楚地知道參數的具體用法,推薦此部分中,參數命名應模糊,使得參數名稱無法通過表面意思被理解,從而增加攻擊者的分析難度;