最近正學到HTML5的離線緩存,卻看到需要配置服務器。一下子就懵了,畢竟服務器的有關配置一般是很復雜的,而node.js的服務器是自己的代碼生成的,這下要怎么配置?在網上搜索了很久,都沒用關於node.js與HTML5離線緩存的,但是apache之類的卻一大堆。在看完網易雲課堂的一個php教程之后,開始理解了HTML5的離線緩存原理,並成功搭配node.js實現了。
首先簡要講一下HTML5離線緩存的原理。
瀏覽器向服務端發出請求,請求獲取一份MIME類型為 text/cache-manifest 的文件,該文件本身就是靜態文件,這點很重要,並且該文件記錄了瀏覽器要緩存哪些文件。
這時候第一個問題來了,manifest文件內容格式怎么寫?
答:舉個簡單的例子,該例子列出了瀏覽器要緩存的文件。
CACHE MANIFEST
# CACHE MANIFEST 是必須的開頭
# CACHE : 下羅列了要緩存的文件名
CACHE:
1.jpg
解決了第一個問題第二個問題來了,html5是怎么去請求這份文件的?
答:
在你的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文件的支持了。一個字:爽!