請求304:緩存優化的重要一步

一、什麼是請求304?

請求304,即HTTP協議狀態碼中的「Not Modified」,表示客戶端發送的請求資源未被修改過,伺服器返回該狀態碼,告訴客戶端可以直接使用緩存數據,不需要再次請求該資源。這樣可以有效減少網路傳輸數據量,加快網頁顯示速度,提高用戶體驗。

二、為什麼要使用請求304?

常規的HTTP請求會將所有資源都重新請求一遍,這樣無論資源是否被修改都會重新傳輸一遍數據。這種不必要的網路傳輸會帶來很多負荷,影響網頁的載入速度和用戶體驗。

而使用請求304,可以實現緩存命中,不用重新下載文件,只需獲取元數據,減輕了伺服器的負擔,提高了頁面載入速度,節省了帶寬資源,降低了成本。

三、如何使用請求304?

要使用請求304,需要在HTTP頭部添加一些特殊的信息來控制瀏覽器緩存。例如:指定資源緩存時間,設置Etag標記等。

// 服務端代碼示例
const fs = require('fs');
const http = require('http');
const path = require('path');
const md5 = require('md5');

http.createServer((req, res) => {
  const fileName = path.resolve(__dirname, './public/index.html');
  
  fs.readFile(fileName, (err, data) => {
    if (err) {
      res.writeHead(404, { 'Content-Type': 'text/plain' });
      res.end('文件不存在!');
    } else {
      const etag = md5(data);
      const lastModified = fs.statSync(fileName).mtime.toUTCString();
      const ifNoneMatch = req.headers['if-none-match'];
      const ifModifiedSince = req.headers['if-modified-since'];
      
      if (etag === ifNoneMatch || lastModified === ifModifiedSince) {
        res.writeHead(304, { 'Content-Type': 'text/plain' });
        res.end();
      } else {
        res.writeHead(200, { 
          'Content-Type': 'text/html', 
          'Cache-Control': 'max-age=30', // 緩存時間 30s 
          'Last-Modified': lastModified, // 最後修改時間 
          'Etag': etag, // Etag 標記 
        });
        res.end(data);
      }
    }
  });
}).listen(3000);

四、請求304的注意事項

請求304需要配合緩存機制使用,控制緩存時間和緩存的範圍。同時,需要注意以下兩點:

1、緩存文件不一定會被跨站腳本攻擊(XSS)利用,但是一定會減少緩存時間,在安全性和效率之間進行取捨。

2、Etag和Last-Modified必須同時存在,如果某個瀏覽器不支持Etag,該請求將會失效。

五、應用請求304的場景

請求304多用於一些靜態的資源文件,例如JavaScript、CSS、圖片等。減少文件請求的次數,同時啟用瀏覽器緩存,提高數據的交互效率。

此外,在數據量較大的情況下,請求304可以顯著降低網路傳輸量,減小數據壓力,提高用戶體驗。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/303041.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-31 11:49
下一篇 2024-12-31 11:49

相關推薦

  • Python 數據緩存及其應用

    本文將為大家詳細介紹Python數據緩存,並提供相關代碼示例。 一、Python 數據緩存基礎概念 Python 是一種解釋型語言,每次執行完一條語句後就會將內存中的結果清空,如果…

    編程 2025-04-29
  • Python緩存圖片的處理方式

    本文將從多個方面詳細闡述Python緩存圖片的處理方式,包括緩存原理、緩存框架、緩存策略、緩存更新和緩存清除等方面。 一、緩存原理 緩存是一種提高應用程序性能的技術,在網路應用中流…

    編程 2025-04-29
  • Java圖片緩存的實現與優化

    Java中的圖片緩存是Web開發中常用的技術,它可以提高網頁的載入速度和用戶體驗。本文將從以下三個方面對Java圖片緩存進行詳細闡述: 一、圖片緩存的基本實現 圖片緩存技術是指將一…

    編程 2025-04-27
  • 奈奎斯特帶寬——數字信號處理中的重要概念

    一、概述 奈奎斯特帶寬是數字信號處理領域中的重要概念,它是指採樣信號中最高有效頻率的兩倍。它在數字信號處理的採樣率選擇和濾波器設計中具有重要的作用。 二、採樣定理 採樣是將模擬信號…

    編程 2025-04-25
  • DR & BDR:OSPF協議中的兩個重要角色

    一、什麼是DR & BDR? 在OSPF協議中,DR(Designated Router)和BDR(Backup Designated Router)是兩個非常重要的角色。…

    編程 2025-04-25
  • Hibernate緩存詳解

    在關係型資料庫中,為了減少重複查詢並提高查詢效率,採用緩存技術是非常常見的做法。Hibernate緩存是Hibernate框架為了加速讀取數據而提供的一種機制。通過緩存,Hiber…

    編程 2025-04-25
  • 使用RedisTemplate設置緩存過期時間

    RedisTemplate 是 Spring Data Redis 為了方便開發者操作 Redis 資料庫而提供的一個模板類。在使用 RedisTemplate 操作 Redis …

    編程 2025-04-24
  • 使用Spring Cloud Redis實現分散式緩存管理

    一、背景介紹 在分散式互聯網應用中,緩存技術扮演著非常重要的角色。緩存技術能夠有效減輕資料庫的訪問壓力,提高應用的訪問速度。在分散式應用中,如何統一管理分散式緩存成為了一項挑戰。本…

    編程 2025-04-24
  • 探索Market1501——視覺監測領域的重要數據集

    一、介紹Market1501 Market1501是一個用於人類重識別領域的數據集,由清華大學研究員李康等人在2015年發布。其由1501個行人的12936張圖像組成,採集自天津市…

    編程 2025-04-24
  • Compacted:一個高性能的Golang緩存庫

    一、簡介 Compacted是一個使用Golang編寫的緩存庫,旨在提供高性能的內存緩存功能。相對於其他常見的緩存庫,Compacted在內存使用和性能方面都做了一定的優化。 緩存…

    編程 2025-04-23

發表回復

登錄後才能評論