今天在觀察 Chrome 怎麼處理網頁中的 <script type="text/javascript" src="/scripts/unt.14.04.10.19.05.42.js"></script> 時,終於明白何時才會 200 (From Cache) (unt.14.04.10.19.05.42.js 是假的,實際會被重導到 scripts.aspx 來處理。)
1. 在網址列,同網址再按一下 Enter 載入時,Chrome 會對相同的網址再次送出 request。
2. 若是點選頁面中的連結或是在網址列輸入其它網址,才有可能看到 200 (From Cache)
在情況 1 時,若是有使用 Response.Cache.SetLastModified(Now) 則會看到 304 ,否則會把 Script 重新載入一次。
所以在 Server 最佳的(我覺得)寫法是:
Response.Cache.SetCacheability(HttpCacheability.Private)
Response.Cache.SetExpires(Now.AddYears(1)) '一年後才會到期,沒有這個就不會有 200 (From Cache)
Response.Cache.SetLastModified(Now) '若是 Browser 送出了一個新的 Request, 有可能會回 304
不過有趣的是,在 scripts.aspx 收到帶有 If-Modified-Since 的 Request 時,是怎麼判斷要回應 304 的,我在 .vb 裡面沒有加上這個處理吔。