以前聽過有個笑話是這樣說的:
某A:聽說 iOS 在瀏覽網頁的時候很省電
某B:對,因為它什麼事都沒做。
原來這件事是真的,根據 RFC 7234 5.2.1.4 的定義,如果我們在發送 Request 的時候,加上 cache-control: no-cache
,在沒有從伺服器成功取得內容之前,不得使用已儲存的快取來滿足目前的 Request,但是 iOS 它連 Request 都沒送,自然就不需要理會這個定義。
以前聽過有個笑話是這樣說的:
某A:聽說 iOS 在瀏覽網頁的時候很省電
某B:對,因為它什麼事都沒做。
原來這件事是真的,根據 RFC 7234 5.2.1.4 的定義,如果我們在發送 Request 的時候,加上 cache-control: no-cache
,在沒有從伺服器成功取得內容之前,不得使用已儲存的快取來滿足目前的 Request,但是 iOS 它連 Request 都沒送,自然就不需要理會這個定義。
當我們建立一個 ASP.NET Core Web 應用程式專案的時候,預設在 Startup.cs
中就會呼叫 UseStaticFiles()
使用 StaticFileMiddleware,讓專案中的靜態檔案可以透過 HTTP 被存取到,現在我想要將這些靜態檔案 Cache 在 CDN 上,我需要在 Response Headers 裡面加上 Cache-Control: public, max-age=n
,我們來看要怎麼做?
有一些網頁的內容是有時效性的,甚至有一些操作是不可逆的,但是瀏覽器的歷程記錄(History)卻會逆轉這些特性,在使用者按下「上一頁」的那一刻,不該出現的卻出現了、不該消失的卻消失了,怎麼會這樣?
這是個對 IIS 的誤會,這個跟各個瀏覽器如何處理 Cache-Control 有關,IIS 在靜態檔案上預設沒有回應 Cache-Control 這個標頭,我比較了三款瀏覽器 Chrome(70.0.3538.77)、Firefox(63.0)、Edge(44.17763.1.0)來看看它們各自如何處理這種情況?以及 IIS 該如何來調整?
長期在 ASP.NET 打滾,講到 Cache 第一時間就會想到 Redis、Memcached、... 這種伺服器端的 Cache 服務,但是在 Web 技術領域內還有瀏覽器端的 Cache,如果沒有特別指定,檯面上這些主流的瀏覽器都會把 Web 伺服器回應的內容存起來,我們應該要好好地利用它們來降低伺服器跟網路的壓力。