get請求,把一個url當做參數,進行url重定向的一些坑

場景

http://www.domain.com/redirect.action?url=xxx

發送給用戶的是上面的鏈接,用戶點擊後跳到redirect.action裏進行一些處理,然後重定向到url

 

坑1

url爲http://www.real.com?name=zhangsan&age=40

實際鏈接http://www.domain.com/redirect.action?url=http://www.real.com?name=zhangsan&age=40

點擊這個鏈接後你會發現,重定向的鏈接裏沒有age=40這個參數,因爲這個參數當做整個鏈接的參數,而不是url的一個參數

坑2

url爲http://www.real.com/#/test ,鏈接中包含#,爲了避免搜索引擎抓取

實際鏈接http://www.domain.com/redirect.action?url=http://www.real.com/#/test

點擊這個鏈接後你會發現,重定向的鏈接裏#和後面的內容都丟失了,因爲#實際上再html中相當於一個錨點


解決辦法,將url進行編碼

URLEncoder.encode("url", "UTF-8");

使用的編碼格式依據你web容器對url的編碼格式而定,例如tomcat下面的配置,會自動將url採用utf-8解碼

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8"/>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章