tlnet与go http的路由规则


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.comhttps://tlnet.top/contact  发信给我,谢谢!