HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通过使用网页浏览器,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80),通常由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。
客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
以下是 HTTP 请求/响应的步骤:
客户端连接到Web服务器
发送HTTP请求
服务器接受请求并返回HTTP响应
释放连接TCP连接
客户端浏览器解析HTML内容
- HTTP请求方法
get post head post put delete trace options connect
URL
HTTP状态码
- HTTP请求格式(请求协议)
- html语法规则
https://www.runoob.com/html/html-intro.html
- 嵌入lua混合开发
- HTML页面使用“<% %>”嵌入 LUA 代码,在HTML页面的开头会发现有一段“<% %>”的引用,那里包含着LUA的数据处理;
- 可以在HTML的任何地方,使用<%=xxx%>进行LUA数据的引用;
- HTML页面里的<%+header%>表示加载/usr/lib/lua/luci/view/header.htm;
- 使用<%:xxx%>,实现页面节点不同语言风格的切换
- cbi的跳转方式(跳转LUA页面):
local http = require 'luci.http'
local dsp = require 'luci.dispatcher'
http.redirect(dsp.build_url("/admin/system/wifitest"))
- template的跳转方式(跳转HTML页面):
local temp = require 'luci.template'
temp.render("sysauth")
服务器架构
main函数进行一些初始化(首先parse config-file,然后parse argv),然后进入一个循环,不断地监听,每当有一个客户请求到达时,则对它进行处理。
uh_cgi_request需要两个二外的参数pathinfo和interpreter,其中pin是一个struct,包含了路径中各种有用信息;ipr指明所用的cgi程序,因为一个服务器中可以有多个cgi程序。
如图所示,docroot是服务器的资源目录,是为了os准确定位资源位置,由uhttpd的config文件设定,如openwrt中为/www。后面的是client传来的url,开头的为cgi-prefix,也是有uhttpd的config文件设定的,它指明serv端采用cgi处理方式,如openwrt中的为/www/cgi-bin;紧接着的是cgi的程序名,它指明了使用哪个cgi程序;再后面就是实际的path信息了,在cgi方式中,它会被当成参数供cgi程序使用
uhttp的配置文件 位于 /etc/config 目录下
uhttp 的启动脚本 位于 /etc/init.d中
…….
在系统的根目录/ 下的www文件夹下
http请求的主页面,默认是/www/index.html,这个文件里显示了登录时常看见的那句话“LuCI - Lua Configuration Interface”,同时也指定了href链接/cgi-bin/luci
加载当前的目录的/cgi-bin/luci 这个脚本文件,脚本文件内容
run()函数作为CGI程序的启动入口
在上述run()函数中,创建了一个协同程序,调用httpdispatch()函数,而这个函数位于dispatcher.lua中。
对index的页面源码的解析,了解相应的html的语法,这个页面主要作用是超链接
文件位于\lua\luci\view\indexer
页面效果
对sysauth 页面进行解析,文件位于\lua\luci\view\sysauth
主要是将username和password按照表单的形式,进行提交。
其中需要对LuCI中的CBI模板进行学习。
对应的页面效果
通过网页进行截获信息
相应的后台处理函数为\lua\luci\dispatcher
dispatch 负责处理http中参数
上文中返回失败的返回
ps 中可以显示相应的进程
usr/sbin/uhttpd -f -h /www -r AOTUO -x /cgi-bin -u /ubus -t 60 -T 30 -k 20 -A 1 -n 3 -N 100 -R -p 0.0.0.0:80 -p [::]:80