久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

接口測(cè)試第七課(cache)

 笑盟 2016-01-28


25-55+(85+65)=,?,,這題答案竟然是5!,,你信么,?

開始我也不信,盯著圖片看了三分鐘后,,我信了,。答案整的是5!


-----------------------------進(jìn)入正題-------------------------


一,、緩存分類

緩存分為客戶端緩存和服務(wù)端緩存

服務(wù)端緩存又分為 代理服務(wù)器緩存 和 反向代理服務(wù)器緩存(也叫網(wǎng)關(guān)緩存,,比如 Nginx反向代理、Squid等),,其實(shí)廣泛使用的 CDN (快播貌似就是用的這個(gè))也是一種服務(wù)端緩存,,目的都是讓用戶的請(qǐng)求走”捷徑“,并且都是緩存圖片,、文件等靜態(tài)資源,。

客戶端緩存一般指的是瀏覽器緩存,瀏覽器緩存控制機(jī)制有兩種:HTML Meta標(biāo)簽 vs. HTTP頭信息,。目的就是加速各種靜態(tài)資源的訪問,想想現(xiàn)在的大型網(wǎng)站,,隨便一個(gè)頁面都是一兩百個(gè)請(qǐng)求,,每天 pv 都是億級(jí)別,,如果沒有緩存,用戶體驗(yàn)會(huì)急劇下降,、同時(shí)服務(wù)器壓力和網(wǎng)絡(luò)帶寬都面臨嚴(yán)重的考驗(yàn),。

本篇主要講http客戶端緩存機(jī)制


二、fiddler查看緩存

打開fiddler抓包,,用瀏覽器打開測(cè)試部落論壇:http://120.25.145.237/upload/forum.php

如果瀏覽器是第一次打開網(wǎng)站(以前沒打開過這個(gè)論壇),,抓包情況如下:


在http請(qǐng)求headers里cache區(qū)域,有兩個(gè)參數(shù),,顯示no-cache

(這里就是客戶端發(fā)出請(qǐng)求后,,告訴服務(wù)器:“哥們,我這沒緩存啊,,您得發(fā)全部網(wǎng)頁數(shù)據(jù)過來哦~?。 ?,隨后服務(wù)器返回:“200 OK”)


第一次請(qǐng)求后,,我們?cè)俅嗡⑿拢‵5)下這個(gè)頁面,抓包情況如下:


會(huì)看到左側(cè)區(qū)域,,有很多304顯示(右側(cè)cache中已經(jīng)有了參數(shù))說明瀏覽器已經(jīng)使用了緩存數(shù)據(jù)


三,、瀏覽器請(qǐng)求流程圖

瀏覽器第一次請(qǐng)求流程圖:

  • 瀏覽器再次請(qǐng)求時(shí):



四、服務(wù)器如何判斷緩存是否過期

Web服務(wù)器通過2種方式來判斷瀏覽器緩存是否是最新的,。

第一種,, 瀏覽器把緩存文件的最后修改時(shí)間通過 header ”If-Modified-Since“來告訴Web服務(wù)器。

第二種,, 瀏覽器把緩存文件的ETag, 通過header 'If-None-Match', 來告訴Web服務(wù)器,。



五、If-Modified-Since

用F5刷新當(dāng)前頁面(找到/upload/data/cache...這項(xiàng)),,會(huì)發(fā)現(xiàn)不管怎么刷新,,If-Modified-Since后面的請(qǐng)求時(shí)間都沒有變,并且If-Modified-Since時(shí)間大于response headers里的Data時(shí)間,,如下圖:


說明瀏覽器緩存是最新的,,服務(wù)器會(huì)返回304,告訴客戶端使用本地緩存就行了


六,、If-None-Match和ETag

Etag

1.ETag是Web服務(wù)端產(chǎn)生的,,然后發(fā)給瀏覽器客戶端。瀏覽器客戶端是不用關(guān)心Etag是如何產(chǎn)生的,。

2. ETag是實(shí)體標(biāo)簽(Entity Tag)的縮寫,, 根據(jù)實(shí)體內(nèi)容生成的一段hash字符串(類似于MD5或者SHA1之后的結(jié)果),可以標(biāo)識(shí)資源的狀態(tài),。 當(dāng)資源發(fā)送改變時(shí),,ETag也隨之發(fā)生變化,。

3. ETag默認(rèn)是對(duì)文件的索引節(jié)(INode),大?。⊿ize)和最后修改時(shí)間(MTime)進(jìn)行Hash后得到的,。


If-None-Match:當(dāng)資源過期時(shí)(使用Cache-Control標(biāo)識(shí)的max-age),發(fā)現(xiàn)資源具有Etage聲明,,則再次向web服務(wù)器請(qǐng)求時(shí)帶上頭If-None-Match (Etag的值),。web服務(wù)器收到請(qǐng)求后發(fā)現(xiàn)有頭If-None-Match 則與被請(qǐng)求資源的相應(yīng)校驗(yàn)串進(jìn)行比對(duì),決定返回200或304,。


當(dāng)按F5再次刷新論壇主頁時(shí),,對(duì)比客戶端If-None-Match和服務(wù)端Etag值是一樣的,說明不用更新緩存,。


七,、為什么使用ETag呢?

1. 某些服務(wù)器不能精確得到文件的最后修改時(shí)間,, 這樣就無法通過最后修改時(shí)間來判斷文件是否更新了,。

2. 某些文件的修改非常頻繁,在秒以下的時(shí)間內(nèi)進(jìn)行修改. Last-Modified只能精確到秒,。

3. 一些文件的最后修改時(shí)間改變了,,但是內(nèi)容并未改變。 我們不希望客戶端認(rèn)為這個(gè)文件修改了


八,、Ctrl+F5

Ctrl+F5是強(qiáng)制刷新頁面,,明確告訴服務(wù)端,不使用緩存

可以再部落論壇主頁ctrl+f5試試,,左側(cè)請(qǐng)求區(qū)域不會(huì)看到304了


Pragma: no-cache的作用和Cache-Control: no-cache一模一樣,。 都是不使用緩存。

Pragma: no-cache 是HTTP 1.0中定義的,, 所以為了兼容HTTP 1.0. 所以會(huì)同時(shí)使用Pragma: no-cache和Cache-Control: no-cache


九,、瀏覽器設(shè)置不使用緩存

打開IE。點(diǎn)擊工具欄上的,, 工具->Internet選項(xiàng)->常規(guī)->瀏覽歷史記錄 設(shè)置. 選擇“從不”,。然后保存。

然后點(diǎn)擊“刪除” 把Internet臨時(shí)文件都刪掉 (IE緩存的文件就是Internet臨時(shí)文件),。


十,、回車刷新、F5刷新,、Ctrl+F5刷新區(qū)別,?

看到這里有不少小伙伴要懷疑了,這三種刷新還有區(qū)別么,,不看不知道,,一看嚇一跳,,區(qū)別還挺大哦。

回車刷新:可以先清空fiddler頁面的所有請(qǐng)求(命令行輸入cls,,回車),然后在部落論壇首頁,,回車查看請(qǐng)求結(jié)果,,會(huì)發(fā)現(xiàn)只有16條左右請(qǐng)求發(fā)送出去。而且?guī)缀鯖]有圖片的請(qǐng)求,,這是因?yàn)檎?qǐng)求時(shí)會(huì)先檢查本地是不是緩存了請(qǐng)求的圖片,,如果有緩存而且沒有過期(過期可以通過該圖片請(qǐng)求的header查看),他就不會(huì)發(fā)出這個(gè)圖片request,。


F5刷新:f5刷新比enter略慢,,為什么呢,因?yàn)樗€是把所有請(qǐng)求(大概70多條)都發(fā)給了server,,只是在request里的header里有cache信息,,服務(wù)器判斷還沒有過期,就直接返回304not modified,,在fiddler里看就是這些304的請(qǐng)求都為灰色,。因?yàn)橹苯臃祷?04這樣的信息,而不是圖片等內(nèi)容,,他比ctrl+f5快,,但是比enter慢,因?yàn)樗€是把所有請(qǐng)求都發(fā)了一遍,,比enter的不發(fā)請(qǐng)求自然是慢的,。


Ctrl+F5刷新:這個(gè)就要慢了,應(yīng)為所有的請(qǐng)求都是重新發(fā)送,,重新從server讀取內(nèi)容,,一點(diǎn)cache都沒有讀。為了防止在server的cache里讀取,,在ctrl+f5刷新時(shí),,在request header 里會(huì)加pragma:no-cache cache control:no-cache。這兩個(gè)就是告訴服務(wù)器到瀏覽器中間的所有節(jié)點(diǎn),,沒有cache,,看到這個(gè)中間節(jié)點(diǎn)也不查自己的cache,保證請(qǐng)求都是從server獲得的,。


如果你對(duì)這三種刷新方式已經(jīng)很清楚了,,能清楚說明他們的區(qū)別,說明http的緩存方式,,已經(jīng)基本掌握了,。


十一,、緩存是開發(fā)最大的敵人

先說說緩存的好處:

1. 減少了冗余的數(shù)據(jù)傳輸,節(jié)省了網(wǎng)費(fèi),。

2. 減少了服務(wù)器的負(fù)擔(dān),, 大大提高了網(wǎng)站的性能

3. 加快了客戶端加載網(wǎng)頁的速度


當(dāng)然往往BUG的產(chǎn)生,都是因?yàn)榫彺嫣幚聿划?dāng)導(dǎo)致的,。

學(xué)完這篇你就知道為什么你發(fā)現(xiàn)一個(gè)BUG后,,程序猿喜歡說,,你清空下緩存試試,,然后bug就不見了


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多