URL中"#"、"?"、"&"、"="特殊意義符號的用途及那些坑
阿新 • • 發佈:2021-08-10
最近在排查一個線上問題,瀏覽器請求的URL中包含一個引數,並且引數的值是"#"號開頭的,
如下:www.aaa.com?name1=bbb&name2=#erqwers
發現在沒有登入的情況下,正常會跳轉到登入SSO,然後SSO登入後refer url和return url變成www.aaa.com?name1=bbb&name2=這樣了,後面的value值沒了。
於是查了一下相關文件:
"#"號相關:
1、"#"號代表網頁中的一個位置,其右面的字元,就是該位置的識別符號,瀏覽器讀取URL後,會自動將位置滾動至可視區域,常見於錨點或使用ID屬性。
2、#是用來指導瀏覽器動作的,對伺服器端完全無用。所以,HTTP請求中不包括#。
3、在第一個#後面出現的任何字元,都會被瀏覽器解讀為位置識別符號。這意味著,這些字元都不會被髮送到伺服器端。
4、只改變#後的部分時,瀏覽器只會滾動到相應位置,不會重新載入網頁。
5、改變#後,瀏覽器的訪問歷史中會增加一個記錄
6、網路爬蟲預設忽視#的部分,特殊情況除外,比如使用"#!"
"?"號相關:
1、前端的URL相同,但?號後內容不同,瀏覽器會認為是一個新的地址
"&"號相關:
1、URL中不同引數間的分隔符
"="號相關:
1、URL中不同引數的KeyValue的分隔符
備註:
1、URL中的value值,要避開使用特殊符號,如果要使用,建議轉義