Springboot+thymeleaf簡單整合
阿新 • • 發佈:2020-12-06
技術標籤:jsjavascriptie前端
問題場景:檔案上傳,在谷歌裡可以正常操作,IE瀏覽器操作出錯,服務請求報錯。HTTP 400 錯誤 - 請求無效 (Bad request)
問題分析:對比兩個請求可以發現,二者的請求URL不一致。jsp通過url請求傳遞引數給後端,但是url的格式不對會造成請求失敗。這種url的問題常發生在在IE瀏覽器中,其他瀏覽器火狐、chrome等不會有問題。因為谷歌中會自動給空格和一些特殊字元編碼,而IE沒有這一步。
解決辦法:手動給url編碼。在檔案upload的方法裡對url進行兩次編碼
encodeURI(encodeURI(url))
以上問題涉及的知識:
1、http請求過程:
- 瀏覽器把URL(以及post提交的內容)經過編碼後傳送給伺服器。
- 伺服器將對內容解碼,進行處理,再把結果編碼返回給瀏覽器。
- 瀏覽器按照指定的編碼顯示該網頁。
字串編碼和解碼時涉及到的字符集,如ISO8859-1、GBK、UTF-8、UNICODE。
2、URL編碼
(1)URL編碼特點:
- 由於 URL 常常會包含 ASCII 集合之外的字元,URL 必須轉換為有效的 ASCII 格式。
- URL 編碼使用 "%" 其後跟隨兩位的十六進位制數來替換非 ASCII 字元。
- URL 不能包含空格。URL 編碼通常使用 + 來替換空格。
(2)URL編碼方法
- escape()不能直接用於URL編碼,它的真正作用是返回一個字元的Unicode編碼值。escape()不對"+"編碼 主要用於漢字編碼,現在已經不提倡使用。
- encodeURI()是Javascript中真正用來對URL編碼的函式。編碼整個url地址,但對特殊含義的符號"; / ? : @ & = + $ , #",也不進行編碼。對應的解碼函式是:decodeURI()。
- encodeURIComponent() 能編碼"; / ? : @ & = + $ , #"這些特殊字元。對應的解碼函式是decodeURIComponent()。假如要傳遞帶&符號的網址,所以用encodeURIComponent()
程式碼示例:
程式碼: var test1="http://www.haorooms.com/My name=hl&age=18/"; var enurl=encodeURI(test1); console.log(enurl); var enuc=encodeURIComponent(test1); console.log(enuc); //輸出 http://www.haorooms.com/My%20name=hl&age=18/ http%3A%2F%2Fwww.haorooms.com%2FMy%20name%3Dhl%26age%3D18%2F