node.js與HTML5離線緩存

最近正學到HTML5的離線緩存,卻看到須要配置服務器。一會兒就懵了,畢竟服務器的有關配置通常是很複雜的,而node.js的服務器是本身的代碼生成的,這下要怎麼配置?在網上搜索了好久,都沒用關於node.js與HTML5離線緩存的,可是apache之類的卻一大堆。在看完網易雲課堂的一個php教程以後,開始理解了HTML5的離線緩存原理,併成功搭配node.js實現了。php

 

首先簡要講一下HTML5離線緩存的原理。html

瀏覽器向服務端發出請求,請求獲取一份MIME類型爲 text/cache-manifest 的文件,該文件自己就是靜態文件,這點很重要,而且該文件記錄了瀏覽器要緩存哪些文件。html5

這時候第一個問題來了,manifest文件內容格式怎麼寫?node

答:舉個簡單的例子,該例子列出了瀏覽器要緩存的文件。express

CACHE MANIFESTapache

# CACHE MANIFEST 是必須的開頭瀏覽器

# CACHE : 下羅列了要緩存的文件名
CACHE:
1.jpg緩存

 

解決了第一個問題第二個問題來了,html5是怎麼去請求這份文件的?服務器

答:less

在你的html代碼裏的 html標籤中這樣寫: <html manifest="test.manifest" >;這樣瀏覽器就會向請求其它資源同樣向服務器請求這個名爲 test.manifest文件了。

舉個簡單的例子加深理解:經過 http://localhost/index.html 訪問服務器根目錄下的index.html文件,html代碼以下

 1 <!DOCTYPE html>
 2 <html manifest="test.manifest">
 3 <head>
 4     <meta charset="utf-8">
 5     <title></title>
 6 </head>
 7 <body>
 8    <img src="1.jpg" />
 9 </body>
10 </html>

test.manifest文件內容如上面第一問題中的例子;

當瀏覽器渲染到 <html manifest="test.manifest">時,瀏覽器發出一個請求,請求獲取test.manifest文件,當瀏覽器加載了test.manifest文件後瀏覽器就知道1.jpg是要緩存的文件,因此,當1.jpg第一次被加載下來後,就被緩存到本地了。當第二訪問http://localhost/index.html 時,瀏覽器直接到緩存去取1.jpg了。即便斷網了,也可以經過http://localhost/index.html訪問到剛剛的頁面。

到了如今,咱們仍是沒講到node.js。已知apache等服務器要支持離線緩存的話須要配置服務器,若是是node.js,那該怎麼辦?

答:咱們先來了解一下,apache等服務器到底是要配置什麼鬼東西。上面已經說了manifest文件自己就是一個靜態文件,獲取manifest文件跟獲取jpg文件其實就是一回事,可是apache等服務器不是全部的文件格式都支持,換句話說,你瀏覽器請求jpg文件是被容許的,可是,你請求manifest文件是不在容許範圍內的,因此,配置服務器指定的就是在服務器容許的文件類型中加多一條:manifest 類型。

而對於node.js說,不管是jpg,png,manifest.......,它們都是文件而已,node.js對它們一視同仁,惟一不一樣的地方就是它們的MIME類型。 

因此,對於HTML5的離線緩存功能來講,node.js須要的配置就是在寫靜態文件服務器時,增長對manifest MIME類型支持。

若是你用express的配置靜態文件服務器的話,express已經幫你增長了manifest文件的支持了。一個字:爽!

相關文章
相關標籤/搜索