最近遇到一個奇怪的問題,前端請求後端導出報表到excel,後端根據前端傳的參數查出數據後返回數據到jsp,jsp的響應格式是excel,會直接下載文件,一直以來都用的很好,最近發現有時候會下載下來空的文件,有時候正常。
反覆測試發現一個奇怪的問題
在外網訪問的時候用的QQ瀏覽器,用F12跟蹤發現http請求只發出了一次(POST請求),但是後端會接到兩到三次請求,第一次請求是正常的,第二次請求參數沒了,第三次請求也沒有參數。
點導出時會發出第一次請求,然後瀏覽器彈出下載窗口,點擊下載,會發出第二次,有時候還會發出第三次,如果只發出了第二次,則下載是正常的,如果發出了第三次,則下載下來一個空文件(注:因爲第二、三次沒有參數,查不到數據,所以是個空文件)。
在內網用localhost測試時,用IE測試發現只會發一次請求,一直正常,用QQ瀏覽器,就和外網一樣,應該是瀏覽器的問題。
然後我跟蹤請求發現,一般請求兩次的,第二次是在下載完成後發出的,請求就是正常的。請求三次的,實際上下載的文件是最後一次請求發出後返回的內容。
百思不得其解,最後想到,改成GET請求應該能解決問題,GET請求會一直帶着參數,不管請求幾次,最後都能返回正確的結果。而且這種冪等的請求正常也應該用GET請求,除非參數太長,不得已用POST。
但是QQ瀏覽器在下載時又發出請求真的太奇怪了,改成GET後雖然問題解決了,但是每次導出都發出多次請求,也是加重了服務器的負擔。
這個問題目前找不到解決辦法