瀏覽器專題之緩存url請求


1)背景:首先科譜下get與post的區別

get請求

  • GET 請求可被緩存
  • GET 請求保留在瀏覽器歷史記錄中
  • GET 請求可被收藏為書簽
  • GET 請求不應在處理敏感數據時使用
  • GET 請求有長度限制
  • GET 請求只應當用於取回數據

post請求

  • POST 請求不會被緩存
  • POST 請求不會保留在瀏覽器歷史記錄中
  • POST 不能被收藏為書簽
  • POST 請求對數據長度沒有要求

 

2) 除了上面的,還要說明下根據HTTP規范,GET是用於信息獲取的,而且是冪等的,也就是說,當使用相同的URL重復GET請求會返回預期的相同結果時,GET方法才是適用的;POST更多的作用是修改服務器的信息狀態(比如用戶注冊,數據庫要進行操作等),也就是說POST請求是有副作用的。對於GET請求的冪等性,有的瀏覽器會默認將url相同的GET請求做緩存處理(來自參考鏈接(1)),比如IE就會進行緩存

IE情況

 

3)不同的瀏覽對於相同的get請求所采取的措施也不大一樣,有的瀏覽器會阻塞相同url的get請求(相同時間發出的請求),直到當前的get請求完成,而post則不會有此種情況。

chrome情況

發送中阻塞

請求並獲取了數據(關鍵看數據的請求起始終止時間 )

那么如何解決上述的get請求下因為相同url下緩存和阻塞的問題

1)GET時,在url后面加上隨機數(比如時間new Date().getTime()),讓瀏覽器認為是不同的資源,而不被緩存或阻塞

2)在服務端加上header來指令瀏覽器不要緩存

相關的報文頭設置為{'Content-Type': 'text/plain', "Cache-Control":"no-cache, no-store, must-revalidate"}

3)使用post進行請求

測試代碼:https://github.com/sysuKinthon/Web2.0/tree/master/Web2.0/menuCalculate/S3

參考:(1)  http://java-xp.iteye.com/blog/1518510


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM