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