嵌入式WEB服务器的实现

2019-07-12 20:52发布

《ARM Linux开发-warewin 2G/3G无线传输(DTU)和路由器—笔记》

5.1Web服务器的设计原理

Web服务器的原理如下: 1建立连接:Web服务器做为服务端监听服务端口,打开一个socket文件,Web浏览器做为客服端建立连接此服务端口。  2发送请求:Web浏览器通过socketWeb服务器提交请求。HTTP的请求一般是GETPOST命令。 3应答:Web浏览器提交请求后,通过HTTP协议传送给Web服务器。Web服务器接到后,进行事务处理,处理结果又通过HTTP传回给Web浏览器,从而在Web浏览器上显示出所请求的页面。  4关闭连接:当应答结束后,Web服务器断开此次连接,保证Web浏览器能够与Web服务器再次建立连接。  Web服务器是个单进程服务。 大概的流程是:TCP Socket服务端一直监听,当有客户端浏览器连接请求时,建立连接,处理该连接的请求,返回处理结果到浏览器,关闭该连接再等新连接。TCP连接的特点是短连接,处理完一个请求,返回结果马上关闭该连接。这个WEB服务器能同时支持多个浏览器打开,但是要排队处理。但是对于嵌入式系统来说已经够了。

5.2、各种类型文件的输入、输出处理

WEB服务器主要对以下几种文件进行处理: **.asp文件无输入处理,输出处理将解析出WEB页面动态函数,然后输出请求页面。 apply.cgi*文件输入处理得到输入文件,输出处理根据action值处理各种按钮请求。 upgrade.cgi*文件输入处理上传的升级文件、对文件进行校验,输出校验结果及结果处理。 nvramdl.cgi*文件无输入处理,输出参数文件。 nvramul.cgi*文件输入处理上传的文件、对文件进行校验,输出校验结果及结果处理。

5.3增加一个动态页面及动态元素

5.3.1增加一个动态页面

1、在根文件系统根存放WEB页面的目录下添加一个名为*.asp的页面和一个gif图片,该图片内容为此页面标题。 2、在程序中将gif图片添加到WEB页面输出的主菜单中,对图片做超链接,链接目标为添加的这个*.asp页面。

5.3.2增加一个动态元素

1、将参数添加到参数列表中,一个列表元素包括参数的关键字、名称、验证处理方法、取值范围等。 2、把参数添加到默认参数列表中并赋默认值。

5.4WEB认证用户名和口令

WEB认证用户名和口令处理过程如下: 1浏览器发送访问页面的请求。 2WEB服务器用401未认证错误拒绝请求并发送一个WWW-Authenticate响应头标,WWW-Authenticate响应头标的值告诉浏览器使用基本认证模式。该头标同时告诉浏览器用户需要认证的区域名称,该区域是一个字符串,用于提醒用户使用哪一个口令。 3、浏览器在用户输入相应用户名和口令的登录密码认证窗口中显示区域的名称,接下来重发附有浏览器请求头标的请求,认证请求头标包含有Base64编码的用户名/口令(usemanme:password)。 4服务器从认证请求头标中解码出用户名和口令,在本地查找用户名的口令,并比较来自认证头标的口令和本地找到的口令。如果它们匹配,用户被认为通过了认证,并返回请求的页面。 5由于BA头一起被发送的每个HTTP请求,Web浏览器需要缓存一段合理的时间,以避免不断提示用户的用户名和密码的凭据。不同浏览器之间的缓存策略。默认情况下,Microsoft Internet Explorer的缓存15分钟。

5.5固件升级

1WEB页面处理 要使得文件上载能够成功,WEB页面元素有以下要求: l INPUT type=file 元素必须出现在 FORM 元素内。 l 必须为 INPUT type=file 元素指定 NAME 标签属性的值。 l INPUT TYPE="submit" 提交表单的按钮 l FORM 元素 method 标签属性的值必须设置为 post l FORM 元素 enctype 标签属性的值必须设置为 multipart/form-data 2WEB服务器后台处理 浏览器输入类型为文件类型,WEB服务器做输入处理,将WEB页面上传的文件写到/tmp目录下,然后对该文件做校验。服务器做输出处理,根据校验结果输出相应信息,校验通过则写到flash的备份区,并置升级标志写到flash第二分区,然后输出给浏览器校验结果信息并重启系统;校验不通过则直接输出给浏览器校验结果信息。 3uboot升级 固件升级是根据升级标志的值来判断系统是否升级,如果升级标志为空则不升级,如果升级标志的值为“update”则进行升级操作。 升级处理分析如下: 每次系统运行进入uboot后从nandflash的第二分区读出升级标志值,如果是“update”则从第五分区读出新的固件,擦除第三分区原有的固件,再把新的固件写到第三分区,最后擦除第二分区的升级标志。 处理流程如下图所示:   图5.1 uboot中固件升级流程图 4数据的存储空间 (1WEB浏览器上传固件后服务器将文件存储在根文件系统的/tmp目录下,文件名为uploadXXXX,掉电即丢失。2新固件保存到系统的/tmp目录下后,升级时从该目录下将新固件写到nandflash的第五分区,掉电即丢失。 (3)升级标志存储在nandfalsh的第二分区的第6-13个字节,升级时内容为“update”,不升级时内容被清空为0x04)内存加载的内核程序存储在nandfalsh的第三分区。

5.6上传下载参数配置文件

5.6.1、下载参数配置文件 

WEB页面的“下载参数配置文件”按钮submit类型提交表单,表单methodlink类型,提交给服务器后,服务器做输出处理,在所有参数前加了7个参数作为参数头,包括设备参数总个数,校验和、系统版本等。 服务器输出给浏览器添加了额外报头信息,内容中包括以下两句: "Content-Type: application/download " "Content-Disposition: attachment ; filename=nvram.txt" 发送头信息表示声明让浏览器下载文件,默认下载文件名为nvram.txt,浏览器收到后会弹出对话框提示下载文件,然后就可以将参数保存到nvram.txt文件中。 打开下载得到的nvram.txt文件,便可看到与设备/usr/para文件中的参数相比在文件头多了7个参数。

5.6.2、上传参数配置文件

WEB页面元素要求同固件升级。 浏览器输入类型为文件类型,服务器将输入的文件做输入处理,对文件进行验证,包括验证文件长度、文件头、检验和等。验证通过再将文件中的参数值取出提交保存到参数文件中,否则不处理该文件里的参数。 在文件输入处理完成后,服务器对浏览器再做输出处理,输出页面提示验证结果,如果文件验证失败提示错误信息,证通过则重启系统使用新的参数。

5.7、状态显示

1、显示设备当前基本信息,包括以下几项: 网络类型 系统版本 当前时间:动态获取 系统运行时间:动态获取 重启周期 2、显示LAN基本信息,包括以下几项: MAC地址:直接从nandflash的第二分区读出 本地IP地址 子网掩码 3、显示WAN基本信息,包括以下几项: 信号质量:动态获取无线模块的信号值 广域网连接状态:广域网是否连接正常,动态获取 广域网IP地址:动态获取当前的广域网IP地址 PPP按需拨号:显示当路由器当前的工作模式 流量统计:动态获取广域网接收、发送的流量 4、显示主要功能的开启状态,包括以下几个功能: 启用DHCP服务器功能 是否允许外网访问 是否开启NAT 是否开启远程校时 DTU功能 网控器功能 485功能

5.8WEB页面汉化、中英文切换

5.8.1WEB页面汉化

在纯英文源码的基础上做如下几方面的汉化: 1前台显示页面的汉化,所有.asp页面上文字和主菜单上页面标题按钮图片汉化。 2所有获取动态元素的函数中汉化返回值。 3所有验证参数的函数中提示信息汉化。 4服务器做种输出处理函数中提示信息汉化。

5.8.2、中英文切换

1WEB页面基本设置页面需增加“语言”选项参数的设置,参数中增加“语言”参数。 2、根文件系统存放*.asp页面分两个目录,一个目录存放中文页面,另一个存放英文页面,主程序运行httpd进程时根据“语言”参数的值来判断进入哪个目录下启动。 3、服务器输出处理结果页面的头尾结构的定义分中英文两种,通过“语言”参数值来设置页面输出的头尾。 4、服务器输出处理结果页面每个提示信息都要做“语言”参数值的判断,选择是输出中文还是英文。

5.9Web服务器的优点特点总结

1、安全性 用户访问WEB服务器时提供验证用户名和密码,避免非法用户对设备操作。 2、简单实用,易维护 服务器嵌入到设备中,用户设置参数、查询状态不需要安装额外的软件,只需知道设备的IP地址、打开电脑的浏览器软件即可访问设备的WEB服务器对设备进行操作。支持多种浏览器的访问,无平台限制,便于用户对设备的维护。动态显示设备信息,时时监控设备的状态。 3、操作方便,灵活 图形化操作界面简单明了,实现了对设备基本的设置参数、查询设备状态、固件升级等功能。采用HTTP协议,对于各种发送请求能及时处理,通信速度快。