1.HTTP協議介紹
- HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是因特網上應用最為廣泛的一種網絡傳輸協議,所有的WWW文件都必須遵守這個標准
- HTTP是基於TCP/IP通信協議來傳遞數據(HTML 文件, 圖片文件, 查詢結果等)
- HTTP協議通常承載於TCP協議之上,有時也承載於TLS或SSL協議層之上,這個時候,就成了我們常說的HTTPS
- HTTP是一個應用層協議,由請求和響應構成,是一個標准的客戶端服務器模型。HTTP是一個無狀態的協議
- HTTP默認的端口號為80,HTTPS的端口號為443
2.HTTP請求報文
HTTP請求消息由四部分構成:請求行、請求頭部、空行、請求主體
2.1 請求行
首行結構為[方法] + [url] + [版本]
URL的標准如下:
協議://服務器IP[:端口]/路徑/[?查詢]
請求方法如下:
- GET 獲取資源
- POST 向服務器端發送數據,傳輸實體主體
- PUT 傳輸文件
- HEAD 獲取報文首部
- DELETE 刪除文件
- OPTIONS 詢問支持的方法
- TRACE 追蹤路徑
GET一般用於獲取/查詢資源信息,而POST一般用於更新資源信息(常用)
2.2 請求頭部(header)
即為請求的屬性,全部為以冒號分割的鍵值對,請求頭只出現在HTTP請求中,請求報頭允許客戶端向服務器端傳遞請求的附加信息和客戶端自身的信息。
常見請求頭:
Host請求報頭域主要用於指定被請求資源的Interbet主機和端口號
②User-Agent
User-Agent請求報頭域允許客戶端將他的操作系統,瀏覽器和其他屬性告訴服務器。
③Refere
Referer包含一個URL,代表當前訪問URL的上一個URL,也就是說用戶是從什么地方來到當前頁面。
④Cookies
Cookies是非常重要的請求頭,她是一段文本,常用來表示請求者身份等。
⑤Range
Range可以請求實體的部分內容,多線程下載一定會用到此請求頭。
⑥X-forweard-for
X-forweard-for即XXF頭,它代表請求端的IP,可以有多個,中間由逗號隔開。
⑦Accept
Accept請求報頭域用於指定客戶端接手那些MIME類型的信息,如Accept:text/html,表明客戶端希望接收HTML文本。
⑧Accept-Charset
Host: www.jianshu.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
2.3 空行
用於區分請求頭部信息和請求正文,必不可少
2.4 請求主體(body)
可選部分,比如GET請求就沒有請求正文,若方法字段是POST,則通常來說此處放置的就是要提交的數據;比如要使用POST方法提交一個表單,其中有user字段中數據為“admin”, password字段為123456,那么這里的請求數據就是 user=admin&password=123456,使用&來連接各個字段。
e.g:
username=admin&password=amdin
3.HTTP響應報文
3.1響應行
響應行一般由協議版本、狀態碼及其描述組成 比如 HTTP/1.1 200 OK;
其中協議版本HTTP/1.1或者HTTP/1.0,200就是它的狀態碼,OK則為它的描述
常見狀態碼:
100~199:表示成功接收請求,要求客戶端繼續提交下一次請求才能完成整個處理過程。
200~299:表示成功接收請求並已完成整個處理過程。常用200
300~399:為完成請求,客戶需進一步細化請求。例如:請求的資源已經移動一個新地址、常用302(意味着你請求我,我讓你去找別人),307和304(我不給你這個資源,自己拿緩存)
400~499:客戶端的請求有錯誤,常用404(意味着你請求的資源在web服務器中沒有)403(服務器拒絕訪問,權限不夠)
500~599:服務器端出現錯誤,常用500
3.2 響應頭
響應頭是服務器根據請求向客戶端發送的HTTP頭
服務器所使用的Web服務器名稱,如Server:Apache/1.3.6(Unix),攻擊者通過查看此頭,可以探測web服務器名稱。所以,建議服務器端修改此頭信息。
②Set-Cookie
向客戶端設置Cookie,通過查看此頭,可以清楚看到服務器向客戶端發送的Cooie信息。
③Last-Modified
服務器通過這個頭告訴瀏覽器,資料的最后修改時間。
④Location
服務器通過這個頭告訴瀏覽器去訪問那個頁面,瀏覽器接收到這個請求之后,通常會立刻訪問localtion頭所指向的頁面。這個頭通常配合302狀態碼使用。
⑤Refresh
服務器通過Refresh頭告訴瀏覽器定時刷新瀏覽器。
普通頭:在普通報頭中,有少數報頭域用於所有請求和響應消息 ,但並不用於被傳輸的實體,只用於傳輸的消息。例如:
Date,表示消息產生的日期和時間。
Connection,允許發送指定連接的選項。例如,指定連接是連續的,或者指定連接“close”選項,通知服務器,在響應完成后,關閉連接。
Cache-Control,用於指定緩存指令,緩存指令是單向的,且是獨立的。
普通頭了解即可
實體頭:請求和響應消息都可以傳送一個實體頭。實體頭定義了關於實體正文和請求所表示的資源的元信息。元信息也就是實體內容的屬性,包括實體信息類型、長度、壓縮方法、最后一次修改時間等。常見的實體頭如下。
①Content-Type
Content-Type實體頭用於向接收方指示實體的介質類型。
②Content-Encoding
Content-Encoding頭被用作媒體類型的修飾符,它的值指示了已經被應用到實體正文的附加內容的編碼,因而要獲得中Content-Type報頭域所引用的媒體類型,必須采用相應的解碼機制。
③Content-Length
Content-Length實體報頭用於指明實體正文的長度,以字節方式儲存的十進制數字來表示。
④Last-Modified
Last-Modified實體報頭用於指示資源的最后修改日期和時間。
常見的Content-Type:
3.3 空行
作用同上空行相同
3.4 響應(主)體(body)
響應體就是響應的消息體,如果是純數據就是返回純數據,如果請求的是HTML頁面,那么返回的就是HTML代碼,如果是JS就是JS代碼。
4.HTTP協議與HTTPS協議的區別
HTTPS協議是以安全為目標的HTTP通道,其實就是HTTP的“升級”版本,只是它單純的比HTTP協議更安全。
HTTPS的安全基礎是SSL,即在HTTP下加入SSL層。也就是HTTPS通過安全傳輸機制進行數據傳輸,這種機制可保護網絡傳送的所有數據的隱秘性與完整性,可以降低非侵入性攔截攻擊的可能性。
HTTP協議與HTTPS協議的主要區別如下:
- HTTP是超文本傳輸協議,信息是明文傳輸,HTTPS則是具有安全性的SSL加密傳輸協議。
- HTTP與HTTPS協議使用的是完全不同的連接方式,HTTP采用80端口連接,而HTTPS則是443端口。
- HTTPS協議需要到ca申請證書,一般免費的證書很少,需要交費,也有些web容器提供,如TOMCAT。而HTTP協議卻不需要。
- HTTP連接相對簡單,是無狀態的,而HTTPS協議是由SSL+HTTP協議構建的課進行加密傳輸、身份認證的網絡協議,相對來說,它要比HTTP協議更安全。