gitlab rest api 通過名稱查詢方式(URL-encoded path of the project)一直404錯誤

問題發現

gitlab rest api 有個查詢項目詳情接口,如下:
在這裏插入圖片描述
其提供的 URL-encoded path of the project方式支持使用 命名空間/項目 的方式進行查詢,但是有個前置操作,就是需要先將特殊字符進行 encode。比如我們要查詢名稱爲 root/name 的項目詳情,不能直接訪問 /projects/root/name,需要將 root/name 先進行url encode(編碼)再拼接到url上,即 /projects/root%2fname

最近調用接口時遇到了’詭異問題’,通過域名調用時一直報404錯誤,直接通過ip:port調用則沒有問題。
即調用: https://xxx.com/projects/root%2fname 一直是404錯誤;(xxx.com代指域名)
調用:http://10.8.1.10:80/projects/root%2fname 則正常返回項目詳情的json數據。(10.8.1.10是內網的gitlab地址)
奇了怪了,經過長時間搜索,終於在gitlab的官方issue上發現相似問題,API using url encoded paths is broken
其中有人提到,是反向代理的問題。反向代理會自動將url decode,再進行代理轉發。
好了,有了方向,下面探究反向代理到底幹了啥好事。

問題探究

問了一下gitlab維護人員,其確實使用nginx將域名代理到gitlab服務器,基於上面提出的問題,探究Nginx 的url decode 到底是怎麼回事,詳見:Nginx 自動url decode探究及如何避免url decode

結論就是,Nginx 在某些配置確實存在自動url decode的情況。
好了,問題找到,解決。

解決

修改nginx配置,避免進行url decode。參見:Nginx 自動url decode探究及如何避免url decode

當然啦,如果你不是使用nginx代理,請自行搜索調整相關配置。

reference:
https://docs.gitlab.com/ee/api/README.html#namespaced-path-encoding
https://docs.gitlab.com/ee/api/projects.html#get-single-project
無法使用編碼後的路徑訪問api


end

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