gin源码阅读【2】-Redirect相关

在gin的Engine里面有三个参数是和url的跳转相关,分别是 RedirectTrailingSlash bool,RedirectFixedPath bool, HandleMethodNotAllowed bool

闲来如实,写几个demo测试一下具体的作用吧。

RedirectTrailingSlash

源代码:

func main() {
	r := gin.Default()
	r.RedirectTrailingSlash = true
	r.GET("/ping", test)  //我们设置的路径就是/ping
	r.Run() // 监听并在 0.0.0.0:8080 上启动服务
}

正常的访问路径是127.0.0.1:8080/ping 毫无问题

r.RedirectTrailingSlash = true的情况下

正常访问:

curl -i 127.0.0.1:8080/ping
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Date: Thu, 23 Nov 2023 08:31:10 GMT
Content-Length: 24

正常返回:hello world

携带末尾的/ 则直接301了,但是注意一点,如果不是GET请求,状态码给的是307

curl -i 127.0.0.1:8080/ping/
HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=utf-8
Location: /ping
Date: Thu, 23 Nov 2023 08:31:32 GMT
Content-Length: 40

<a href="/ping">Moved Permanently</a>.

RedirectFixedPath

参考前面的代码,设置

r.RedirectFixedPath = true

以大写访问路径得到的结果

curl -i 127.0.0.1:8080/PING
HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=utf-8
Location: /ping
Date: Thu, 23 Nov 2023 09:42:04 GMT
Content-Length: 40

<a href="/ping">Moved Permanently</a>.

或者curl -i 127.0.0.1:8080/././../PING都返回301

还是老问题,在接口访问的时候301不大有好

发布于
标记为