首页 > 解决方案 > 关于 shouldRedirectRLocked 方法的困惑(go1.11 src/net/http/server.go:2259)

问题描述

我正在阅读关于 http 模块的源代码,下面的代码让我很困惑:

func (mux *ServeMux) shouldRedirectRLocked(host, path string) bool {
    p := []string{path, host + path}

    for _, c := range p {
        if _, exist := mux.m[c]; exist {
            return false
        }
    }

    n := len(path)
    if n == 0 {
        return false
    }
    for _, c := range p {
        if _, exist := mux.m[c+"/"]; exist {
            return path[n-1] != '/' <<- why not return true directly
        }
    }

    return false
}

正如这个方法上面的注释:shouldRedirectRLocked 报告给定的路径和主机是否应该重定向到路径+“/”。如果为 path+"/" 而不是 path 注册了处理程序,则应该会发生这种情况——请参阅 ServeMux 的评论。

c+"/"已经注册,而c没有注册,所以我认为它应该直接返回 true,但是为什么我们必须检查path[n - 1] != '/'?这是关于http协议的问题吗?

标签: httpgo

解决方案


推荐阅读