今晚在做一個商品篩選的功能,通過幾十個商品參數篩選商品列表,因為參數太多,外加考慮到SEO的部分,所以我不想在地址欄暴漏參數傳遞的部分,所以就采用了POST傳值的方式來解決,但是POST傳值就面臨着用戶刷新頁面的時候總是提示是否重新POST的對話框,用搜索引擎搜了一下,目前市面上最常見的幾種解決方法都測試過,但是都不適合我的情況.最后我嘗試使用js在客戶端延時重新給action賦值隨機數,甚至用js延時動態創建form表單的方式都測試過,依然無法解決問題,偶爾看到一篇文章才明白原因.不敢藏私分享給大家.
眾所周知瀏覽器是通過Last-Modified和Expires來處理緩存的,具體機制就不做解釋,而在具體調試中發現並不按我們想象的方式進 行,其原因很有可能是在刷新瀏覽器的時候采用不恰當的方式導致。對於大多數瀏覽器而言,都包含有三種刷新方式,以下我們以IE瀏覽器為例:
F5 刷新
Ctrl+F5 刷新
“轉至”或地址欄里回車 刷新
這些快捷鍵的功能,主流瀏覽器都是相同的。
而這三種刷新方式會導致瀏覽器采取不同的緩存機制:
F5:不允許瀏覽器直接使用本地緩存,因此Last-Modified能起作用,但Expires無效
Ctrl+F5:是強制刷新,因此緩存機制失效
“轉至”或地址欄里回車:正常的訪問,Last-Modified和Expires都有效
知道瀏覽器刷新還有這么一回事后,那么以后在項目調試的過程中就不會感到疑惑了。
總結一下可以這樣認為:瀏覽器在刷新的時候是把上一次的post參數給記憶下來並重新傳遞給了服務器,不管在這個過程中你是否做什么樣的改動,他一概不予理會,而是忠實的把上一次所有POST的參數原封不動的重新發送給服務器罷了.所以我的問題最終結論是無解的!!!悲哀~~~
我剛剛看了一下博客園的首頁翻頁似乎類似的做法,不過更糟糕的是,在非第一頁刷新頁面直接就跑回第一頁去了.