国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > 網(wǎng)頁設計 > 正文

UrlRewriter 緩存問題及一系列的相關探索

2024-08-30 08:35:01
字體:
來源:轉載
供稿:網(wǎng)友

在開發(fā)一個網(wǎng)站功能時,由于session 緩存不能及時清除。開始了一系列的探索。

現(xiàn)找到幾篇不錯的文章。

首先是 F5和 CTRL+F5的區(qū)別

F5和CTRL+F5的區(qū)別
(留給比較懶的人 :F5是優(yōu)先讀取緩存但框架內只讀取本地緩存 。CTRL+F5發(fā)起一次新的請求,跳過緩存)

背景

我司的網(wǎng)站是框架結構的,一個頁面里有多個iframe.正因為這個原因,每次當我自信滿滿的把修改過的JS文件提交到SVN上后,沒過多久,某個 后臺程序員就會來找我說:怎么JS還報錯呢,我已經(jīng)CTRL+F5了啊,你提交對了嗎.我只好到他座位上拿起鼠標進行操作:右鍵->本幀-> 在新標簽中打開新幀->CTRL+F5->切換到原標簽->F5.這一番操作之后,終于對了.同樣的事情已經(jīng)發(fā)生過很多次了.這也證明 了不少程序員同志還是不夠了解瀏覽器的緩存機制.

基礎知識

問題的根本原因就是,在火狐里,CTRL+F5清除不了框架頁面的緩存.包括框架頁面本身和其所有的嵌入元素(.js,.css,.jpg等).所以本文的真正標題是"Firefox中如何才能跳過緩存刷新框架內的頁面".首先我要講一下相關的基礎知識.

一.讀取緩存

搞WEB開發(fā)的經(jīng)常會說:有緩存,CTRL+F5一下.或者:有緩存,CTRL+SHIFT+DEL清一下.那么你知道瀏覽器有幾種方式來讀取緩存文件嗎.從是否發(fā)送了HTTP請求來區(qū)分,我覺的可以分兩種:

1.瀏覽器從服務器返回的過期時間判斷得出,該文件還沒有過期,所以直接從緩存文件夾讀取緩存文件,顯示網(wǎng)頁,并沒有走任何網(wǎng)絡連接.

2.瀏覽器發(fā)送HTTP請求,請求頭中包含了If-Modified-Since 和 If-None-Match字段.讓服務器來判斷是否應該讀取緩存文件.如果服務器返回304響應,無響應實體,表示服務器認為這個文件沒有變化.可以使 用緩存中的對應文件,這時瀏覽器才會讀取緩存.(如果不了解HTTP,可以買本<<HTTP權威指南>>看看.或者直接RFC2616)

我把第一種讀取緩存的方式稱之為"無請求讀取緩存",第二種方式稱之為"無修改讀取緩存".

二.刷新方式

這里的刷新方式是指能通過哪些方式讓一個網(wǎng)頁重新加載,我從表現(xiàn)上大概分了三種:

1.最常用的,點擊瀏覽器的刷新按鈕,或者按下F5

2.CTRL+F5,功能是跳過緩存刷新

3.瀏覽器地址欄上回車,IE里把這種請求方式歸為"導航"操作

在讀取緩存方面,這三種刷新方式的表現(xiàn)都不一樣.第三種方式的表現(xiàn)通常是只刷新主頁面文件,其他內嵌文件全部"無請求讀取緩存".大部分開發(fā)者都不會這么刷新頁面,所以本次試驗不對比這種刷新方式.

三.F5和CTRL+F5的區(qū)別

本文的試驗部分只針對F5和CTRL+F5兩種刷新方式做對比.這里講一下為什么F5不能跳過緩存,而后者可以.答案就是發(fā)送的請求頭不一樣.而且不同的瀏覽器發(fā)送的請求頭也有一些區(qū)別.

1.F5觸發(fā)的HTTP請求的請求頭中通常包含了If-Modified-Since 或 If-None-Match字段,或者兩者兼有.如果服務器認為被請求的文件沒有發(fā)生變化,則返回304響應,也就沒有跳過緩存.

2.CTRL+F5觸發(fā)的HTTP請求的請求頭中沒有上面的那兩個頭,卻有Pragma: no-cache 或 Cache-Control: no-cache 字段,或者兩者兼有.服務器看到no-cache這樣的值就會把最新的文件響應過去.也就跳過了緩存.

試驗對比

試驗題目為:使用F5和CTRL+F5在包含iframe的頁面上進行刷新操作,五大瀏覽器各自的表現(xiàn)不同.本次試驗使用Fiddler監(jiān)測網(wǎng)絡請求,而且不考慮緩存相關的HTTP響應頭的影響.

主頁面index.html源碼為

復制代碼
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 合水县| 漯河市| 普兰店市| 札达县| 玉溪市| 仁布县| 大石桥市| 宽甸| 安西县| 泰来县| 嘉峪关市| 乐昌市| 涞水县| 林西县| 曲沃县| 虎林市| 会昌县| 许昌县| 沭阳县| 舒兰市| 南平市| 邳州市| 乌兰浩特市| 金秀| 进贤县| 耒阳市| 抚宁县| 济宁市| 屏东县| 博野县| 台东县| 武平县| 虹口区| 荣成市| 扬中市| 年辖:市辖区| 洪泽县| 合肥市| 双柏县| 融水| 融水|