if-modified-since 的使用與應用

一、什麼是 if-modified-since

if-modified-since 是一個 HTTP 協議中的頭信息,其作用是告訴伺服器獲取資源的時間。與資源上次修改時間進行對比,判斷是否需要重新獲取資源。

如果客戶端已經有過該資源,而該資源沒有發生任何修改,那麼伺服器會返回狀態碼為 304。這時客戶端就可以直接使用本地緩存的該資源,從而提高頁面的載入速度。

二、 if-modified-since 的實現原理

if-modified-since 使用的是 HTTP 協議中的條件請求機制。它是通過客戶端在請求頭中加上 If-Modified-Since 欄位來實現的。

當客戶端第一次請求資源時,伺服器會將該資源的相關信息以及 Last-Modified 欄位一起返回給客戶端。客戶端將 Last-Modified 存儲在緩存中。

當客戶端再次請求資源時,在請求頭中添加 If-Modified-Since 欄位,其值為客戶端記錄的 Last-Modified 值。伺服器接收到請求後,會將該值與該資源的 Last-Modified 值進行比較。若相同,則返回 304 狀態碼,告訴客戶端使用本地緩存。否則伺服器會返回新的資源,並更新 Last-Modified 值。

三、 if-modified-since 的應用場景

if-modified-since 主要用於靜態資源的緩存,比如圖片、CSS、JS 等。這樣客戶端在第一次請求之後,如果該資源沒有發生變化,就可以使用本地緩存,提高網頁載入速度。

除了靜態資源以外,if-modified-since 還可以用於動態頁面的緩存。比如在博客網站上,可以使用 if-modified-since 緩存博客文章頁面。這樣當用戶二次訪問同一篇文章時,如果文章沒有發生修改,就可以直接使用本地緩存,提高打開速度。

四、 if-modified-since 的使用示例

// 伺服器端代碼
const fs = require('fs');
const http = require('http');
const path = require('path');

const server = http.createServer((req, res) => {
  const filename = path.join(__dirname, 'public', req.url);
  fs.stat(filename, (err, stats) => {
    if (err) {
      res.statusCode = 404;
      res.end('404 Not Found');
      return;
    }
    const lastModified = stats.mtime.toUTCString();
    if (req.headers['if-modified-since'] === lastModified) {
      res.statusCode = 304;
      res.end();
      return;
    }
    res.setHeader('Last-Modified', lastModified);
    fs.createReadStream(filename).pipe(res);
  });
});

server.listen(3000, () => {
  console.log('Server is listening on port 3000');
});
// 客戶端代碼



  
  if-modified-since Demo


  
  


以上代碼是一個簡單的 Node.js HTTP 伺服器和一個使用 if-modified-since 的客戶端網頁。使用 Node.js 的 fs 模塊讀取靜態文件,判斷請求頭中的 if-modified-since 欄位與該文件的修改時間是否一致。如果一致,伺服器會返回 304 狀態碼,否則會返回該文件和修改時間,客戶端將該值緩存。

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
HTLU的頭像HTLU
上一篇 2024-10-25 13:51
下一篇 2024-10-25 13:51

相關推薦

  • Python while嵌套if

    本文將從多個方面對Python while裡面嵌套if做詳細的闡述,幫助你更好地理解如何在Python中使用while嵌套if語句。 一、while循環和if語句的基本概念 在開始…

    編程 2025-04-27
  • Python循環輸出1到100的偶數if語句

    本文將從多個角度闡述Python循環輸出1到100的偶數if語句的方法和技巧。 一、循環輸出1到100的偶數if語句的代碼實現 for i in range(1, 101): if…

    編程 2025-04-27
  • 如何使用Python編寫if語句

    Python是一種廣泛使用的高級編程語言,由於其語法簡潔、易於學習和強大的功能,已經成為了開發人員的首選之一。if語句是Python編程語言中最基本的流程式控制制語句之一,用於判斷給定…

    編程 2025-04-27
  • 分析if prefixoverrides="and |or"的用法與實例

    if語句是編程語言中最為基礎和常見的控制流語句,而prefixoverrides是if語句的一個重要屬性。其中,prefixoverrides的常見取值為and和or。那麼,這兩者…

    編程 2025-04-27
  • Shell腳本中的if語句

    shell腳本是Linux下最常用的腳本之一,在編寫shell腳本過程中,if語句是最常用的控制語句之一。if語句可以將程序的流程進行控制,使得程序在不同情況下可以進行不同的操作,…

    編程 2025-04-25
  • Mybatis中update if詳解

    一、if標籤的基本用法 在Mybatis中使用update語句更新資料庫表中的一條或多條數據,我們通常通過if標籤來動態生成update語句。if標籤的使用方法如下: <up…

    編程 2025-04-25
  • Java if else if語句的用法詳解

    一、基礎語法 if(boolean_expression){ //在布爾表達式為 true 時執行 }else if(boolean_expression){ //在布爾表達式為 …

    編程 2025-04-18
  • JS Else If的應用與技巧

    一、Else If的概念和用途 1、Else If概念 JS Else If是一種在條件循環語句中,當第一個條件不成立時,繼續判斷下一個條件的語句。Else If是JS中if條件語…

    編程 2025-04-13
  • 詳解JavaScript中的if else if語句

    JavaScript是一種弱類型語言,可以通過if else if語句實現流程式控制制。在本文中,我們將詳細介紹JavaScript中的if else if語句,包括語法格式、使用方法…

    編程 2025-04-12
  • 深入淺出MySQL中的if函數

    一、if函數定義 MySQL中if函數用於在一個查詢中進行條件分支處理。if函數的基本用法是: IF(expr1, expr2, expr3) 如果`expr1`為TRUE,則IF…

    編程 2025-04-12

發表回復

登錄後才能評論