tlnet路由规则不修改go自带的路由规则,tlnet遵循go的http路由规则,性能由当前go版本http性能决定
go的路由规则其实比较简单,可以看成两种类型,pattern结尾带“/”和不带“/”
1.
如果不带“/”,比如:
tlnet.handle("/user",userhandler)
那么访问路径uri必须完全匹配 /user ,也就是 https://*****/user , 路由才能 找到"/user"定义的handler
如果带“/” ,比如:
tlnet.handle("/user/",userhandler)
客户端访问 https:/*****/user/ 及 https:/*****/user/*****,都会进入路由到 “/user/“定义的handler
(实际上https://***/user 也可能找到 "/user/" 对应的handler,看后面解析)
2. 例如这样写:
tlnet.handle("/",roothandler)
tlnet.handle("/user",userhandler)
这时
客户端访问 https:/*****/user 路由会找到 “/user” 对应的handler -> userhandler
客户端访问 https:/*****/user/ 路由会找到 “/” 对应的handler -> roothandler
同理访问 https:/*****/user/*** 路由都会找到 “/” 对应的handler -> roothandler
3. 如果要客户端 访问 /user 和 /user/***** 都走一个userhandler,则可以
第一:注册两个路由规则
tlnet.handle("/user",userhandler)
tlnet.handle("/user/",userhandler)
第二:
tlnet.handle("/",userhandler)
第三:
tlnet.handle("/user/",userhandler)
第一和第三似乎重复了,看下面解析:
如果定义
tlnet.handle("/",roothandler)
tlnet.handle("/user/",userhandler)
此时 访问 http://****/user 时,没有找到 "/user"定义的handler时,并不会 进入 “/” 的路由规则
此时 go服务 会返回给客户端 Moved Permanently ,301重定向到 /user/
原因:
简单来说是: 如果找不到对应/user的handler,go则会加上 “/”看是否有注册”/user/“,若注册了,则返回客户端重定向。
代码可以查看ServeMux的Handler的实现
如何修改这个规则:
使用tlnet可以修改这个规则,在tlnet中定义拦截器,实现拦截规则,在被重定向之前进行处理,修改规则,返回处理结果, 比如返回404,405或直接走其他业务逻辑等。
有任何问题或建议请Email:donnie4w@gmail.com或 https://tlnet.top/contact 发信给我,谢谢!