IE瀏覽器兼容之URL編碼

問題場景:文件上傳,在谷歌里可以正常操作,IE瀏覽器操作出錯(cuò),服務(wù)請求報(bào)錯(cuò)。HTTP 400 錯(cuò)誤 - 請求無效 (Bad request)


問題分析:對比兩個(gè)請求可以發(fā)現(xiàn),二者的請求URL不一致。jsp通過url請求傳遞參數(shù)給后端,但是url的格式不對會造成請求失敗。這種url的問題常發(fā)生在在IE瀏覽器中,其他瀏覽器火狐、chrome等不會有問題。因?yàn)楣雀柚袝詣?dòng)給空格和一些特殊字符編碼,而IE沒有這一步。

解決辦法:手動(dòng)給url編碼。在文件upload的方法里對url進(jìn)行兩次編碼

encodeURI(encodeURI(url))

以上問題涉及的知識:

1、http請求過程:

瀏覽器把URL(以及post提交的內(nèi)容)經(jīng)過編碼后發(fā)送給服務(wù)器。

?服務(wù)器將對內(nèi)容解碼,進(jìn)行處理,再把結(jié)果編碼返回給瀏覽器。

?瀏覽器按照指定的編碼顯示該網(wǎng)頁。

字符串編碼和解碼時(shí)涉及到的字符集,如ISO8859-1、GBK、UTF-8、UNICODE。

2、URL編碼

(1)URL編碼特點(diǎn):

由于 URL 常常會包含 ASCII 集合之外的字符,URL 必須轉(zhuǎn)換為有效的 ASCII 格式。

URL 編碼使用 "%" 其后跟隨兩位的十六進(jìn)制數(shù)來替換非 ASCII 字符。

URL 不能包含空格。URL 編碼通常使用 + 來替換空格。

(2)URL編碼方法

escape()不能直接用于URL編碼,它的真正作用是返回一個(gè)字符的Unicode編碼值。escape()不對"+"編碼 主要用于漢字編碼,現(xiàn)在已經(jīng)不提倡使用。

encodeURI()是Javascript中真正用來對URL編碼的函數(shù)。編碼整個(gè)url地址,但對特殊含義的符號"; / ? : @ & = + $ , #",也不進(jìn)行編碼。對應(yīng)的解碼函數(shù)是:decodeURI()。

encodeURIComponent() 能編碼"; / ? : @ & = + $ , #"這些特殊字符。對應(yīng)的解碼函數(shù)是decodeURIComponent()。假如要傳遞帶&符號的網(wǎng)址,所以用encodeURIComponent()

原博文:IE瀏覽器兼容之URL編碼

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容