當前位置:首頁 » 文件管理 » 使用cdn後瀏覽器不會緩存

使用cdn後瀏覽器不會緩存

發布時間: 2023-03-24 05:57:10

❶ 瀏覽器緩存機制

有dns的地方,就有緩存。瀏覽器、操作系統、Local DNS、根域名伺服器,它們都會對DNS結果做一定程度的緩存。

DNS查詢過程如下:

首先搜索瀏覽器自身的DNS緩存,如果存在,則域名解析到此完成。
如果瀏覽器自身的緩存裡面沒有找到對應的條目,那麼會嘗試讀取操作系統的hosts文件看是否存在對應的映射關系,如果存在,則域名解析到此完成。
如果本地hosts文件不存在映射關系,則查找本地DNS伺服器(ISP伺服器,或者自己手動設置的DNS伺服器),如果存在,域名到此解析完成。
如果本地DNS伺服器還沒找到的話,它就會向根伺服器發出請求,進行遞歸查詢。

瀏覽器本地緩存失效後,瀏覽器會向CDN邊緣節點發起請求。類似瀏覽器緩存,CDN邊緣節點也存在著一套緩存機制。CDN邊緣節點緩存策略因服務商不同而不同,但一般都會遵循http標准協議,通過http響應頭中的
Cache-control: max-age 的欄位來設置CDN邊緣節點數據緩存時間。

當瀏覽器向CDN節點請求數據時,CDN節點會判斷緩存數據是否過期,若緩存數據並沒有過期,則直接將緩存數據返回給客戶端;否則,CDN節點就會向伺服器發出回源請求,從伺服器拉取最新數據,更新本地緩存,並將最新數據返回給客戶端。 CDN服務商一般會提供基於文件後綴、目錄多個維度來指定CDN緩存時間,為用戶提供更精細化的緩存管理。

CDN 優勢
CDN節點解決了跨運營商和跨地域訪問的問題,訪問延時大大降低。
大部分請求在CDN邊緣節點完成,CDN起到了分流作用,減輕了源伺服器的負載。

http請求報文(request)
請求行
請求方法  空格  URL 空格  協議版本 回車符 換行符
請求頭(通用信息頭、請求頭、實體頭)
頭部欄位名 冒號  值  回車鍵 換行符
...
頭部欄位名 冒號  值  回車鍵 換行符
空行
回車符   換行符
實體主體(只有post請求有)
主體

http響應報文(response)
狀態行
協議版本  空格  狀態碼 空格  狀態碼描述 回車符 換行符
響應頭部
頭部欄位名 冒號  值   回車符 換行符
...
頭部欄位名 冒號  值   回車符 換行符
空行
回車符   換行符
響應正文
正文

瀏覽器初次向伺服器發起請求後拿到請求結果,會根據響應報文中HTTP頭的緩存標識,決定是否緩存返回的結果,是則將請求結果和緩存標識存入瀏覽器緩存中

瀏覽器每次發起請求,都會現在瀏覽器緩存中查找該請求的結果以及緩存標識
瀏覽器                瀏覽器緩存        伺服器

——————第一次發起http請求——————>

<——沒有該請求的緩存結果和緩存標識————

——————————————發起http請求——————————————>

<——————————返回該請求結果和緩存規則————————————

——將請求結果和緩存標識存入瀏覽器緩存——>

強制緩存就是向瀏覽器緩存查找結果,並根據該結果的緩存規則來決定是否使用該緩存結果的過程

強制緩存的情況分為三種:
1、不存在該緩存結果和緩存標識,強制緩存失效,直接向伺服器發起請求
2、存在該緩存結果和緩存標識,但結果已經失效,強制緩存失效,使用協商緩存
3、存在該緩存結果和緩存標識,且該結果沒有失效,強制緩存生效,直接返回該結果

控制強制緩存的欄位:Expires,Cache-Control

Expires 是 HTTP/1.0 控制緩存的欄位,值為伺服器返回該請求的結果緩存時間
即再次發送請求是,客戶端時間 小於 Expires的值,直接使用緩存結果

Cache-Control 是HTTP/1.1的規則,主要用於控制網頁緩存,主要取值為:
public:所有的內容都緩存(客戶端和代理伺服器都可以緩存)
private:所有內容只有客戶端可以緩存(默認值)
no-cache:客戶端緩存內容,但是是否使用緩存則需要經過協商緩存來驗證決定
no-store:即不使用強制緩存,也不使用協商緩存
max-age=xxx:緩存內容將在xxx秒後失效

Expires 是一個絕對值
Cache-Control 中 max-age 是相對值,解決了 Expires時期 服務端與客戶端 可能出現時間差的問題

註:Expires和Cache-Control同時存在時,只有Cache-Control生效

協商緩存就是強制緩存失效後,瀏覽器攜帶緩存標識向伺服器發起請求,由伺服器根據緩存標識決定是否使用緩存的過程

協商緩存的兩種情況:
1、協商緩存生效,返回304,繼續使用緩存
過程:
瀏覽器                 瀏覽器緩存     伺服器

————————發起http請求————————>

<——該請求的緩存結果失效,只返回緩存標識——

————————攜帶該資源的緩存標識,發起http請求————————>

<—————————————304,該資源無更新————————————

——————獲取該請求的緩存結果——————>

<——————返回該請求的緩存結果——————

2、協商緩存失敗,返回200和請求結果
過程:
瀏覽器                 瀏覽器緩存     伺服器

————————發起http請求————————>

<——該請求的緩存結果失效,只返回緩存標識——

————————攜帶該資源的緩存標識,發起http請求————————>

<————————200,資源已更新,重新返回請求和結果———————

——將該請求結果和緩存標識存入瀏覽器緩存中—>

協商緩存的標識也是在響應報文的HTTP頭中和請求結果一起返回給瀏覽器的

控制協商緩存的欄位:
(1) Last-Modified/If-Modified-Since:Last-Modified是伺服器響應請求是,返回該資源文件在伺服器最後被修改的時間;If-Modified-Since再次發起請求時,攜帶上次返回的Last-Modified的值,伺服器將該欄位值與該資源最後修改時間對比,決定是否用緩存
(2)Etag/If-None-Match:Etag伺服器響應請求時,返回當前資源文件的一個唯一標識,由伺服器生成之;If-None-Match是再次發起請求時,攜帶上次返回的唯一標識Etag的值,伺服器收到後,將該欄位值與該資源在伺服器上的Etag對比,一致 則返回304,否則返回200

註:Etag/If-None-Match優先順序高於Last-Modified/If-Modified-Since,同時存在時只有Etag/If-None-Match生效

瀏覽器緩存分為:內存緩存 和 硬碟緩存

內存緩存特性:
(1)快速讀取:內存緩存會將編譯解析後的文件,存入該進程的內存中,便於下次運行時快速讀取
(2)時效性:一旦關閉進程,進程內存清空

硬碟緩存特性:
永久性:直接寫入硬碟文件中
復雜、緩慢:讀取緩存對該緩存存放的硬碟文件進行I/O操作,重新解析

from memory cache:使用內存中的緩存

from disk cache:使用硬碟中的緩存

瀏覽器讀取順序:memory ——> disk

瀏覽器將js和圖片等文件解析執行後直接存入內存緩存中,F5刷新頁面時,from memory cache(使用內存中的緩存)
css文件存入硬碟中,F5刷新頁面時,from disk cache(使用硬碟中的緩存)

參考文章
https://segmentfault.com/a/1190000017962411
https://www.cnblogs.com/chengxs/p/10396066.html

❷ "為什麼我的網站更新後,通過CDN後看到網頁還是舊網頁,如何解決 "

速網科技 CDN全球網路加速
CDN(Content Delivery Network),即內容分發網路。將網站的內容發布到最接近用戶的網路"邊緣"。使用戶可以就近取得所需的內容如同訪問本地。解決:電信、網通、鐵通、移動、聯通、教育網之間瓶頸 互聯互通速度慢,瓦解Internet網路擁擠等狀況,提高用戶訪問網站的響應速度。

網頁加速分為 靜態加速 動態加速
CDN核心部分主要是緩存,你的網站更新後,訪問看到又是舊的信息,是因為CDN節點緩存了你舊的網站信息 沒有及時更新造成的, 用CDN廠商提供的後台進行推送更新下就好了。

速網科技 CDN更新可以通過後台推送更新,也可以按照客戶要求靈活設置網頁及 圖片 或其他元素的緩存更新時間;

如 已經推送還是舊的,那就是你本地瀏覽器緩存;
清空下瀏覽器緩存,重啟瀏覽器,再是 Ctrl+F5

❸ 通過HTTP Header控制緩存

我們經常通過緩存技術來加快網站的訪問速度,從而提升用戶體驗。HTTP協議中也規定了一些和緩存相關的Header,來允許瀏覽器或共享高速緩存緩存資源。這些Header包括:

Last-Modified 和 If-Modified-Since

ETag 和 If-None-Match

Expires

Cache-Control

以上Header又可以分成兩種類型:

協商緩存:瀏覽器發送驗證到伺服器,由伺服器決定是否從緩存中讀取,如 1 和 2 。

強緩存:瀏覽器驗證緩存的有效性,然後決定是否從緩存中讀取數據,如 3 和 4 。

本文將會分別介紹這四種配置的作用以及可能產生的影響。

1、Last-Modified 和 If-Modified-Since

Last-Modified:伺服器在響應請求時,告知瀏覽器資源的最後修改時間。

If-Modified-Since:瀏覽器再次發送請求時,會通過此Header通知伺服器在上次請求時所得到的資源最後修改時間。伺服器會將If-Modified-Since與被請求資源的最後修改時間進行比對。若資源的最後修改時間晚於If-Modified-Since,表示資源已被改動,則響最新的資源,返回200狀態碼;若資源的最後修改時間早於或等於If-Modified-Since,表示瀏覽器端的資源已經是最新版本,響應304狀態碼,通知瀏覽器繼續使用緩存中的資源。

2、ETag 和 If-None-Match

ETag:伺服器分配給資源的唯一標識符,資源被修改後,ETag也會隨之發生變化。

If-None-Match:瀏覽器再次發送請求時,會通過此Header通知伺服器已緩存資源的ETag。伺服器會將If-None-Match與被請求資源的最新ETag進行比對。若不相同,表示資源已被改動,則響應最新的資源,返回200狀態碼;若值相同,則直接響應304狀態碼,通知瀏覽器繼續使用緩存中的資源。

3、Expires

伺服器可以通過此Header向瀏覽器傳遞一個具體的時間(格林威治格式,例如:Thu, 19 Jul 2018 07:43:05 GMT) ,來明確地宣告資源的有效期。在資源過期之前,瀏覽器不再發送請求,而是直接從緩存中讀取數據。只有當資源過期之後,瀏覽器才會再次向伺服器請求該資源。

4、Cache-Control

伺服器使用此Header來向客戶端建議緩存策略,它有一下幾個可選值:

max-age=秒:告知瀏覽器緩存的有效時長,在該時間內瀏覽器將直接從緩存中讀取數據。

s-maxage=秒:作用同max-age,但是只對共享高速緩存(如CDN)有效,對瀏覽器無效。

no-cache:告知瀏覽器不要直接使用緩存,而是必須向伺服器發送請求。

no-store:告知瀏覽器不要緩存本次請求和響應的任何信息。

public:宣告任何緩存媒介都可以緩存該響應。

private:宣告該響應只允許個體客戶端(如瀏覽器)去緩存,而不允許共享高速緩存(如CDN)去緩存。

在上面的介紹中我們了解到瀏覽器會根據max-age設置的時間進行緩存。而通過研究發現CDN也會識別源站響應頭中Cache-Control屬性,根據max-age設置的時間進行緩存,但是,如果源站同時設置了s-maxage和max-age,那麼CDN會優先採用s-maxage。

下面通過圖例來展示一下這些可選值的效果。

首先了解一下瀏覽器是怎樣根據max-age進行緩存的:

從上圖不難發現,伺服器在Header中返回了Cache-Control: max-age=100後,瀏覽器成功緩存100秒,該時間段內的請求都從直接以本地緩存來響應。

那麼,伺服器在Header中返回Cache-Control:s-maxage=100時,又會對瀏覽器產生什麼樣的影響呢?

如上圖所示,瀏覽器沒有採取任何緩存策略,這是因為s-maxage面向的是共享高速緩。

上面這兩個例子很容易理解,在現實世界中,為了加快網站響應速度,我們可能會在瀏覽器和伺服器之間引入CDN服務。瀏覽器的請求會先到達CDN,然後CDN判斷是從緩存中讀取數據還是回源到伺服器。接下來,讓我們看看max-age和s-maxage會對CDN的緩存策略帶來哪些影響。

可以看出CDN也會利用max-age來緩存,所以在100秒內強制刷新瀏覽器時,CDN會直接用緩存來響應。

如果伺服器使用了s-maxage又會如何呢?

不難發現CDN對max-age和s-maxage採取了同樣的緩存策略,但瀏覽器並不會根據s-maxage來進行緩存。

CDN供應商的特殊規則

我們分別測試了阿里雲和騰訊雲的CDN對Cache-Control的支持情況,發現他們都有一些獨特的規則。阿里雲CDN可以在控制台里設置Cache-Control,該設置會覆蓋源伺服器的Cache-Control。

騰訊雲CDN雖然沒有再控制台提供覆蓋Cache-Control的功能,但其規則卻一點也不簡單,在使用的時候一定要特別注意:

伺服器和CDN均不對緩存進行配置時,CDN會採用默認的緩存機制(靜態文件緩存30天,動態請求不緩存);

CDN配置緩存機制(但並未開啟高級緩存配置)且伺服器設置Cache-Control: s-maxage=200,max-age=100時,CDN會按照其控制台設置的規則進行緩存,瀏覽器則按照max-age進行緩存;

伺服器不設置Cache-Control時,CDN會自動在響應的Header中添加Cache-Control: max-age=600,這就會讓瀏覽器將該資源緩存600秒;

伺服器設置為禁用緩存時,CDN和瀏覽器均不進行緩存;

伺服器設置Cache-Control: s-maxage=200,max-age=100並開啟CDN的高級緩存配置時,CDN會從s-maxage和控制台中設置的緩存時間中選擇最小值來作為緩存時間,而瀏覽器則始終使用max-age;

伺服器設置Cache-Control:max-age=100並開啟CDN的高級緩存配置時,CDN會從max-age和控制台中設置的緩存時間中選擇最小值來作為緩存時間,不影響瀏覽器的緩存策略。

組合使用

如果同時設置了這些Header,瀏覽器和高速共享緩存會按照下面的優先順序進行緩存:

Cache-Control > Expires > ETag > Last-Modified

也就是說,Cache-Control不僅是強緩存,而且擁有最高的優先順序,我們可以為不經常發生變化的資源應用該Header來提升響應時間。

在Ada中使用緩存

Ada提供了UI腳手架和API腳手架,這兩類腳手架的伺服器端入口文件分別為index.server.js和index.js,我們只需要在入口文件的請求處理函數中為響應添加適當的Header,即可通知客戶端進行響應的緩存,比如:

// 設置CDN緩存300秒,瀏覽器緩存200秒 ctx.response.headers.set('Cache-Control',public,s-maxage=300,max-age=200)

在為請求添加緩存Header之前,應該先為其制定適當的緩存策略,需要考慮該URL是否適合緩存(數據是否特定於用戶)以及需要緩存的時長等等。

總結

通過使用這些HTTP Header,我們可以主動影響瀏覽器甚至CDN的緩存策略,從而減少請求數量,提升網頁性能,減輕伺服器壓力。

Ada的靈活機制能讓我們為不同的URL設置不同的緩存策略,能夠更有針對性地進行主動緩存。

❹ 簡述回源原理和CDN常見多級緩存

回源比分為回源請求數比例及回源流量比例兩種

瀏覽器本地緩存失效後,瀏覽器會向CDN邊緣節點發起請求。類似瀏覽器緩存,CDN邊緣節點也存在著一套緩存機制。

CDN的分流作用不僅減少了用戶的訪問延時,也減少的源站的負載。但其缺點也很明顯:當網站更新時,如果CDN節點上數據沒有及時更新,即便用戶再瀏覽器使用Ctrl +F5的方式使瀏覽器端的緩存失效,也會因為CDN邊緣節點沒有同步最新數據而導致用戶訪問異常。

CDN邊緣節點對開發者是透明的,相比於瀏覽器Ctrl+F5的強制刷新來使瀏覽器本地緩存失效,開發者可以通過CDN服務商提供的「刷新緩存」介面來達到清理CDN邊緣節點緩存的目的。這樣開發者在更新數據後,可以使用「刷新緩存」功能來強制CDN節點上的數據緩存過期,保證客戶端在訪問時,拉取到最新的數據。

參考文獻: https://blog.csdn.net/mountains2001/article/details/52766431
https://blog.csdn.net/wangxin1982314/article/details/51050206/
https://blog.csdn.net/songchunmin_/article/details/69942991

❺ 瀏覽器會緩存CDN上的javascript嗎

瀏覽器會緩存一個站點所有頁面文件,當然也包括CDN上面的JAVASCIPT文件,其實都源自一個地方。


  1. 瀏覽器緩存不管你的網站是動態的還是靜態的全部都會緩存

  2. CDN緩存一般只緩存靜態、JAVASCIPT,CSS,圖片等小圖片

  3. 如果你使用了CDN給你的網站加速,千萬不要加速動態文件,容易造成各種錯誤

  4. 其實不必在意瀏覽器會不會緩存CDN上的JS文件,更應該關注的是CDN是否會緩存JAVASCRIPT或者是否已經緩存了JAVASCRPIT文件。

❻ CDN實現原理

CDN實現原理

像這個問題,我的理解是這樣的:
(一)
1.用戶是通過域名來訪問網站的,然後各地用戶的請求會被調配到當地的CDN節點。
2.CDN節點會從真實的源網站拿到內容,再吐給用戶。如果該內容可以緩存,則會根據協議存在CDN一段時間。如果下次有其他用戶再來訪問CDN,就有可能拿到緩存的內容,就直接返回了。
3 如果你有一個小站,經過細心經營,流量慢慢變大,或者你想搞個活動,請求量會比平時多很多。網路可能會被打爆,導致整個網站打開變慢。想擴大帶寬卻發現獨享帶寬很貴,這個時候你可以使用CDN。
4 如果你有一個店鋪,業務慢慢做大,客戶遍布全國甚至全球,你時常收到客戶的抱怨,你的網站在某個地區打開很慢。那麼你可以使用CDN,可在阿里雲平台了解辦理。
(二)

1、解決Internet網路擁擠的狀況以及被同行DDOS攻擊的困擾。
2、提高用戶訪問網站的響應速度。
3、從技術上全面解決由於網路帶寬小、用戶訪問量大、節點分流不均等原因所造成的用戶訪問網站響應速度慢的問題。
網路流量分流(CDN)是一種新型的網路構建方式,它是為能在傳統的IP網發布寬頻豐富媒體而特別優化的網路覆蓋層;而從廣義的角度,CDN代表了一種基於質量與秩序的網路服務模式。
簡單地說,網路流量分流(CDN)是一個經策略性部署的整體系統,包括分布式存儲、負載均衡、網路請求的重定向和內容管理4個要件,而內容管理和全局的網路流量管理是CDN的核心整體。

熱點內容
虎牙安卓版是什麼意思 發布:2024-03-28 17:43:10 瀏覽:859
電腦改成雲伺服器 發布:2024-03-28 17:37:50 瀏覽:265
文件夾審計 發布:2024-03-28 17:08:20 瀏覽:241
密碼反編譯是什麼意思 發布:2024-03-28 17:02:54 瀏覽:309
linux下samba 發布:2024-03-28 16:54:12 瀏覽:539
我的世界國際服手機版免費開伺服器 發布:2024-03-28 16:45:36 瀏覽:284
phpmongodb擴展下載 發布:2024-03-28 16:41:03 瀏覽:323
android開發教程筆記 發布:2024-03-28 16:31:48 瀏覽:771
榮威i6max配置怎麼選 發布:2024-03-28 16:18:11 瀏覽:455
cml編程 發布:2024-03-28 16:14:53 瀏覽:758