超碰人人人人人,亚洲AV午夜福利精品一区二区,亚洲欧美综合区丁香五月1区,日韩欧美亚洲系列

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

[點(diǎn)晴永久免費(fèi)OA][轉(zhuǎn)帖]你知道304嗎?圖解強(qiáng)緩存和協(xié)商緩存

freeflydom
2023年7月19日 17:1 本文熱度 1261

一、http狀態(tài)碼

1、引例闡述

在講狀態(tài)嗎之前,我們先來了解什么是狀態(tài)碼。比如百度網(wǎng)站:

大家可以看到,上圖中圈紅圈的部分就是 http 的狀態(tài)碼,常見的狀態(tài)碼有200,400,404等等。接下來對狀態(tài)碼的一些基礎(chǔ)知識進(jìn)行介紹。

2、狀態(tài)碼分類

下表給出狀態(tài)碼分類。

狀態(tài)碼含義解釋說明
1xx服務(wù)器收到請求收到1xx開頭的請求表示服務(wù)端已經(jīng)收到請求,但是還沒有返回信息給客戶端
2xx請求成功,如200表示客戶端已經(jīng)成功請求數(shù)據(jù)
3xx重定向,如302客戶端收到3xx開頭的狀態(tài)碼時(shí),表示此時(shí)服務(wù)端已經(jīng)不再管客戶端所請求地址,讓客戶端去請求另外的地址
4xx客戶端錯(cuò)誤,404表示當(dāng)客戶端請求了一個(gè)服務(wù)端完全不認(rèn)識的地址時(shí),就會報(bào)出4xx的錯(cuò)誤
5xx服務(wù)端錯(cuò)誤,如500表示此錯(cuò)誤來源于服務(wù)端,比如服務(wù)端寫的接口出現(xiàn)了bug等問題

3、常見狀態(tài)碼

常見的有200(正常) 、404(無法找到該網(wǎng)頁資源) 、304(跳轉(zhuǎn)頁面) 、500(服務(wù)器錯(cuò)誤)等,具體如下:

狀態(tài)碼含義用途
200OK 成功一般用于 GET 和 POST 請求
301Redirect Permanently 永久重定向配合location,瀏覽器自動處理
302Found 臨時(shí)重定向配合location,瀏覽器自動處理
304Not Modified 資源未被修改所請求的資源未修改,服務(wù)器返回此狀態(tài)碼時(shí),不會返回任何資源??蛻舳送ǔ彺嬖L問過的資源,通過提供一個(gè)頭信息指出客戶端希望只返回在指定日期之后修改的資源
404Not Found 資源未找到服務(wù)器無法根據(jù)客戶端的請求找到資源(網(wǎng)頁)。通過此代碼,網(wǎng)站 設(shè)計(jì)人員可設(shè)置"您所請求的資源無法找到"的個(gè)性頁面
403Forbidden 沒有權(quán)限服務(wù)器理解請求客戶端的請求,但是拒絕執(zhí)行此請求
500Internal server Error 服務(wù)器錯(cuò)誤服務(wù)器內(nèi)部錯(cuò)誤
504Gateway Time-out網(wǎng)關(guān)超時(shí)充當(dāng)網(wǎng)關(guān)或代理的服務(wù)器,未及時(shí)從遠(yuǎn)端服務(wù)器獲取請求

下面詳細(xì)闡述 301302

301 永久重定向:

常見場景有,比如說你的一個(gè)網(wǎng)站,域名到期了,或者域名你不想用了,那么老的域名就可以返回一個(gè) 301 狀態(tài)碼并配合 locationlocation 的值等于新的域名,最終進(jìn)行跳轉(zhuǎn),之后瀏覽器會記住新的域名,不會再訪問老的域名。

302 臨時(shí)重定向:

常見場景有百度,知乎、簡書等等。比如說我們要在百度進(jìn)入菜鳥教程,搜索出來后有一系列的列表,我們可以選擇一個(gè)去進(jìn)行一個(gè)點(diǎn)擊。點(diǎn)擊的那個(gè)不會直接進(jìn)入菜鳥教程,而是先跳轉(zhuǎn)到百度設(shè)置的一個(gè)臨時(shí)地址,之后再跳轉(zhuǎn)到菜鳥教程真實(shí)的地址。

4、關(guān)于協(xié)議和規(guī)范

  • http協(xié)議就是一個(gè)約定,一個(gè)規(guī)范,要求大家都跟著執(zhí)行;

  • 因此不要做違規(guī)范的事情,例如 IE 瀏覽器,違反規(guī)范終將會落下被歷史淘汰的局面。

二、http 方法

1、傳統(tǒng)的methods

  • get 獲取服務(wù)器的數(shù)據(jù);

  • post 向服務(wù)器提交數(shù)據(jù);

  • head 用戶獲取報(bào)頭。

2、現(xiàn)在的methods

  • get 獲取數(shù)據(jù);

  • post 新建數(shù)據(jù);

  • patch/put 更新數(shù)據(jù);

  • delete 刪除數(shù)據(jù);

  • head,類似于get請求,只不過返回的響應(yīng)中沒有具體的內(nèi)容,用戶獲取報(bào)頭;

  • options,允許客戶端查看服務(wù)器的性能,比如說服務(wù)器支持的請求方式等等;

  • trace,追蹤路徑;

  • connect,要求用隧道協(xié)議連接代理。

3、Restful API

(1)Restful API是什么?

  • Restful API 是一種新的 API 設(shè)計(jì)方法(早已推廣使用)。

  • 傳統(tǒng) API 設(shè)計(jì):把每個(gè) url 當(dāng)做一個(gè)功能。

  • Restful API 設(shè)計(jì):把每個(gè) url 當(dāng)做一個(gè)唯一的資源。

(2)如何設(shè)計(jì)成一個(gè)資源?

1)盡量不用url參數(shù)

  • 傳統(tǒng) API 設(shè)計(jì):/api/list?pageIndex=2

  • Restful API 設(shè)計(jì):/api/list/2

2)用method表示操作類型

傳統(tǒng) API 設(shè)計(jì):

  • post請求:/api/create-article

  • post請求:/api/update-article?id=100

  • get請求:/api/get-article?id=100

Restful API 設(shè)計(jì):

  • post請求:/api/article

  • post請求:/api/article/100

  • get請求:/api/article/100

三、http 頭部(http headers)

1、常見的Request headers

請求頭含義
Accept瀏覽器可接收的數(shù)據(jù)格式
Accept-Encoding瀏覽器可以接收的算法,如gzip
Accept-Language瀏覽器可接收的語言,如zh-CN
Connectionkeep-alive 一次TCP連接重復(fù)使用
cookie客戶端接收到的Cookie信息
Host指定原始的 URL 中的主機(jī)和端口
User-Agent(簡稱UA)瀏覽器內(nèi)核信息
Content-type發(fā)送數(shù)據(jù)的格式,如application/json

2、常見的Response headers

響應(yīng)頭含義
Content-type返回?cái)?shù)據(jù)的格式,如application/json
Content-length返回?cái)?shù)據(jù)的大小,多少字節(jié)
Content-Encoding返回?cái)?shù)據(jù)的壓縮算法,如gzip
Set-Cookie服務(wù)端向客戶端設(shè)置cookie

四、http 緩存

1、關(guān)于緩存的介紹

(1)什么是緩存

緩存是一種保存資源副本并在下次請求時(shí)直接使用該副本的技術(shù)。

(2)為什么需要緩存?

如果沒有緩存的話,每一次網(wǎng)絡(luò)請求都要加載大量的圖片和資源,這會使頁面的加載變慢許多。那緩存的目的其實(shí)就是為了盡量減少網(wǎng)絡(luò)請求的體積和數(shù)量,讓頁面加載的更快。

(3)哪些資源可以被緩存?——靜態(tài)資源(js、css、img)

  • 網(wǎng)站的 html 是不能被緩存的。因?yàn)榫W(wǎng)站在使用過程中 html 隨時(shí)有可能被更新,隨時(shí)有可能被替換模板。

  • 網(wǎng)頁的業(yè)務(wù)數(shù)據(jù)也是不能被緩存的。比如留言板和評論區(qū),用戶隨時(shí)都可以在底下評論,那數(shù)據(jù)庫的內(nèi)容就會被頻繁被更新。

2、http 緩存策略(強(qiáng)制緩存 + 協(xié)商緩存)

(1)強(qiáng)制緩存

1)強(qiáng)制緩存是什么?

強(qiáng)制緩存就是文件直接從本地緩存中獲取,不需要發(fā)送請求。

2)圖例

先看第一個(gè)圖。

從上圖可以看到,當(dāng)初次請求時(shí),瀏覽器會向服務(wù)器發(fā)起請求,服務(wù)器接收到瀏覽器的請求后,返回資源并返回一個(gè) Cache-Control 給客戶端,該 Cache-Control 一般設(shè)置緩存的最大過期時(shí)間。


接下來看第二個(gè)圖。

從上圖中可以看到,此時(shí)瀏覽器已經(jīng)接收到 cache-control 的值,那么這個(gè)時(shí)候?yàn)g覽器再次發(fā)送請求時(shí),它會先檢查它的 cache-control 是否過期,如果沒有過期則直接從本地緩存中拉取資源,返回到客戶端,而無需再經(jīng)過服務(wù)器。


接下來看第三個(gè)圖。

強(qiáng)制緩存有過期時(shí)間,那么就意味著總有一天緩存會失效。那么假設(shè)某一天,客戶端的 cache-control 失效了,那么它就沒辦法從本地緩存中拉取資源。于是它會像第一張圖一樣,重新向服務(wù)器發(fā)起請求,之后服務(wù)器會再次返回資源和 cache-control 的值。

以上就是強(qiáng)制緩存的全過程。

3)Cache-Control

Cache-Control是什么?

  • 存在于響應(yīng)頭Response Headers中;

  • 控制強(qiáng)制緩存的邏輯;

  • 例如:Cache-Control: max-age = 31536000(單位是秒)。

Cache-Control的值

Cache-Control值含義
max-age設(shè)置緩存的最大過期時(shí)間
no-cache不用本地緩存,正常的向服務(wù)端請求,服務(wù)端怎么處理我們不用管
no-store簡單粗暴,直接從服務(wù)端拉取緩存
private只能允許最終用戶做緩存,最終用戶即電腦、手機(jī)等等
public允許中間路由或中間代理做緩存

4)關(guān)于Expires

  • 同在 Response Headers

  • 同為控制緩存的過期時(shí)間(早期使用)

  • 如果 cache-control 與 expires 同時(shí)存在的話, cache-control 的優(yōu)先級高于 expires

(2)協(xié)商緩存

1)協(xié)商緩存是什么?

  • 協(xié)商緩存,也叫對比緩存。

  • 它是一種服務(wù)端的緩存策略,即通過服務(wù)端來判斷某件事情是不是可以被緩存。

  • 服務(wù)端判斷客戶端的資源,是否和服務(wù)端資源一樣,如果一致則返回 304 ,反之返回 200 和最新的資源。

2)圖例

同樣地,用幾張圖來演示協(xié)商緩存。

先來看第一張圖。

在上圖中,表明了協(xié)商緩存的全過程。首先,如果客戶端是第一次向服務(wù)器發(fā)出請求,則服務(wù)器返回資源和相對應(yīng)的資源標(biāo)識給瀏覽器。該資源標(biāo)識就是對當(dāng)前所返回資源的一種唯一標(biāo)識,可以是Etag或者是Last-Modified,這兩個(gè)字段將在圖例結(jié)束后展開講解。

之后如果瀏覽器再次發(fā)送請求時(shí),瀏覽器就會帶上這個(gè)資源標(biāo)識。此時(shí),服務(wù)端就會通過這個(gè)資源標(biāo)識,可以判斷出瀏覽器的資源跟服務(wù)端此時(shí)的資源是否一致,如果一致,則返回304,即表示Not Found 資源未修改。如果判斷結(jié)果為不一致,則返回200,并返回資源以及新的資源標(biāo)識。至此就結(jié)束了協(xié)商緩存的過程。


接下來看第二張圖。

假設(shè)此時(shí)我們的協(xié)商緩存用 Last-Modified 來判斷。當(dāng)瀏覽器第一次發(fā)送請求時(shí),服務(wù)器返回資源并返回一個(gè) Last-Modified 的值給瀏覽器。這個(gè) Last-Modified 的值給到瀏覽器之后,瀏覽器會通過 If-Modified-Since 的字段來保存 Last-Modified 的值,且 If-Modified-Since 保存在請求頭當(dāng)中。

之后當(dāng)瀏覽器再次發(fā)送請求時(shí),請求頭會帶著 If-Modified-Since 的值去找服務(wù)器,服務(wù)器此刻就會匹配瀏覽器發(fā)過來的 If-Modified-Since 是否和自己最后一次修改的 Last-Modified 的值相等。如果相等,則返回 304 ,表示資源未被修改;如果不相等,則返回200,并返回資源和新的 Last-Modified 的值。


接下來看第三張圖。

假設(shè)此時(shí)我們的協(xié)商緩存用 Etag 來判斷。當(dāng)瀏覽器第一次發(fā)送請求時(shí),服務(wù)器返回資源并返回一個(gè) Etag 的值給瀏覽器。這個(gè) Etag 的值給到瀏覽器之后,瀏覽器會通過 If-None-Match 的字段來保存 Etag 的值,且 If-None-Match 保存在請求頭當(dāng)中。

之后當(dāng)瀏覽器再次發(fā)送請求時(shí),請求頭會帶著 If-None-Match 的值去找服務(wù)器,服務(wù)器此刻就會匹配瀏覽器發(fā)過來的 If-None-Match 是否和自己最后一次修改的 Etag 的值相等。如果相等,則返回 304 ,表示資源未被修改;如果不相等,則返回 200 ,并返回資源和新的 Etag 的值。

通過圖例,相信大家對協(xié)商緩存有了一個(gè)新的認(rèn)識。接下來講解剛剛圖例中所包含的一些字段。

3)資源標(biāo)識

在響應(yīng)頭部 Response Headers 中,有兩種資源標(biāo)識:

  • Last-Modified 資源的最后修改時(shí)間,對應(yīng)請求頭為 If-Modified-Since ;

  • Etag 資源的唯一標(biāo)識,所謂唯一,可以想象成時(shí)人類的指紋,具有唯一性;但 Etag 的本質(zhì)是一個(gè)字符串;對應(yīng)請求頭為 If-None-Match

4)Last-Modified 和 Etag

  • 當(dāng)響應(yīng)頭部 Response Headers 同時(shí)存在 Last-ModifiedEtag 的值時(shí),會優(yōu)先使用 Etag ;

  • Last-Modified 只能精確到秒級;

  • 如果資源被重復(fù)生成,而內(nèi)容不變,則 Etag 更精確。

5)Headers 示例

由上圖可以看到,響應(yīng)頭中的 Last-Modified 對應(yīng)請求頭中的 If-Modified-SinceEtag 對應(yīng)請求頭中的 If-None-Match 。

6)流程圖

說到這里,協(xié)商緩存的內(nèi)容也快結(jié)束啦!最后的最后,我們用一張流程圖來展示協(xié)商緩存的全過程。

7)協(xié)商緩存為什么要有兩種呢?

有時(shí)候我們的網(wǎng)站是分布式部署在多臺服務(wù)器上,一個(gè)資源文件可能在每臺服務(wù)器上都有副本,相應(yīng)地資源文件被修改時(shí),新的文件要同步到各個(gè)服務(wù)器上,導(dǎo)致各個(gè)文件副本的修改時(shí)間不一定相同。那么當(dāng)用戶一次訪問請求的服務(wù)器和另一次訪問請求的服務(wù)器不同時(shí),就有可能因?yàn)閮蓚€(gè)文件副本的修改時(shí)間不同而使得Last-Modified形式的協(xié)商緩存失效。

如果這種情況采用Etag形式的協(xié)商緩存,根據(jù)文件內(nèi)容而不是修改時(shí)間來判斷緩存,就不會有這個(gè)問題了。

3、刷新操作方式,對緩存的影響

講完緩存,我們再來講個(gè)有點(diǎn)重要但是有點(diǎn)題外話的內(nèi)容:刷新操作。我們平常在上網(wǎng)時(shí),總有某個(gè)時(shí)刻突然網(wǎng)卡了,這個(gè)時(shí)候人的本性總是非常不耐煩的,毫不猶豫的就來個(gè)刷新。但殊不知,刷新對緩存也存在一定的影響。下面我們一起來看下各種刷新姿勢以及其對緩存的影響。

(1)正常操作

定義: 地址欄輸入 url ,跳轉(zhuǎn)鏈接,前進(jìn)后退等。

對緩存的影響: 強(qiáng)制緩存有效,協(xié)商緩存有效。

(2)手動刷新

定義:  F5 ,點(diǎn)擊刷新按鈕,右擊菜單刷新。

對緩存的影響: 強(qiáng)制緩存失效,協(xié)商緩存有效。

(3)強(qiáng)制刷新

定義: ctrl + F5 。

對緩存的影響: 強(qiáng)制緩存失效,協(xié)商緩存失效。

這一塊內(nèi)容僅當(dāng)娛樂補(bǔ)充,大家可以根據(jù)自身需求學(xué)習(xí)~




該文章在 2023/7/19 17:01:10 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved