go服務get請求中攜帶分號(;)時報錯,獲取不到參數的問題

前言

我們在寫get方式的api請求時,有時候會用這樣的一種方式攜帶參數:http://ip:port/a/b?query=key:1;value:2&other=xxx,這裏我們注意到 query 一個字段其實是攜帶了等子字段的,一個是 key, 一個是 value;這在go 1.17版本之前是沒有問題的。但是在1.17之後打印警告,在1.20之後,go服務會直接忽略掉攜帶 分號(😉 的參數

我們可以從go的源碼中看到,參數直接被跳過了。

變更原因

查了一些資料,具體是go1.17因爲潛在安全問題修復了url傳參識別解析方式,不再將分號作爲分隔標識符號。

關於這個問題,在githup的issue中也有一些討論https://github.com/golang/go/issues/25192

官方給的答覆是爲了迎合W3C的標準,其次是W3C標準在2017年就建議不用使用分號(;)作爲分割符,其次W3C建議將‘&’作爲url請求的唯一分割符;

我們應該怎麼辦

方案一

順着官方的約束,官方說不讓用,那就不要用了;

方案二(不推薦)

將go版本保持在1.16,不要再更新了

方案三

我們自己解析url中的參數,不要使用官方的url包了

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