今天遇到奇葩問題,描述如下:
客戶端向服務端發起了一次(從日志中可以看出僅僅打印了一次日志),但是確在后端出現了重復的幾次請求數據在后端。這個問題很不容易出現,而且用中文搜索不到相應的結果;
今天在國外的網站中找到了問題的解決方案:
原因如下:由於設置了鏈接與獲取數據的超時時間,客戶端在發送數據之后,檢測到可能並沒有發送成功到后端,這個時候http底層會自動重發請求(注意是Http底層,所以應用端不會知道發送了多次請求)。如果應用端自動重發了多次請求,后端也回復了多次請求,但是前段僅僅會只回復1次請求。所以為了解決這個問題,只要在DefaultHttpClient設置如下代碼即可解決:
defaultHttpClient.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(0, false));