http協議位於網路五層結構的最上層應用層。它建立在tcp協議之上,是個無狀態的協議,典型的應用是網路瀏覽器以及移動端資料傳輸。本文將介紹http請求的格式,並對請求資料的各部分做乙個詳細介紹。
http協議包括多個方法:get,post,put,delete,head,patch,options等。我們重點關注最常用的get和post請求。
一次請求包括兩個過程,request過程和response過程,request過程發出資料請求,攜帶請求的各項引數,response過程返回請求的資料。
http request包括三部分:請求行,請求頭和請求體。
第一行是請求行,格式是:方法+路徑+http版本,以空格分隔。從第二行開始是請求頭,由若干個鍵值對構成,每個鍵值對一行。請求頭結束後空一行,接著是請求體。
post請求的引數放在請求體裡,get請求沒有請求體,請求的引數以鍵值對的形式存放在path裡面。請求頭里的鍵值對包括預定義鍵值對和自定義鍵值對,鍵值對內容包括請求的host,user-agent,編碼方式,請求體的型別,請求體的長度,分隔符等等資訊,大部分都是可選的,我們也可以隨意新增自定義的鍵值對來滿足某些需求。下面是乙個post請求的例項:
http response也包括三部分:響應狀態行,響應頭和響應體。
第一行是響應狀態行包括http版本+響應狀態,以空格分隔。從第二行開始是響應頭,包含若干個鍵值對,每個鍵值對佔一行。後面空一行,接著是響應體。
請求體可以包括多個part,通過header裡面的分隔符分隔,比如音訊上傳時利用請求體裡兩個part分布儲存檔案型別和音訊資料。
http request header裡有個user-agent欄位,是用來存放發起請求的客戶端或者瀏覽器的標識資訊的,比如瀏覽器的名稱版本,作業系統的名稱版本,客戶端的名稱版本等。
瀏覽器的user-agent:
mozilla/
5.0537.36
(khtml, like gecko) chrome/
52.0
.2743
.116 safari/
537.36
webview原始user-agent:
mozilla/
5.0(linux; u; android 4.2
.1534.30
(khtml, like gecko) version/
4.0 mobile safari/
534.30
我們自己在後面追加
chunyuyisheng/7.3.0 (iphone; ios 8.4; scale/2.00) ,注意第乙個有空格,方便隔開原始字串,以便伺服器正則判斷
最後生成類似 下面的字串:
mozilla/
5.0(linux;
u; android 4.2
.1534.30
(khtml, like
gecko) version/
4.0 mobile safari/
534.30 chunyuyisheng/
7.3.0
(iphone; ios 8.4
;scale/
2.00
)
user-agent就是乙個存放發起請求的端一些附加資訊的地方,至於具體寫入啥是由客戶端和伺服器協商決定的,沒有硬性標準。
cookie鍵值對儲存的是一些標誌使用者身份或設定的資訊,如session id,language等。使用者通過瀏覽器首次訪問某個**的時候,伺服器生成乙個cookie,並把它放在http響應的header裡面,下次再次訪問該**的時候,瀏覽器會在http請求的header裡面帶上這個cookie值,伺服器可以建立乙個cookie值到使用者表的對映,然後就可以利用這個識別使用者。
最基本的cookie:
==server -
> user agent ==
set-cookie: sid=
31d4d
96e407aad42
==user agent -
> server ==
cookie: sid=
31d4d
96e407aad42
指定cookie的path和domain屬性
==server -
> user agent ==
set-cookie: sid=
31d4d
96e407aad42; path=
/; domain=example.com
==user agent -
> server ==
cookie: sid=
31d4d
96e407aad42
包含多個cookie,乙個名字是sid,另乙個名字lang,名為sid的cookie指定了path,secure和httponly屬性;名為lang的cookie指定了path和domain屬性:
伺服器通過給名為lang的cookie指定乙個過去的時間來刪除該
cookie:
==server -
> user agent ==
set-cookie: lang=
; expires=sun,
06 nov 199408:
49:37 gmt
== user agent -
> server ==【客戶端發給伺服器的cookie不再包含lang】
cookie: sid=
31d4d
96e407aad42
third-party cookies
如果使用者訪問某個網頁,該網頁嵌入了三方廣告,開啟網頁的時候會向廣告服務區傳送請求,廣告伺服器返回的response裡會返回乙個cookie,下次使用者開啟其他網頁的時候,如果該網頁嵌入了同乙個第三方廣告平台,那請求廣告內容的request裡會自動把之前返回的cookie新增進去,從而能讓廣告伺服器識別出該使用者,根據之前瀏覽的內容給使用者推薦相應的廣告。這就是為什麼能給使用者展示之前訪問內容相關的廣告。
Http協議的格式及例項
http協議位於網路五層結構的最上層應用層。它建立在tcp協議之上,是個無狀態的協議,典型的應用是網路瀏覽器以及移動端資料傳輸。本文將介紹http請求的格式,並對請求資料的各部分做乙個詳細介紹。處於不同層次的網路協議 http協議包括多個方法 get,post,put,delete,head,pat...
HTTP協議格式及基礎
請求方法 uri 協議 版本 請求頭 request header 請求正文 http 請求 資料 例子舉例 請求的第一行是 方法url協議版本 以上 中 get 代表請求方法,sample.jsp 表示uri,http 1.1代表協議和協議的版本。根據http標準,http請求可以使用多種請求方法...
Http協議格式
一 請求報文 包括請求行 請求頭和請求資料,具體格式如下 請求方法 請求頭 accept 瀏覽器可接受的mime型別。accept charset 瀏覽器可接受的 字符集。accept language 瀏覽器所希望的語言種類,當伺服器能夠提供一種以上的語言版本時要用到。authorization ...