圖解HTTP總結(jié)

主要梳理下簡單的HTTP協(xié)議的基礎(chǔ)知識逐抑,供大家參考

HTTP是什么

URI vs URL

uri: uniform resource identifier統(tǒng)一資源標(biāo)識符
url: uniform resource locator統(tǒng)一資源定位符束凑,是通過web瀏覽器訪問資源的
urn: uniform resource name渗钉,統(tǒng)一資源命名瞒瘸,是通過名字來標(biāo)識資源


Paste_Image.png

HTTP是無狀態(tài)的双戳,如何保存狀態(tài)戏蔑?

url帶查詢參數(shù)
cookie

HTTP有哪些方法

GET: 用來請求訪問已被URI識別的資源
POST: 用來傳輸實(shí)體的主體
PUT: 用來傳輸文件
HEAD: 獲取報文首部叹洲,不返回報文主體部分
DELETE:刪除文件
OPTIONS: 詢問支持的方法

Paste_Image.png

TRACE:追蹤路徑
CONNECT:要求用隧道協(xié)議鏈接代理

持久連接 keep-alive

只要任意一端沒有明確提出斷開連接柠硕,則保持TCP連接狀態(tài)
管線化:并發(fā)請求

HTTP報文

用于HTTP協(xié)議交互的信息被稱為HTTP報文
請求端的HTTP報文叫做請求報文,響應(yīng)端的叫做響應(yīng)報文疹味。HTTP報文本身是由多行(用CR[Carriage Return,回車符:16進(jìn)制0x0d]+LF[Line Feed,換行符:16進(jìn)制0x0a]作換行符)數(shù)據(jù)構(gòu)成的字符串文本仅叫。

1,請求報文和響應(yīng)報文的結(jié)構(gòu)

Paste_Image.png
Paste_Image.png

ps:一般4種首部:通用首部、請求首部糙捺、響應(yīng)首部和實(shí)體首部
常用的內(nèi)容編碼:
gzip(GUN zip) compress(UNIX系統(tǒng)的標(biāo)準(zhǔn)壓縮)deflate(zlib)identity(不進(jìn)行編碼)
2,分割發(fā)送的分塊傳輸編碼
HTTP/1.1中存在一種稱為傳輸編碼(Transfer Coding)的機(jī)制诫咱,可以在通信時按某種編碼方式傳輸,但只定義作用于分塊傳輸編碼中洪灯。

發(fā)送多種數(shù)據(jù)的多部分對象集合(multipart)

MIME(Multipurpose Internet Mail Extensions坎缭,多用途因特網(wǎng)郵件擴(kuò)展),允許郵件處理文本签钩、圖片掏呼、視頻等多個不同類型的數(shù)據(jù)。
多部分對象集合包含的對象如下:

  • multipart/form-data
    在Web表單文件上傳時使用
Paste_Image.png
  • multipart/byteranges
    狀態(tài)碼206(Partial Content,部分內(nèi)容)響應(yīng)報文包含多個范圍的內(nèi)容時使用铅檩。
Paste_Image.png
Paste_Image.png

HTTP狀態(tài)碼

Paste_Image.png

狀態(tài)碼詳解

  • 2XX 成功

200 OK
204 No Content 一般在只需要從客戶端往服務(wù)器發(fā)送信息憎夷,而對客戶端不需要發(fā)送新消息內(nèi)容的情況下使用
206 Partial Content 該狀態(tài)碼表示客戶端進(jìn)行了范圍請求,而服務(wù)器成功執(zhí)行了這部分的GET請求昧旨。響應(yīng)報文中包含由Content-Range指定范圍的實(shí)體內(nèi)容拾给。

  • 3XX重定向

  • 301 Moved Permanently 永久性重定向祥得。
    好處:
    1,沒有網(wǎng)址規(guī)范化問題:當(dāng)有幾個不同的URL指向同一個頁面時蒋得,告訴搜索引擎哪個URL才是你想要
    2级及,SEO(搜索引擎優(yōu)化)中提到一點(diǎn):如果我們把一個地址采用301跳轉(zhuǎn)方式跳轉(zhuǎn)的話,搜索引擎會把老地址的PageRank等信息帶到新地址额衙,同時在搜索引擎索引庫中徹底廢棄掉原先的老地址饮焦。

  • 302 Found 臨時性重定向。
    SPAM(搜索引擎垃圾技術(shù))

  • 303 See Other窍侧,表示由于請求對應(yīng)的資源存在另一個URI县踢,應(yīng)使用GET方法定向獲取請求的資源。
    PS:
    1)當(dāng)301疏之、302殿雪、303響應(yīng)狀態(tài)碼返回時,幾乎所有的瀏覽器都會把POST改成GET,并刪除請求報文內(nèi)的主體锋爪,之后請求會自動再次發(fā)送
    2)301丙曙、302標(biāo)準(zhǔn)是禁止將POST方法改變成GET方法的,但實(shí)際使用時大家都會這么做其骄。

  • 304 Not Modified

  • 307 Temporary Redirect 會遵照瀏覽器標(biāo)準(zhǔn)亏镰,不會從POST變成GET。
    個人理解:協(xié)議中這么多很多類似的跳轉(zhuǎn)拯爽,302現(xiàn)在被大量使用索抓,http1.1出現(xiàn)了303&307,應(yīng)該是對302的細(xì)分出兩個新的狀態(tài)碼毯炮,出發(fā)點(diǎn)是想讓303&307替代302逼肯,但是現(xiàn)實(shí)是很多項目都是使用302。還有一點(diǎn)POST重定向的場景是否很多桃煎。

  • 4XX客戶端錯誤:4xx的響應(yīng)結(jié)果表明客戶端是發(fā)生錯誤的原因所在

  • 400 Bad Request
    表示請求報文中存在語法錯誤篮幢。

  • 401 Unauthorized 表示發(fā)送的請求需要有通過HTTP認(rèn)證(BASIC認(rèn)證、DIGEST認(rèn)證)的認(rèn)證信息

  • 403 Forbidden 表明對請求資源的訪問被服務(wù)器拒絕

  • 404 Not Found 表明服務(wù)器上無法找到請求資源

  • 5XX服務(wù)器錯誤 表明服務(wù)器本身發(fā)生錯誤

  • 500 Internal Server Error 表明服務(wù)器端在執(zhí)行請求時發(fā)生了錯誤

  • 503 Service Unavailable 表明服務(wù)器暫時處于超負(fù)載或正在進(jìn)行停機(jī)維護(hù)为迈,現(xiàn)在無法處理請求三椿。如果事先得知解除以上狀況需要的時間,最好寫入Retry-After首部字段再返回給客戶端
    PS:狀態(tài)碼和狀況的不一致時葫辐,需要前后端把響應(yīng)情況都要提前自定義好搜锰。如果是返回頁面,最好做攔截耿战,不要直接返回沒有任何樣式的響應(yīng)蛋叼。比如我們的404頁面和500頁面

與http協(xié)作的WEB服務(wù)器

代理、緩存代理

HTTP 首部

首部字段結(jié)構(gòu): 首部字段名: 字段值
PS:HTTP首部字段重復(fù)了剂陡,這種情況是根據(jù)瀏覽器內(nèi)部處理邏輯的不同鸦列,結(jié)果可能并不一致租冠。有的是優(yōu)先處理第一次出現(xiàn)的首部字段鹏倘,有的則會優(yōu)先處理最后出現(xiàn)的首部字段薯嗤。故要盡量不要重復(fù)

  • 4種HTTP首部字段類型
    1)通用首部字段(General Header Fields)
    請求報文和響應(yīng)報文兩方都會使用的首部
    2)請求首部字段(Request Header Fields)
    從客戶端向服務(wù)器端發(fā)送請求報文時使用的首部。
    3)響應(yīng)首部字段(Response Header Fields)
    從服務(wù)器端向客戶端返回響應(yīng)報文時使用的首部
    4)實(shí)體首部字段(Entity Header Fields)
    針對請求報文和響應(yīng)報文的實(shí)體部分使用的首部

HTTP/1.1規(guī)范定義了如下47種首部字段
通用首部字段:請求報文和響應(yīng)報文雙方都會使用的首部

Paste_Image.png

請求首部字段

Paste_Image.png

響應(yīng)首部字段

Paste_Image.png
Paste_Image.png

實(shí)體首部字段

Paste_Image.png

主要說明下控制緩存的首部字段的區(qū)別:
1纤泵,Cache-Control
Cache-Control: private, max-age=0, no-cache
緩存請求指令

Paste_Image.png
Paste_Image.png

緩存響應(yīng)指令

Paste_Image.png

表示是否能緩存的指令:
1)public:表明其他用戶也可利用緩存
2)private:響應(yīng)只以特定的用戶作為對象
3)no-cache:為了防止從緩存中返回過期的資源骆姐。表示客戶端將不會接收緩存過的響應(yīng)
4)no-store:暗示請求(和對應(yīng)的響應(yīng))或響應(yīng)中包含機(jī)密信息。該指令規(guī)定緩存不能在本地存儲請求或響應(yīng)的任一部分捏题。
PS:從字面意思看很容易把no-cache誤解成為不緩存玻褪,但事實(shí)上no-cache代表不緩存過期的資源,緩存會想服務(wù)器進(jìn)行有效期確認(rèn)后處理資源公荧,也許稱為do-not-server-from-cache-without-revalidation更合適带射。no-store才是真正地不進(jìn)行緩存,注意區(qū)別
5)s-maxage:功能和max-age指令相同循狰,不同點(diǎn)在于窟社,s-maxage指令只適用于供多位用戶使用的公共緩存服務(wù)器。即绪钥,對于向同一用戶重復(fù)返回響應(yīng)的服務(wù)器來說灿里,這個指令沒有任何作用。當(dāng)使用s-maxage指令后程腹,則直接忽略對Expires首部字段及max-age指令的處理
6)max-age:判定緩存資源的緩存時間數(shù)值比制定時間的數(shù)值更小匣吊,則客戶端就接收緩存的資源。如果max-age值為0寸潦,那么緩存服務(wù)器通常需要將請求轉(zhuǎn)發(fā)給源服務(wù)器色鸳。如果同時存在Expires首部字段的情況時,會優(yōu)先處理max-age指令见转,而忽略掉Expires首部字段命雀,1.0版本相反。
2池户,Pragma是http/1.1之前版本的歷史遺留字段咏雌,僅作為與http/1.0的向后兼容而定義。
Cache-Control: no-cache
Pragma: no-cache
3校焦,ETag:告知客戶端實(shí)體標(biāo)識赊抖。它是一種可將資源以字符串形式做唯一性標(biāo)識的方式。服務(wù)器會為每份資源分配對應(yīng)的ETag值寨典。
強(qiáng)ETag值氛雪,不論實(shí)體發(fā)生多么細(xì)微的變化都會改變其值
弱ETag值,只用于提示資源是否相同耸成。只有資源發(fā)生了根本改變报亩,產(chǎn)生差異時才會改變浴鸿。會在字段最開始處加W/。例:ETag: W/"usagi-1234"
配合使用首部:
If-Match
If-None-Match
If-Range
4弦追,If-xxx這種樣式的請求首部字段岳链,稱為條件請求。
If-Modified-Since
If-Unmodified-Since
If-Range:告知服務(wù)器若指定的If-Range字段值(ETag值或時間)和請求資源的ETag值或時間相一致時劲件,則作為范圍請求處理掸哑。反之,則返回全體資源
5,Expires:將資源失效的日期告知客戶端零远。
6,Last-Modified

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末苗分,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子牵辣,更是在濱河造成了極大的恐慌摔癣,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纬向,死亡現(xiàn)場離奇詭異择浊,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)罢猪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進(jìn)店門近她,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人膳帕,你說我怎么就攤上這事粘捎。” “怎么了危彩?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵攒磨,是天一觀的道長。 經(jīng)常有香客問我汤徽,道長娩缰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任谒府,我火速辦了婚禮拼坎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘完疫。我一直安慰自己泰鸡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布壳鹤。 她就那樣靜靜地躺著盛龄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上余舶,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天啊鸭,我揣著相機(jī)與錄音,去河邊找鬼匿值。 笑死赠制,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的千扔。 我是一名探鬼主播憎妙,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼曲楚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起褥符,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤龙誊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后喷楣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體趟大,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年铣焊,在試婚紗的時候發(fā)現(xiàn)自己被綠了逊朽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡曲伊,死狀恐怖叽讳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情雕擂,我是刑警寧澤直秆,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布闹炉,位于F島的核電站,受9級特大地震影響涤妒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赚哗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一她紫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧屿储,春花似錦贿讹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春助赞,著一層夾襖步出監(jiān)牢的瞬間买羞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工雹食, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留畜普,地道東北人。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓群叶,卻偏偏與公主長得像吃挑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子街立,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內(nèi)容