網(wǎng)站開(kāi)發(fā)中如何保證HTML頁(yè)面后退不會(huì)被緩存
發(fā)布時(shí)間:2018-08-22 作者:低價(jià)網(wǎng)站建設(shè)
微信的登錄,掃二維碼碼之后,可以通過(guò)微信給的code去獲取用戶的微信信息,顯示出對(duì)應(yīng)的帳號(hào)列表(列表頁(yè)),選擇登錄之后跳轉(zhuǎn)至相應(yīng)的頁(yè)面。
網(wǎng)站開(kāi)發(fā)中如何保證HTML頁(yè)面后退不會(huì)被緩存
測(cè)試的時(shí)候發(fā)現(xiàn),如果在跳轉(zhuǎn)后的頁(yè)面,點(diǎn)擊瀏覽器返回,還是會(huì)顯示登錄帳號(hào)列表。這時(shí)候登錄是會(huì)失敗的,因?yàn)橐呀?jīng)登錄過(guò),沒(méi)有了半登錄態(tài),應(yīng)該需要重新掃碼登錄才行。
所以列表頁(yè)是完全不能被緩存的,而瀏覽器的前進(jìn)后退,默認(rèn)會(huì)從緩存里讀取,完全不發(fā)請(qǐng)求。
打開(kāi)Chrome的開(kāi)發(fā)者工具調(diào)試的時(shí)候發(fā)現(xiàn),如果勾選Network的Disable cache,瀏覽器后退的時(shí)候,結(jié)果頁(yè)不會(huì)被緩存。如果不勾選則緩存頁(yè)面。用戶是不會(huì)主動(dòng)開(kāi)啟這個(gè)選項(xiàng)的,所以需要通過(guò)Headers控制頁(yè)面的緩存。
Request
勾選與不勾選Disable cache的差別在于
Request Headers的Cache是否會(huì)被設(shè)置為Cache-Control: no-cache、Pragma: no-cache
Response
有設(shè)置Cache為Cache-Control: no-cache, must-revalidate。但是為什么頁(yè)面還是會(huì)緩存了呢?
而Request為瀏覽器發(fā)送,不能進(jìn)行設(shè)置,只能從Response著手。
解決方案為設(shè)置Cache為Cache-Control: no-store, no-cache, must-revalidate
no-cache與no-store
“no-cache”表示必須先與服務(wù)器確認(rèn)返回的響應(yīng)是否發(fā)生了變化,然后才能使用該響應(yīng)來(lái)滿足后續(xù)對(duì)同一網(wǎng)址的請(qǐng)求。因此,如果存在合適的驗(yàn)證令牌 (ETag),no-cache 會(huì)發(fā)起往返通信來(lái)驗(yàn)證緩存的響應(yīng),但如果資源未發(fā)生變化,則可避免下載。
相比之下,“no-store”則要簡(jiǎn)單得多。它直接禁止瀏覽器以及所有中間緩存存儲(chǔ)任何版本的返回響應(yīng),例如,包含個(gè)人隱私數(shù)據(jù)或銀行業(yè)務(wù)數(shù)據(jù)的響應(yīng)。每次用戶請(qǐng)求該資產(chǎn)時(shí),都會(huì)向服務(wù)器發(fā)送請(qǐng)求,并下載完整的響應(yīng)。
再次觀察頁(yè)面的請(qǐng)求,發(fā)現(xiàn)雖然設(shè)置了no-cache,但是沒(méi)有設(shè)置ETag可以進(jìn)行校驗(yàn),最終還是從緩存里讀取。
關(guān)于HTTP,還是需要不斷的學(xué)習(xí),才能深入理解并使用。
網(wǎng)站開(kāi)發(fā)中如何保證HTML頁(yè)面后退不會(huì)被緩存
測(cè)試的時(shí)候發(fā)現(xiàn),如果在跳轉(zhuǎn)后的頁(yè)面,點(diǎn)擊瀏覽器返回,還是會(huì)顯示登錄帳號(hào)列表。這時(shí)候登錄是會(huì)失敗的,因?yàn)橐呀?jīng)登錄過(guò),沒(méi)有了半登錄態(tài),應(yīng)該需要重新掃碼登錄才行。
所以列表頁(yè)是完全不能被緩存的,而瀏覽器的前進(jìn)后退,默認(rèn)會(huì)從緩存里讀取,完全不發(fā)請(qǐng)求。
打開(kāi)Chrome的開(kāi)發(fā)者工具調(diào)試的時(shí)候發(fā)現(xiàn),如果勾選Network的Disable cache,瀏覽器后退的時(shí)候,結(jié)果頁(yè)不會(huì)被緩存。如果不勾選則緩存頁(yè)面。用戶是不會(huì)主動(dòng)開(kāi)啟這個(gè)選項(xiàng)的,所以需要通過(guò)Headers控制頁(yè)面的緩存。
Request
勾選與不勾選Disable cache的差別在于
Request Headers的Cache是否會(huì)被設(shè)置為Cache-Control: no-cache、Pragma: no-cache
Response
有設(shè)置Cache為Cache-Control: no-cache, must-revalidate。但是為什么頁(yè)面還是會(huì)緩存了呢?
而Request為瀏覽器發(fā)送,不能進(jìn)行設(shè)置,只能從Response著手。
解決方案為設(shè)置Cache為Cache-Control: no-store, no-cache, must-revalidate
no-cache與no-store
“no-cache”表示必須先與服務(wù)器確認(rèn)返回的響應(yīng)是否發(fā)生了變化,然后才能使用該響應(yīng)來(lái)滿足后續(xù)對(duì)同一網(wǎng)址的請(qǐng)求。因此,如果存在合適的驗(yàn)證令牌 (ETag),no-cache 會(huì)發(fā)起往返通信來(lái)驗(yàn)證緩存的響應(yīng),但如果資源未發(fā)生變化,則可避免下載。
相比之下,“no-store”則要簡(jiǎn)單得多。它直接禁止瀏覽器以及所有中間緩存存儲(chǔ)任何版本的返回響應(yīng),例如,包含個(gè)人隱私數(shù)據(jù)或銀行業(yè)務(wù)數(shù)據(jù)的響應(yīng)。每次用戶請(qǐng)求該資產(chǎn)時(shí),都會(huì)向服務(wù)器發(fā)送請(qǐng)求,并下載完整的響應(yīng)。
再次觀察頁(yè)面的請(qǐng)求,發(fā)現(xiàn)雖然設(shè)置了no-cache,但是沒(méi)有設(shè)置ETag可以進(jìn)行校驗(yàn),最終還是從緩存里讀取。
關(guān)于HTTP,還是需要不斷的學(xué)習(xí),才能深入理解并使用。
友情鏈接
昆明網(wǎng)站建設(shè)昆明網(wǎng)站制作昆明網(wǎng)站設(shè)計(jì)昆明網(wǎng)站制作昆明網(wǎng)站開(kāi)發(fā)云南網(wǎng)站建設(shè)云南網(wǎng)站制作云南網(wǎng)站設(shè)計(jì)云南網(wǎng)站制作云南網(wǎng)站開(kāi)發(fā)集團(tuán)網(wǎng)站建設(shè)政府網(wǎng)站建設(shè)學(xué)校網(wǎng)站建設(shè)公司網(wǎng)站建設(shè)企業(yè)網(wǎng)站建設(shè)房地產(chǎn)網(wǎng)站建設(shè)昆明微信建設(shè)云南微信建設(shè)昆明微商城建設(shè)云南微商城建設(shè)成都網(wǎng)站建設(shè)北京網(wǎng)站建設(shè)上海網(wǎng)站建設(shè)深圳網(wǎng)站建設(shè)廣州網(wǎng)站建設(shè)重慶網(wǎng)站建設(shè)昆明哪家網(wǎng)站建設(shè)服務(wù)好如何制作自己的網(wǎng)站企業(yè)如何建網(wǎng)站昆明網(wǎng)站建設(shè)哪家便宜網(wǎng)站建設(shè)7個(gè)基本流程網(wǎng)站建設(shè)方案網(wǎng)站建設(shè)介紹網(wǎng)站制作需要多少錢做個(gè)電商網(wǎng)站多少錢網(wǎng)站建設(shè)多少錢一個(gè)網(wǎng)站建設(shè)哪家便宜云南恩田智能