route处理

route处理

简述#

在route.txt文件里定义了redirect的处理方法,goahead按照顺序依次检查客户端的请求,一旦请求path满足上面的条件后就会自动执行后面的cgi回调函数,当然,这些函数必须在goahead的初始化过程中进行注册,注册过程参看websOpen函数。 这个 extensions是后缀名的意思

Copy
route uri=/cgi-bin dir=cgi-bin handler=cgi route uri=/action handler=action route uri=/upload methods=PUT|POST handler=upload route uri=/ extensions=jst handler=jst route uri=/ methods=OPTIONS|TRACE handler=options

我的理解是,一个网址先去匹配route中的uri,如果先匹配到则直接执行后面的handler,正常的网址则在最后的uri=/

在route.txt中可以定义redirect选项,比如针对login,如果状态码是200,就跳转到home.asp,如果401,就跳转到login.html

Copy
route uri=/action/login methods=POST handler=action redirect=200@/home.asp redirect=401@login.html

mark

分析#

在源码浅析里 websRouteRequest(wp)先匹配route

Copy
static bool parseIncoming(Webs *wp) { // .. parseFirstLine(wp);//解析第一行信息 if (wp->state == WEBS_COMPLETE) { return 1; } parseHeaders(wp);//解析整个请求,把请求每一个属性记录下来,存在WP中 if (wp->state == WEBS_COMPLETE) { return 1; } wp->state = (wp->rxChunkState || wp->rxLen > 0) ? WEBS_CONTENT : WEBS_READY;//解析头来判断是不是有内容,是不是有输入。 websRouteRequest(wp);//route的意思是将这个wp与route.txt中每一行相匹配,如果能匹配,wp-route = route //.... }

再处理 goahead源码解析(三) 响应HTTP请求

根据route中的定义,响应类型具体有actionHandler(post请求),jstHandler(动态页面),fileHandler(默认静态页面),cgiHandler(调用外部程序)等。在这些handler中将数据返回给客户端。extensions就是后缀名,如果请求的文件后缀是.jst就会调用jstHandler。

handler类型

  • actionHandler比较简单,就是通过hash表,将actionName与对应websDefineAction定义的函数回调匹配上,去回调自己定义的回调函数即可,入参wp。用户定义action的行为中,要自己返回客户端action的结果。

  • jstHandler处理流程是先将page读取到内存中,从第一个字节开始,依次发送给客户端,遇到<%
    %>之后,回调绑定的C函数,将函数返回结果替换<% %>返回客户端,直到页面的所有内容都发完。
    这种技术可以使得页面可以动态根据服务器执行C函数的结果来响应内容。也就是动态页面。

  • fileHandler就是普通静态文件传输

  • cgiHandler调用外部的程序执行,从字面上理解如果是调用外部程序,还需要考虑到进程间通信。在我接触的项目中没有用到这个功能,不去研究。实际上嵌入式的WEB服务器不一定要用到这个。

消息处理#

form,action,cgi,Options都可以统归为一类,只要在router.txt中定义好处理方法就行了,注册如下(所有的注册都类似):

Copy
websDefineAction("your_actions_handle", your_actions_handle_fun);
posted @   zongzi10010  阅读(704)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示
CONTENTS