1. 程式人生 > 實用技巧 >Springboot+thymeleaf簡單整合

Springboot+thymeleaf簡單整合

技術標籤: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