當前位置:首頁 » 文件管理 » 緩存304

緩存304

發布時間: 2022-09-21 02:23:36

㈠ HTTP緩存技術,304和200有何區別

當瀏覽器第一次載入資源的時候,返回一般為200,意思是成功獲取資源,並會在瀏覽器的緩存中記錄下max-age,第二次訪問的時候:
如果只是用瀏覽器打開,那麼瀏覽器會去判斷這個資源在緩存里有沒有,如果有的話,會去判斷max-age,看看過期沒有,如果沒有過期,則直接讀緩存,根本不會和伺服器進行交互,換句話說,斷網都能打開,就和本地跑一樣!如果已經過期了,那就去伺服器請求,等待伺服器響應,這是很費時間的,伺服器如果發現資源沒有改變過,那麼就會返回304,告訴瀏覽器,我沒變過,你去讀緩存吧,於是瀏覽器也不用從伺服器拉數據了,然而,等待伺服器響應也是一個很要命的問題,在網速發達的今天,等一個響應,有時比下載還慢。
如果是用瀏覽器刷新的,那麼瀏覽器不會去判斷max-age了,直接去伺服器拿,如果伺服器判斷資源沒變過,則還是會返回304,和上面是一樣的,所以刷新一下,其實很可怕,等於把所有的資源都要去伺服器請求一邊,問問伺服器我過期了沒有。
綜上,盡量減少網頁的資源數量!盡量合並JS CSS 圖片!響應速度將會猛增!
當今,響應速度比網速重要!!

㈡ 如何解決http請求304問題,304的原因很可能是緩存造成的

按你的代碼尋找你需要的解決方案
1、0x0000000A:IRQL_NOT_LESS_OR_EQUAL
◆錯誤分析:主要是由問題的驅動程序、有缺陷或不兼容的硬體與軟體造成的. 從技術角度講. 表明在內核模式中存在以太高的進程內部請求級別(IRQL)訪問其沒有許可權訪問的內存地址.
◇解決方案:請用前面介紹的解決方案中的2、3、5、8、9方案嘗試排除.

2、0x00000012:TRAP_CAUSE_UNKNOWN
◆錯誤分析:如果遇到這個錯誤信息, 那麼很不幸, 應為KeBudCheck分析的結果是錯誤原因
未知.
◇解決方案:既然微軟都幫不上忙, 就得靠自己了, 請仔細回想這個錯誤是什麼時候出現的; 第一次發生時你對系統做了哪些操作; 發生時正在進行什麼操作. 從這些信息中找出可能的原因, 從而選擇相應解決方案嘗試排除.

3、0x0000001A:MEMORY_MANAGEMENT
◆錯誤分析:這個內存管理錯誤往往是由硬體引起的, 比如: 新安裝的硬體、內存本身有問題等.
◇解決方案:如果是在安裝Windows時出現, 有可能是由於你的電腦達不到安裝Windows的最小內存和磁碟要求.

4、0x0000001E:KMODE_EXCEPTION_NOT_HANDLED
◆錯誤分析:Windows內核檢查到一個非法或者未知的進程指令, 這個停機碼一般是由問題的內存或是與前面0x0000000A相似的原因造成的.
◇解決方案:
(1)硬體兼容有問題:請對照前面提到的最新硬體兼容性列表, 查看所有硬體是否包含在該列表中.
(2)有問題的設備驅動、系統服務或內存沖突和中斷沖突: 如果在藍屏信息中出現了驅動程序的名字, 請試著在安裝模式或者故障恢復控制台中禁用或刪除驅動程序, 並禁用所有剛安裝的驅動和軟體. 如果錯誤出現在系統啟動過程中, 請進入安全模式, 將藍屏信息中所標明的文件重命名或者刪除.
(3)如果錯誤信息中明確指出Win32K.sys: 很有可能是第三方遠程式控制制軟體造成的, 需要從故障恢復控制台中將對該軟體的服務關閉.
(4)在安裝Windows後第一次重啟時出現:最大嫌疑可能時系統分區的磁碟空間不足或BIOS兼容有問題.
(5)如果是在關閉某個軟體時出現的:很有可能時軟體本省存在設計缺陷, 請升級或卸載它.

5、0x00000023:FAT_FILE_SYSTEM
0x00000024:NTFS_FILE_SYSTEM
◆錯誤分析:0x00000023通常發生在讀寫FAT16或者FAT32文件系統的系統分區時, 而
0x00000024則是由於NTFS.sys文件出現錯誤(這個驅動文件的作用是容許系統讀寫使用
NTFS文件系統的磁碟). 這兩個藍屏錯誤很有可能是磁碟本身存在物理損壞, 或是中斷要求封包(IRP)損壞而導致的. 其他原因還包括:硬碟磁碟碎片過多; 文件讀寫操作過於頻繁, 並且數據量非常達或者是由於一些磁碟鏡像軟體或殺毒軟體引起的.
◇解決方案:
第一步:首先打開命令行提示符, 運行"Chkdsk /r"(注:不是CHKDISK, 感覺象這個, 但是……)命令檢查並修復硬碟錯誤, 如果報告存在懷道(Bad Track), 請使用硬碟廠商提供的檢查工具進行檢查和修復.
第二步:接著禁用所有即使掃描文件的軟體, 比如:殺毒軟體、防火牆或備份工具.
第三步:右擊C:\winnt\system32\drivers\fastfat.sys文件並選擇"屬性", 查看其版本是否與當前系統所使用的Windows版本相符.(注:如果是XP, 應該是C:\windows\system32
\drivers\fastfat.sys)
第四步:安裝最新的主板驅動程序, 特別IDE驅動. 如果你的光碟機、可移動存儲器也提供有驅動程序, 最好將它們升級至最新版.

6、0x00000027:RDR_FILE_SYSTEM
◆錯誤分析:這個錯誤產生的原因很難判斷, 不過Windows內存管理出了問題很可能會導致這個停機碼的出現.
◇解決方案:如果是內存管理的緣故, 通常增加內存會解決問題.

7、0x0000002EATA_BUS_ERROR
◆錯誤分析:系統內存存儲器奇偶校驗產生錯誤, 通常是因為有缺陷的內存(包括物理內存、二級緩存或者顯卡顯存)時設備驅動程序訪問不存在的內存地址等原因引起的. 另外, 硬碟被病毒或者其他問題所損傷, 以出現這個停機碼.
◇解決方案:
(1)檢查病毒
(2)使用"chkdsk /r"命令檢查所有磁碟分區.
(3)用Memtest86等內存測試軟體檢查內存.
(4)檢查硬體是否正確安裝, 比如:是否牢固、金手指是否有污漬.

8、0x00000035:NO_MORE_IRP_STACK_LOCATIONS
◆錯誤分析:從字面上理解, 應該時驅動程序或某些軟體出現堆棧問題. 其實這個故障的真正原因應該時驅動程序本省存在問題, 或是內存有質量問題.
◇解決方案:請使用前面介紹的常規解決方案中與驅動程序和內存相關的方案進行排除.

9、0x0000003F:NO_MORE_SYSTEM_PTES
◆錯誤分析:一個與系統內存管理相關的錯誤, 比如:由於執行了大量的輸入/輸出操作, 造成內存管理出現問題: 有缺陷的驅動程序不正確地使用內存資源; 某個應用程序(比如:備份軟體)被分配了大量的內核內存等.
◇解決方案:卸載所有最新安裝的軟體(特別是哪些增強磁碟性能的應用程序和殺毒軟體)和驅動程序.

10、0x00000044:MULTIPLE_IRP_COMPLIETE_REQUESTS
◆錯誤分析:通常是由硬體驅動程序引起的.
◇解決方案:卸載最近安裝的驅動程序. 這個故障很少出現, 目前已經知道的是, 在使用
www.in-system.com/這家公司的某些軟體時會出現, 其中的罪魁就是Falstaff.sys文件.(作者難道不怕吃官司嘛, 把公司網址公布)

11、0x00000050: PAGE_FAULT_IN_NONPAGED+AREA
◆錯誤分析:有問題的內存(包括屋裡內存、二級緩存、顯存)、不兼容的軟體(主要是遠程式控制制和殺毒軟體)、損壞的NTFS卷以及有問題的硬體(比如: PCI插卡本身已損壞)等都會引發這個錯誤.
◇解決方案:請使用前面介紹的常規解決方案中與內存、軟體、硬體、硬碟等相關的方案進行排除.

12、0x00000051:REGISTRY_ERROR
◆錯誤分析:這個停機碼說明注冊表或系統配置管理器出現錯誤, 由於硬碟本身有物理損壞或文件系統存在問題, 從而造成在讀取注冊文件時出現輸入/輸出錯誤.
◇解決方案:使用"chkdsk /r"檢查並修復磁碟錯誤.

13、0x00000058:FTDISK_INTERNAL_ERROR
◆錯誤分析:說明在容錯集的主驅動發生錯誤.
◇解決方案:首先嘗試重啟電腦看是否能解決問題, 如果不行, 則嘗試"最後一次正確配置"進行解決.

14、0x0000005E:CRITICAL_SERVICE_FAILED
◆錯誤分析:某個非常重要的系統服務啟動識別造成的.
◇解決方案:如果是在安裝了某個新硬體後出新的, 可以先移除該硬體, 並通過網上列表檢查它是否與Windows 2K/XP兼容, 接著啟動電腦, 如果藍屏還是出現, 請使用"最後一次正確配置"來啟動Windows, 如果這樣還是失敗, 建議進行修復安裝或是重裝.

15、0x0000006F:SESSION3_INITIALIZATION-FAILED
◆錯誤分析:這個錯誤通常出現在Windows啟動時, 一般是由有問題的驅動程序或損壞的系統文件引起的.
◇解決方案:建議使用Windows安裝光碟對系統進行修復安裝.

16、0x00000076ROCESS_HAS_LOCKED_PAGES
◆錯誤分析:通常是因為某個驅動程序在完成了一次輸入/輸出操作後, 沒有正確釋放所佔有的內存
◇解決方案:
第一步:點擊開始-->運行:regedt32, 找到[HKLM\SYSTEM\Currentcontrol set\control\session manager\memory management], 在右側新建雙位元組值"TrackLockedPages", 值為1. 這樣Windows便會在錯誤再次出現時跟蹤到是哪個驅動程序的問題.第二步:如果再次出現藍屏, 那麼錯誤信息會變成:STOP:0x0000000CB(0xY,0xY,0xY,0xY) DRIVER_LEFT_LOCKED_PAGES_IN_PROCESS其中第四個"0xY"會顯示為問題驅動程序的名字, 接著對其進行更新或刪除.第三步:進入注冊表, 刪除添加的"TrackLockedPages".

17、0x00000077:KERNEL_STACK_INPAGE_ERROR
◆錯誤分析:說明需要使用的內核數據沒有在虛擬內存或物理內存中找到. 這個錯誤常常於是著磁碟有問題, 相應數據損壞或受到病毒侵蝕.
◇解決方案:使用殺毒軟體掃描系統; 使用"chkdsk /r"命令檢查並修復磁碟錯誤, 如不行則使用磁碟廠商提供的工具檢查修復.

18、0x0000007A:KERNEL_DATA_INPAGE_ERROR
◆錯誤分析:這個錯誤往往是虛擬內存中的內核數據無法讀入內存造成的. 原因可能是虛擬內存頁面文件中存在壞簇、病毒、磁碟控制器出錯、內存有問題.
◇解決方案:首先用升級為最新病毒庫殺毒軟體查殺病毒, 如果促無信息中還0xC000009C
或0xC000016A代碼, 那麼表示是壞簇造成的, 並且系統的磁碟檢測工具無法自動修復, 這時要進入"故障恢復控制台", 用"chkdsk /r"命令進行手動修復.

19、0x0000007B:INACESSIBLE_BOOT_DEVICE
◆錯誤分析:Windows在啟動過程中無法訪問系統分區或啟動卷. 一般發生在更換主板後第一次啟動時, 主要是因為新主板和舊主板的IDE控制器使用了不同晶元組造成的. 有時也可能是病毒或硬碟損傷所引起的.
◇解決方案:一般只要用安裝光碟啟動電腦, 然後執行修復安裝即可解決問題. 對於病毒則可使用DOS版的殺毒軟體進行查殺(主戰有kv2005DOS版下載). 如果是硬碟本身存在問題, 請將其安裝到其他電腦中, 然後使用"chkdsk /r"來檢查並修復磁碟錯誤.

20、0x0000007E:SYSTEM_THREAD_EXCEPTION_NOT_HANDLED
◆錯誤分析:系統進程產生錯誤, 但Windows錯誤處理器無法捕獲. 其產生原因很多, 包括:硬體兼容性、有問題的驅動程序或系統服務、 或者是某些軟體.
◇解決方案:請使用"事件查看器"來獲取更多的信息, 從中發現錯誤根源.(發現好像不是解決哦, 看來這里大家要自力更生了!)

21、0x0000007F:UNEXPECTED_KERNEL_MOED_TRAP
◆錯誤分析:一般是由於有問題的硬體(比如:內存)或某些軟體引起的. 有時超頻也會產生這個錯誤.
◇解決方案:用檢測軟體(比如:Memtest86)檢查內存, 如果進行了超頻, 請取消超頻. 將PCI硬體插卡從主板插槽拔下來, 或更換插槽. 另外, 有些主板(比如:nForce2主板)在進行超頻後, 南橋晶元過熱也會導致藍屏, 此時為該晶元單獨增加散熱片往往可以有效解決問題.

22、0x00000080:NMI_HARDWARE_FAILURE
◆錯誤分析:通常是有硬體引起的.(似乎藍屏與硬體錯誤有不解之緣)
◇解決方案:如果最近安裝了新硬體, 請將其移除, 然後試試更換插槽和安裝最新的驅動程序, 如果升級了驅動程序, 請恢復後原來的版本; 檢查內存金手指是否有污染和損壞; 掃描病毒; 運行"chkdsk /r"檢查並修復磁碟錯誤; 檢查所有硬體插卡已經插牢. 如果以上嘗試都無效果, 就得找專業的電腦維修公司請求幫助了.

23、0x0000008E:KERNEL_MODE_EXCEPTION_NOT_HANDLED
◆錯誤分析:內核級應用程序產生了錯誤, 但Windows錯誤處理器沒有捕獲. 通常是硬體兼容性錯誤.
◇解決方案:升級驅動程序或升級BIOS.

24、0x0000009C:MACHINE_CHECK_EXCEPTION
◆錯誤分析:通常是硬體引起的. 一般是因為超頻或是硬體存在問題(內存、CPU、匯流排、電
源).
◇解決方案:如果進行了超頻, 請降會CPU原來頻率, 檢查硬體.

25、0x0000009FRIVER_POWER_STATE_FAILURE
◆錯誤分析:往往與電源有關系, 常常發生在與電源相關的操作, 比如:關機、待機或休睡.
◇解決方案:重裝系統, 如果不能解決, 請更換電源.

26、0x000000A5:ACPI_BIOS_ERROR
◆錯誤分析:通常是因為主板BIOS不能全面支持ACPI規范.
◇解決方案:如果沒有相應BIOS升級, 那麼可在安裝Windows 2K/XP時, 當出現"press F6 if you need to install a third-party SCSI or RAID driver"提示時, 按下F7鍵, 這樣Windows便會自動禁止安裝ACPI HAL, 而安裝 Standard PC HAL.

27、0x000000B4:VIDEO_DRIVER_INIT_FAILURE
◆錯誤分析:這個停止信息表示Windows因為不能啟動顯卡驅動, 從而無法進入圖形界面. 通常是顯卡的問題, 或者是存在與顯卡的硬體沖突(比如:與並行或串列埠沖突).
◇解決方案:進入安全模式查看問題是否解決, 如果可以, 請升級最新的顯卡驅動程序, 如果還不行, 則很可能是顯卡與並行埠存在沖突, 需要在安全模式按下WIN+break組合鍵打開"系統屬性", 在硬體-->設備管理器中找到並雙擊連接列印的LPT1埠的項, 在"資源"選項卡中取消"使用自動配置"的構選, 然後將"輸入/輸出范圍"的"03BC"改為"0378".

28、0x000000BE:ATTEMPTED_WRITE_TO_READONLY_MEMORY
◆錯誤分析:某個驅動程序試圖向只讀內存寫入數據造成的. 通常是在安裝了新的驅動程序, 系統服務或升級了設備的固件程序後.
◇解決方案:如果在錯誤信息中包含有驅動程序或者服務文件名稱, 請根據這個信息將新安裝的驅動程序或軟體卸載或禁用.

29、0x000000C2:BAD_POOL_CALLER
◆錯誤分析:一個內核層的進程或驅動程序錯誤地試圖進入內存操作. 通常是驅動程序或存在BUG的軟體造成的.
◇解決方案:請參考前面介紹的常規解決方案相關項目進行排除.

30、0x000000CERIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS
◆錯誤分析:通常是由有問題的驅動程序或系統服務造成的.
◇解決方案:請參考前面介紹的常規解決方案相關項目進行排除.

31、0x000000D1RIVER_IRQL_NOT_LESS_OR_EQUAL
◆錯誤分析:通常是由有問題的驅動程序引起的(比如羅技滑鼠的Logitech MouseWare 9.10和9.24版驅動程序會引發這個故障). 同時,有缺陷的內存、 損壞的虛擬內存文件、某些軟體(比如多媒體軟體、殺毒軟體、備份軟體、DVD播放軟體)等也會導致這個錯誤.
◇解決方案:檢查最新安裝或升級的驅動程序(如果藍屏中出現"acpi.sys"等類似文件名, 可以非常肯定時驅動程序問題)和軟體; 測試內存是否存在問題; 進入"故障恢復控制台", 轉到虛擬內存頁面文件Pagefile.sys所在分區, 執行"del pagefile.sys"命令, 將頁面文件刪除; 然後在頁面文件所在分區執行"chkdsk /r"命令;進入Windows後重新設置虛擬內存.如果在上網時遇到這個藍屏, 而你恰恰又在進行大量的數據下載和上傳(比如:網路游戲、BT下載), 那麼應該是網卡驅動的問題, 需要升級其驅動程序.

32、0x000000EA:THREAD_STUCK_IN_DEVICE_DRIVER
◆錯誤分析:通常是由顯卡或顯卡驅動程序引發的.
◇解決方案:先升級最新的顯卡驅動, 如果不行, 則需要更換顯卡測試故障是否依然發生.

33、0x000000ED:UNMOUNTABLE_BOOT_VOLUME
◆錯誤分析:一般是由於磁碟存在錯誤導致的, 有時也建議檢查硬碟連線是否接觸不良, 或是沒有使用合乎該硬碟傳輸規格的連接線, 例如ATA-100仍使用ATA-33的連接線, 對低速硬碟無所謂, 但告訴硬碟(支持ATA-66以上)的要求較嚴格, 規格不對的連線有時也會引起這類沒辦法開機的故障. 如果在修復後, 還是經常出現這個錯誤, 很可能是硬碟損壞的前兆.
◇解決方案:一般情況下, 重啟會解決問題, 不管怎麼樣都建議執行"chkdsk /r"命令來檢查修復硬碟

34、0x000000F2:HARDWARE)INTERRUPT_STORM
◆錯誤分析:內核層檢查到系統出現中斷風暴, 比如:某個設備在完成操作後沒有釋放所佔用
的中斷. 通常這是由缺陷的驅動程序造成的.
◇解決方案:升級或卸載最新安裝的硬體驅動程序.

35、0x00000135:UNABLE_TO_LOCATE_DLL
◆錯誤分析:通常表示某個文件丟失或已經損壞, 或者是注冊表出現錯誤.
◇解決方案:如果是文件丟失或損壞, 在藍屏信息中通常會顯示相應的文件名, 你可以通過網路或是其他電腦找到相應的文件, 並將其復制到系統文件夾下的SYSTEM32子文件夾中. 如果沒有顯示文件名, 那就很有可能是注冊表損壞, 請利用系統還原或是以前的注冊表備份進行恢復.

36、0x0000021A:STATUS_SYSTEM_PROCESS_TERMINATED
◆錯誤分析:用戶模式子系統, 例如Winlogon或客服服務運行時子系統(CSRSS)已損壞, 所以無法再保證安全性, 導致系統無法啟動. 有時, 當系統管理員錯誤地修改了用戶帳號許可權, 導致其無法訪問系統文件和文件夾.
◇解決方案:使用"最後一次正確的配置", 如果無效, 可使用安裝光碟進行修復安裝.

37、STOP 0xC0000221 or STATUS_IMAGE_CHECKSUM_MISMATCH
◆錯誤分析:通常是由於驅動程序或系統DLL文件損壞造成的. 一般情況下, 在藍屏中會出現
文件名稱
◇解決方案:
(1)使用Windows安裝光碟進行修復安裝;
(2)如果還能進入安全模式, 可以"開始-->運行": sfc /scannow
(3)還可以採用提取文件的方法來解決, 進入"故障恢復控制台", 使用或expand命令從光碟中復制或解壓受損的文件. 不過, 藍屏一般都是驅動程序文件的問題, 所以expand命令會用的都一些, 比如:藍屏中提示tdi.sys文件, 因為驅動文件一般在i386\driver壓縮包里, 所以使用: expand %CDROM:\i386\driver.cab \f:tdi.sys c:\winnt\system\drivers.(xp為expand %CDROM:\i386\driver.cab \f:tdi.sys c:\windowns\system\drivers)

㈢ 瀏覽器緩存機制

有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

㈣ 什麼時候會使用瀏覽器的緩存,什麼時候會返回304,什麼時候返回404

你可以使用360安全衛士電腦清理功能清理,用它就可以清理瀏覽器緩沖。

㈤ HTTP緩存技術304和200有何區別

當瀏覽器第一次載入資源的時候,返回一般為200,意思是成功獲取資源,並會在瀏覽器的緩存中記錄下max-age,第二次訪問的時候:
如果只是用瀏覽器打開,那麼瀏覽器會去判斷這個資源在緩存里有沒有,如果有的話,會去判斷max-age,看看過期沒有,如果沒有過期,則直接讀緩存,根本不會和伺服器進行交互,換句話說,斷網都能打開,就和本地跑一樣!如果已經過期了,那就去伺服器請求,等待伺服器響應,這是很費時間的,伺服器如果發現資源沒有改變過,那麼就會返回304,告訴瀏覽器,我沒變過,你去讀緩存吧,於是瀏覽器也不用從伺服器拉數據了,然而,等待伺服器響應也是一個很要命的問題,在網速發達的今天,等一個響應,有時比下載還慢。
如果是用瀏覽器刷新的,那麼瀏覽器不會去判斷max-age了,直接去伺服器拿,如果伺服器判斷資源沒變過,則還是會返回304,和上面是一樣的,所以刷新一下,其實很可怕,等於把所有的資源都要去伺服器請求一邊,問問伺服器我過期了沒有。
綜上,盡量減少網頁的資源數量!盡量合並JS CSS 圖片!響應速度將會猛增!
當今,響應速度比網速重要!!

㈥ 如圖,httpwatch測試中,有的圖片的狀態碼是304,有的是緩存。怎麼實現緩存的狀態碼請給個例子

304狀態碼是表示自從上次請求後,請求的網頁未修改過。伺服器返回此響應時,不會返回網頁內容。
同時你可以看到圖片上顯示304狀態碼的有數據傳輸,是伺服器端設置了不允許緩存該文件。但當網頁未修改時,返回狀態碼304.

㈦ 瀏覽器文件緩存和304的區別

一般情況下,
瀏覽器在發請求前,感覺自己可能緩存了某個文件,就先把自己緩存的文件信息放在請求頭里。
伺服器在發送響應前,對比一下這個文件信息,發現瀏覽器緩存的文件就是它,於是決定不發送整個文件內容,直接告訴瀏覽器 304 。
瀏覽器接收到 304 時,就知道原來我緩存的就是跟伺服器端一樣的文件,於是就直接拿本地緩存來用了。
如果伺服器發現瀏覽器的緩存文件信息已經是舊的了,伺服器就直接正常的發送文件內容,瀏覽器正常的接收文件內容了。

㈧ 瀏覽器文件緩存和304的區別

一般情況下,
瀏覽器在發請求前,感覺自己可能緩存了某個文件,就先把自己緩存的文件信息放在請求頭里。
伺服器在發送響應前,對比一下這個文件信息,發現瀏覽器緩存的文件就是它,於是決定不發送整個文件內容,直接告訴瀏覽器 304 。
瀏覽器接收到 304 時,就知道原來我緩存的就是跟伺服器端一樣的文件,於是就直接拿本地緩存來用了。
如果伺服器發現瀏覽器的緩存文件信息已經是舊的了,伺服器就直接正常的發送文件內容,瀏覽器正常的接收文件內容了。

㈨ Okhttp解析(五)緩存的處理

大家好,之前我們講解了Okhttp網路數據請求相關的內容,這一節我們講講數據緩存的處理。本節按以下內容講解Okhttp緩存相關的內容。

緩存的使用場景很多,通過它可以將數據通過一定的規則存儲起來,再次請求數據的時候就可以快速從緩存中讀取了,緩存有以下優勢。

HTTP本身提供了一套緩存相關的機制。這套機制定義了相關的欄位和規則,用來客戶端和服務端進行緩存相關的協商,如響應的數據是否需要緩存,緩存有效期,緩存是否有效,伺服器端給出指示,而客戶端則根據服務端的指示做具體的緩存更新和讀取緩存工作。http緩存可以分為兩類:

強制緩存,在緩存數據未失效的情況下,可以直接使用緩存數據,有兩個欄位Expires和Cache-Control用於標明失效規則。

表示過期時間,由服務端返回。那麼下次請求數據時,判斷這個Expires過期時間是否已經過了,如果還沒有到過期時間,則使用緩存,如果過了過期時間,則重新請求伺服器的數據。Expires格式如下:

不過因為伺服器和客戶端的時間並不是同步的,用一個絕對時間作為過期的標記並不是很明智,所以HTTP1.1之後更多的是Cache-Control,它的控制更加靈活。

表示緩存的控制,有服務端返回。它有以下幾個取值:

默認情況下是private,也就是不能共享的。Cache-Control格式如下:

對比緩存,表示需要和服務端進行相關信息的對比,由伺服器決定是使用緩存還是最新內容,如果伺服器判定使用緩存,返回響應嗎304,判定使用最新內容,則返回響應碼200和最新數據。對比緩存的判定欄位有兩組:

ETag表示資源的一種標識信息,用於標識某個資源,由服務端返回,優先順序更高。格式如下:

然後客戶端再次請求時,加入欄位If-None-Match,格式如下:

服務端收到請求的該欄位時(之前的Etag值),和資源的唯一標識進行對比,如果相同,說明沒有改動,則返回狀態碼304,如果不同,說明資源被改過了,則返回狀態碼200和整個內容數據。

Last-Modified表示資源的最近修改時間,由服務端返回,優先順序更低。格式如下:

Last-Modified
由伺服器返回,表示響應的數據最近修改的時間。


If-Modified-Since
由客戶端請求,表示詢問伺服器這個時間是不是上次修改的時間。如果服務端該資源的修改時間小於等於If-Modified-Since指定的時間,說明資源沒有改動,返回響應狀態碼304,可以使用緩存。如果服務端該資源的修改時間大於If-Modified-Since指定的時間,說明資源又有改動了,則返回響應狀態碼200和最新數據給客戶端,客戶端使用響應返回的最新數據。

Last-Modified欄位的值(服務端返回的資源上次修改時間),常常被用於客戶端下次請求時的If-Modified-Since欄位中。

HTTP的緩存規則是優先考慮強制緩存,然後考慮對比緩存。

Okhttp緩存相關的類有如下:

要開啟使用Okhttp的緩存其實很簡單,只需要給OkHttpClient對象設置一個Cache對象即可,創建一個Cache時指定緩存保存的目錄和緩存最大的大小即可。

那麼下面我們來看看Okhttp緩存執行的大概流程

Okhttp的緩存流程分為讀取緩存和存儲緩存兩個過程,我們分別分析。

讀取使用緩存的流程從HttpEngine的sendRequest發送請求開始。

接下來我們分析

從Cache的get方法開始。它按以下步驟進行。

如果存在緩存的話,在指定的緩存目錄中,會有兩個文件「****.0」和「****.1」,分別存儲某個請求緩存的響應頭和響應體信息。(「****」是url的md5加密值)對應的ENTRY_METADATA響應頭和ENTRY_BODY響應體。緩存的讀取其實是由DiskLruCache來讀取的,DiskLruCache是支持Lru(最近最少訪問)規則的用於磁碟存儲的類,對應LruCache內存存儲。它在存儲的內容超過指定值之後,就會根據最近最少訪問的規則,把最近最少訪問的數據移除,以達到總大小不超過限制的目的。

接下來我們分析CacheStrategy緩存策略是怎麼判定的。

直接看CacheStrategy的get方法。緩存策略是由請求和緩存響應共同決定的。

接來下我們看看CacheControl類里有些什麼。

可以發現,它就是用於描述響應的緩存控制信息。

然後我們再看看Okhttp存儲緩存是怎麼進行的。

存儲緩存的流程從HttpEngine的readResponse發送請求開始的。

可以看到這里先通過maybeCache寫入了響應頭信息,再通過cacheWritingResponse寫入了響應體信息。我們再進去看Cache的put方法實現。

我們繼續看Cache的writeTo方法,可以看到是寫入一些響應頭信息。

到這里Okhttp緩存的讀取和存儲流程我們就清楚了。可以說,緩存的使用策略基本都是按照HTTP的緩存定義來實現的,所以對HTTP緩存相關欄位的理解是很重要的。然後關於DiskLruCache是如何管理緩存文件的,這個其實也很好理解,首先的原則就是按照LRU這種最近最少使用刪除的原則,當總的大小超過限定大小後,刪除最近最少使用的緩存文件,它的LRU演算法是使用LinkedHashMap進行維護的,這樣來保證,保留的緩存文件都是更常使用的。具體實現大家可以分析DiskLruCache和LinkedHashMap的實現原理。

熱點內容
洗過的海帶存儲方法 發布:2024-10-10 11:19:00 瀏覽:239
64H的源碼 發布:2024-10-10 11:06:01 瀏覽:152
mc伺服器怎麼增加back指令 發布:2024-10-10 10:58:48 瀏覽:256
termux如何搭建伺服器 發布:2024-10-10 10:18:05 瀏覽:737
中國石化的電話服務密碼是多少 發布:2024-10-10 10:16:46 瀏覽:42
婚紗店宣傳片視頻腳本 發布:2024-10-10 10:08:55 瀏覽:869
android寫入文件 發布:2024-10-10 10:08:11 瀏覽:435
怎麼打開文件夾的路徑 發布:2024-10-10 10:08:06 瀏覽:61
ec伺服器怎麼有小提示 發布:2024-10-10 10:08:04 瀏覽:495
我的世界迪士尼神奇寶貝伺服器地址 發布:2024-10-10 09:03:02 瀏覽:560