Http理解

參考資料:
劉望舒的blog
玉剛說
cache-control
木上有水的blog

一炊邦、Http的特性

1.靈活的

可以通過Content-Type和Content-Length傳輸任意類型的數(shù)據(jù)

2.無連接的

一次只完成一個請求羽嫡,服務(wù)端處理完請求后會立即斷開鏈接

3.無狀態(tài)的

Http協(xié)議不會記錄上一次連接的狀態(tài)鞭铆,如果想知道上一個連接的狀態(tài)只能再次發(fā)起請求缤苫。

當(dāng)然可以通過cookie和session來保存上一次連接的信息

二诵叁、URL的請求格式

http://host:port abs_path

host:指主機號

port:端口號,默認(rèn)是80端口

abs_path:請求資源的url

三业栅、報文格式

請求報文的格式通常是請求行,請求報頭歉铝,請求體盈简,請求數(shù)據(jù)


image.png

響應(yīng)報文不同的是會攜帶協(xié)議版本,響應(yīng)狀態(tài)碼太示,響應(yīng)的錯誤原因


image.png

通用報頭

既可以出現(xiàn)在請求報頭柠贤,也可以出現(xiàn)在響應(yīng)報頭中

  • Date:表示消息產(chǎn)生的日期和時間
  • Connection:允許發(fā)送指定連接的選項,例如指定連接是連續(xù)的类缤,或者指定“close”選項臼勉,通知服務(wù)器,在響應(yīng)完成后餐弱,關(guān)閉連接
  • Cache-Control:用于指定緩存指令宴霸,緩存指令是單向的(響應(yīng)中出現(xiàn)的緩存指令在請求中未必會出現(xiàn)),且是獨立的(一個消息的緩存指令不會影響另一個消息處理的緩存機制)

請求報頭

請求報頭通知服務(wù)器關(guān)于客戶端求求的信息膏蚓,典型的請求頭有:

  • Host:請求的主機名瓢谢,允許多個域名同處一個IP地址,即虛擬主機
  • User-Agent:發(fā)送請求的瀏覽器類型驮瞧、操作系統(tǒng)等信息
  • Accept:客戶端可識別的內(nèi)容類型列表氓扛,用于指定客戶端接收那些類型的信息
  • Accept-Encoding:客戶端可識別的數(shù)據(jù)編碼
  • Accept-Language:表示瀏覽器所支持的語言類型
  • Connection:允許客戶端和服務(wù)器指定與請求/響應(yīng)連接有關(guān)的選項,例如這是為Keep-Alive則表示保持連接论笔。
  • Transfer-Encoding:告知接收端為了保證報文的可靠傳輸采郎,對報文采用了什么編碼方式千所。

響應(yīng)報頭

用于服務(wù)器傳遞自身信息的響應(yīng),常見的響應(yīng)報頭:

  • Location:用于重定向接受者到一個新的位置蒜埋,常用在更換域名的時候
  • Server:包含可服務(wù)器用來處理請求的系統(tǒng)信息真慢,與User-Agent請求報頭是相對應(yīng)的

實體報頭

實體報頭用來定于被傳送資源的信息,既可以用于請求也可用于響應(yīng)理茎。請求和響應(yīng)消息都可以傳送一個實體,常見的實體報頭為:

  • Content-Type:發(fā)送給接收者的實體正文的媒體類型
  • Content-Lenght:實體正文的長度
  • Content-Language:描述資源所用的自然語言管嬉,沒有設(shè)置則該選項則認(rèn)為實體內(nèi)容將提供給所有的語言閱讀
  • Content-Encoding:實體報頭被用作媒體類型的修飾符皂林,它的值指示了已經(jīng)被應(yīng)用到實體正文的附加內(nèi)容的編碼,因而要獲得Content-Type報頭域中所引用的媒體類型蚯撩,必須采用相應(yīng)的解碼機制础倍。
  • Last-Modified:實體報頭用于指示資源的最后修改日期和時間
  • Expires:實體報頭給出響應(yīng)過期的日期和時間

四、Http緩存

我們請求服務(wù)器資源成功后胎挎,可以將請求的資源緩存在本地沟启,當(dāng)下次再使用時,可以使用本地的緩存犹菇,這樣既節(jié)省了帶寬又節(jié)省了時間德迹。但是在使用本地緩存時首先有幾個步驟
1. 新鮮度的檢測
當(dāng)我們想要使用本地緩存時,首先會向服務(wù)器驗證資源是否過期揭芍。這個是通過Cache-Control(Http1.1)或者是Expire(Http1.0)來判斷的胳搞。再第一次請求下數(shù)據(jù)時,服務(wù)器會對響應(yīng)體追加Cache-Control:max-age称杨,它表示這個緩存最多緩存多長時間肌毅。超過了這個時間需要向服務(wù)器驗證請求的新鮮度。要結(jié)合last-modifed的時間:表示從上一次修改的時間+最大緩存時間表示它過期的時間

private 表示只對當(dāng)前用戶緩存
public 對所有用戶緩存
no-cache:強制所有用戶在使用緩存前需要向服務(wù)器再驗證
only-if-cached:如果緩存存在姑原,只使用緩存

2. 驗證
如果已經(jīng)超過了緩存時間悬而,那么需要向服務(wù)器進(jìn)行驗證。如果驗證通過可以使用本地緩存锭汛,服務(wù)端會響應(yīng)304笨奠。,如果沒有通過唤殴,服務(wù)器返回200艰躺,將最新的數(shù)據(jù)返回給客戶端,驗證的方式有:

If-Modified-Since
If-None-Match
If-Unmodified-Since
If-Range
If-Match

1.If-Modified-Since
將我們緩存的last-modifed時間取出來眨八,并添加到If-Modified-Since中傳遞給服務(wù)器腺兴。告訴服務(wù)器我們緩存數(shù)據(jù)的這段時間,數(shù)據(jù)是否有更改廉侧。

2.If-None-Match和Etag
在首次請求一個url時页响,服務(wù)器會返回一個Etag標(biāo)志篓足,表示這個數(shù)據(jù)的版本,再下一次請求這個url時闰蚕,我們會將這個Etag的值放到If-None-Match中栈拖,然后服務(wù)器會取出這個值和服務(wù)器緩存的值是否一致,如果一致代表緩存沒有過期没陡。

image.png

四涩哟、實例:

模擬刷新了一個網(wǎng)頁,可以看到瀏覽器類型是:Chrom 系統(tǒng)是Window盼玄。
請求類型是get贴彼,上一次修改的時間和服務(wù)器返回的修改時間一致,所以返回的是304埃儿,使用本地緩存器仗。


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市童番,隨后出現(xiàn)的幾起案子精钮,更是在濱河造成了極大的恐慌,老刑警劉巖剃斧,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件轨香,死亡現(xiàn)場離奇詭異,居然都是意外死亡幼东,警方通過查閱死者的電腦和手機弹沽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來筋粗,“玉大人策橘,你說我怎么就攤上這事∧纫冢” “怎么了丽已?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長买决。 經(jīng)常有香客問我沛婴,道長,這世上最難降的妖魔是什么督赤? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任嘁灯,我火速辦了婚禮,結(jié)果婚禮上躲舌,老公的妹妹穿的比我還像新娘丑婿。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布羹奉。 她就那樣靜靜地躺著秒旋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪诀拭。 梳的紋絲不亂的頭發(fā)上迁筛,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天,我揣著相機與錄音耕挨,去河邊找鬼细卧。 笑死,一個胖子當(dāng)著我的面吹牛筒占,可吹牛的內(nèi)容都是我干的贪庙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼赋铝,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了沽瘦?” 一聲冷哼從身側(cè)響起革骨,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎析恋,沒想到半個月后良哲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡助隧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年筑凫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片并村。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡巍实,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哩牍,到底是詐尸還是另有隱情棚潦,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布膝昆,位于F島的核電站丸边,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏荚孵。R本人自食惡果不足惜妹窖,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望收叶。 院中可真熱鬧骄呼,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至绕德,卻和暖如春患膛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背耻蛇。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工踪蹬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人臣咖。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓跃捣,卻偏偏與公主長得像,于是被迫代替她去往敵國和親夺蛇。 傳聞我的和親對象是個殘疾皇子疚漆,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,678評論 2 354

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