http - 关于 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协议的问题吗?
解决方案
推荐阅读
- haskell - Haskell发生错误时如何使用DWARF获取堆栈跟踪?
- spring - 如何设置用户动态传递的通道名称而不是在属性文件中指定
- javascript - CORS 请求不是 http
- php - 在 Laravel 中创建包含 html 和古吉拉特语文本的 pdf
- python - 从文本文件中读取选票并统计选票
- c# - 如何在会话中存储数据列表的特定按钮单击事件的值?
- javascript - 如何使用javascript或php根据其他单元格的值添加特定于值的列?
- kofax - 自定义模块所需的生产文件
- c++ - 另一个字符串文字,UDL 迷宫
- c++ - 什么是 ATOMIC_FLAG_INIT 以及它应该如何使用?