1. 程式人生 > 其它 >HTTP協議基礎知識

HTTP協議基礎知識

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
Host請求報頭域主要用於指定被請求資源的Interbet主機和埠號
②User-Agent
User-Agent請求報頭域允許客戶端將他的作業系統,瀏覽器和其他屬性告訴伺服器。
③Referer
Referer包含一個URL,代表當前訪問URL的上一個URL,也就是說使用者是從什麼地方來到當前頁面。
④Cookies
Cookies是非常重要的請求頭,她是一段文字,常用來表示請求者身份等。
⑤Range
Range可以請求實體的部分內容,多執行緒下載一定會用到此請求頭。
⑥X-Forwarded-For
X-Forwarded-For即XXF頭,它代表請求端的IP,可以有多個,中間由逗號隔開。
⑦Accept
Accept請求報頭域用於指定客戶端接手那些MIME型別的資訊,如Accept:text/html,表明客戶端希望接收HTML文字。
⑧Accept-Charset
  請求報頭域用於指定客戶端接收的字符集。例如:Accept-Charset:iso-8859-1,gb2312。如果在請求訊息中設定這個域,預設是任何字符集都可以接收。
e.g:
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頭

①Server
伺服器所使用的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協議更安全。