解决[GIN-debug] redirecting request 307和301并允许跨域请求
今天我在用app调试写好的后端接口时,遇到了下面的报错:
[GIN-debug] redirecting request 307: /douyin/user/login –> /douyin/user/login?username=wxy&password=123456
我的路由逻辑如下:
1 | func NewRouter() *gin.Engine { |
这个问题在于你注册的路由和实际请求的路由不相匹配。比如你注册的路由为/douyin/user/login
,但实际访问的路由为/douyin/user/login/
,就会出现这个错误,但是亲测用postman或者apifox不会出现这种报错,而我用app调试确出现了这种错误。
当我增加部分”/“后,问题得到解决。
1 | func NewRouter() *gin.Engine { |
我这里使用了Group
,多多留意你的路由是否少了/
或者多了/
。
然后不久我又遇到了这个报错:
[GIN-debug] redirecting request 301: /douyin/feed/ –> /douyin/feed/?latest_time=1692417925203
1 | func NewRouter() *gin.Engine { |
如果当前路由无法匹配,但存在带(不带)尾斜杠的路径的处理程序,则启用自动重定向。例如,如果/foo/被请求,但是路由只存在于/foo,那么客户端将被重定向到/foo,GET 请求的 HTTP状态码是301,其他所有请求方法的路由是307。
所以究其原因是我新增加的部分路由多了”/“,我将其删掉后,问题得到解决。
1 | func NewRouter() *gin.Engine { |
这边建议允许跨域请求,能省去一些麻烦。
先介绍使用社区的https://github.com/gin-contrib/cors 库,一行代码解决前后端分离架构下的跨域问题。
1 | package router |
当然也可以自定义跨域中间件:
1 | //cors.go |
相应的路由逻辑如下:
1 | package router |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 王翊珩!