嵌入式Web服务器的实现

上传人:橙** 文档编号:333363221 上传时间:2022-09-01 格式:PDF 页数:5 大小:59.68KB
返回 下载 相关 举报
嵌入式Web服务器的实现_第1页
第1页 / 共5页
嵌入式Web服务器的实现_第2页
第2页 / 共5页
嵌入式Web服务器的实现_第3页
第3页 / 共5页
嵌入式Web服务器的实现_第4页
第4页 / 共5页
嵌入式Web服务器的实现_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《嵌入式Web服务器的实现》由会员分享,可在线阅读,更多相关《嵌入式Web服务器的实现(5页珍藏版)》请在金锄头文库上搜索。

1、嵌入式 Web 服务器的实现1Boa 程序1.1Boa 简介boa 是最受人喜爱的嵌入式web 服务器,功能较为强大,支持认证,cgi 等。Boa 是一个单任务的HTTP SERVER,它不像传统的web 服务器那样为每个访问连接开启一个进程,也不会为多个连接开启多个自身的拷贝。Boa 对所有的活动的http 连接在内部进行处理,而且只为每个CGI连接(独立的进程)开启新的进程。因此,boa 在同等硬件条件下显示出更快的速度。测试表明 boa 在 Pentium 300MHZ 下能够每秒钟处理几千次点击,在 20 MHz 386/SX下能够每秒钟处理几十次点击访问。Boa 和 thttpd 等

2、,与 apache 等高性能的web 服务器主要区别是,它们一般是单进程的服务器,只有在完成一个用户请求后才能响应另一个用户的请求,无法并发响应,但这在嵌入式设备的应用场合里已经足够了。Boa 设计主要出于速度和安全,是指不被恶意用户暗中破坏,而不是指它有很好的访问控制和通信加密。可以添加SSL来保证数据传输中的保密和安全。1.2Boa 的功能、特点1)支持 HTTP/1.0(实验性的、有条件的支持HTTP/1.1)1.12)支持 CGI/1.1,编程语言除了C语言外,还支持Python,Perl,PHP,但对 PHP没有直接支持,没有mod_perl,mod_snake/mod_python

3、等。3)Boa 支持 HTTP认证,但不支持多用户认证。4)它可以配置成SSL/HTTPS 和 IPv6。5)支持虚拟主机功能。Boa 服务器与其它服务器的不同:为了追求速度和简单性,boa 服务器在一些方面不同于一些流行的web 服务器。1)CGI程序的 REMOTE_HOST 环境变量没有设置2)Boa 不具有 ssi(server side includes)3)Boa 不具有访问控制4)没有 chroot 选项1.3Boa 的工作原理BOA 是一款非常小巧的Web 服务器,源代码开放、性能优秀、支持CGI通用网关接口名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 5 页

4、-技术,特别适合应用在嵌入式系统中。BOA服务器主要功能是在互联嵌入式设备之间进行信息交互,达到通过网络对嵌入式设备进行监控,并将反馈信息自动上传给主控设备的目的。它是基于 HTTP超文本传输协议的,Web 网页是 Web 服务最基本的传输单元。嵌入式 Web 服务的工作基于客户机服务器计算模型,由Web 浏览器(客户机)和 Web 服务器(服务器)构成,也即著名的BS结构。运行于客户端的浏览器首先要与嵌入式Web 服务器 BOA端建立连接,打开一个套接字虚拟文件,此文件建立标志着SOCKET 连接建立成功。然后客户端浏览器通过套接字SOCKET以 GET或者 POST参数传递方式向Web 服

5、务器提交请求,Web 浏览器提交请求后,通过 HTTP协议传送给Web 服务器。Web 服务器接到请求后,根据请求的不同进行事务处理,返回 HTML文件或者通过CGI调用外部应用程序,返回处理结果。服务器通过CGI与外部应用程序和脚本之间进行交互,根据客户端浏览器在请求时所采用的方法,服务器会搜集客户所提供的信息,并将该部分信息发送给指定的CGI扩展程序,CGI扩展程序进行信息处理并将结果返回给服务器,然后服务器对信息进行分析,并将结果发送回客户端在浏览器上显示出来。1.4Boa 程序的移植。1)从 www.boa.org 下载 Boa 源码,当前最新版本为0.94.13 2)解压并进入源码目

6、录的src 子目录#tar xzf boa-0.94.13.tar.gz#cd boa-0.94.13/src 3)生成 Makefile 文件#./configure 4)修改 Makefile 文件找到 CC=gcc,将其改成CC=arm-linux-gcc,再找到CPP=gcc E,将其改成CPP=arm-linux-gcc E,并保存退出。5)修改 compat.h 文件#define TIMEZONE_OFFSET(foo)foo#-tm_gmtoff 修改成#define TIMEZONE_OFFSET(foo)(foo)-tm_gmtoff 否则会编译出错6)编译得到boa 可执

7、行程序运行 make 进行编译,得到的可执行程序为boa,将调试信息剥去,得到的最后程序只有约 60KB 大小。#make#arm-linux-strip boa 1.5Boa 程序的配置1)建立配置文件boa.conf 在/etc 目录下建立一个boa 目录,里面放入 Boa 的主要配置文件boa.conf。在 Boa 源码目录下已有一个示例boa.conf,可以在其基础上进行修改,下面解释一下该文件的含义:名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 5 页 -/#监听的端口号,缺省都是80,一般无需修改Port 80#bind 调用的 IP地址,一般注释掉,表明绑定到IN

8、ADDR_ANY,通配于服务器的所有IP地址#Listen 192.68.0.5#作为哪个用户运行,即它拥有该用户的权限,一般都是nobody,需要/etc/passwd中有 nobody 用户User nobody#作为哪个用户组运行,即它拥有该用户组的权限,一般都是 nogroup,需要在/etc/group文件中有nogroup 组Group nogroup#当服务器发生问题时发送报警的email 地址,目前未用,注释掉#ServerAdmin rootlocalhost#错误日志文件。如果没有以/开始,则表示从服务器的根路径开始。如果不需要错误日志,则用#/dev/null。在下面设置

9、时,注意一定要建立/var/log/boa目录ErrorLog/var/log/boa/error_log#访问日志文件。如果没有以/开始,则表示从服务器的根路径开始。如果不需要错误日志,则用#/dev/null 或直接注释掉。在下面设置时,注意一定要建立/var/log/boa目录#AccessLog/var/log/boa/access_log#是否使用本地时间。如果没有注释掉,则使用本地时间。注释掉则使用UTC时间#UseLocaltime#是否记录CGI运行信息,如果没有注释掉,则记录,注释掉则不记录#VerboseCGILogs#服务器名字ServerName #是否启动虚拟主机功能

10、,即设备可以有多个网络接口,每个接口都可以拥有一个虚拟的 Web 服务器。一般注释掉,即不需要启动#VirtualHost#非常重要,HTML 文档的主目录。如果没有以/开始,则表示从服务器的根路径开始。DocumentRoot/var/www#如果收到一个用户请求的话,在用户主目录后再增加的目录名UserDir public_html#HTML 目录索引的文件名,也是没有用户只指明访问目录时返回的文件名DirectoryIndex index.html#当 HTML 目录没有索引文件时,用户只指明访问目录时,boa 会调用该程序生成索引文件然后返回给用户,因为该过程比较慢最好不执行,可以注释

11、掉或者给每个HTML 目录加上#DirectoryIndex 指明的文件#DirectoryMaker/usr/lib/boa/boa_indexer#如果 DirectoryIndex 不存在,并且 DirectoryMaker 被注释,那么就用Boa 自带的索引生成程序来生成目录的索引文件并输出到下面目录,该目录必须是Boa 能读写#DirectoryCache/var/spool/boa/dircache#一个连接所允许的HTTP持续作用请求最大数目,注释或设为0 都将关闭 HTTP持续作用名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 5 页 -KeepAliveMax

12、1000#HTTP持续作用中服务器在两次请求之间等待的时间数,以秒为单位,超时将关闭连接KeepAliveTimeout 10#指明mime.types 文件位置。如果没有以/开始,则表示从服务器的根路径开始。可以注释掉避免使用mime.types 文件,此时需要用AddType 在本文件里指明MimeTypes/etc/mime.types#文件扩展名没有或未知的话,使用的缺省MIME 类型DefaultType text/plain#提供 CGI程序的 PATH环境变量值CGIPath/bin:/usr/bin:/usr/local/bin#将文件扩展名和MIME 类型关联起来,和 mim

13、e.types 文件作用一样。如果用 mime.types文件,则注释掉,如果不使用mime.types 文件,则必须使用#AddType application/x-httpd-cgi cgi#指明文档重定向路径#Redirect/bar http:/elsewhere/feh/bar#为路径加上别名Alias/doc/usr/doc#非常重要,指明CGI脚本的虚拟路径对应的实际路径。一般所有的CGI脚本都要放在实际路径里,用户访问执行时输入站点+虚拟路径+CGI脚本名ScriptAlias/cgi-bin/var/www/cgi-bin/2)用户可以根据自己需要,对 boa.conf 进行

14、修改,但必须要保证其他的辅助文件和设置必须和boa.conf 里的配置相符,不然Boa 就不能正常工作。3)在上面的例子中,我们还需要创建日志文件所在目录/var/log/boa,创建HTML 文档的主目录/var/www,将mime.types文件拷贝到/etc目录,创建CGI 脚本所在目录/var/www/cgi-bin/。mime.types 文件用来指明不同文件扩展名对应的MIME 类型,一般可以直接从Linux 主机上拷贝一个,大部分也都是在主机的/etc 目录下。2CGI 程序2.1cgi 下载文件程序#include#include#include#include#include

15、#define MAX_FILE_LEN(1024*30)名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 5 页 -#define DOWNLOAD_FILE_PATH/var/www#define DOWNLOAD_FILE_NAME index.html int main()FILE*fp=NULL;char filebufMAX_FILE_LEN=0;char cmd512=0;struct stat sb;sprintf(cmd,%s/%s,DOWNLOAD_FILE_PATH,DOWNLOAD_FILE_NAME);stat(cmd,&sb);/取待下载文件的大小/输出

16、 HTTP头信息,输出附加下载文件、文件长度以及内容类型/printf(HTTP/1.0 200 OKn);printf(Content-Disposition:attachment;filename=%srn,DOWNLOAD_FILE_NAME);printf(Content-Length:%drn,sb.st_size);printf(Content-Type:application/octet-streamrn);printf(rn);/printf(Connection:closenn);sprintf(cmd,%s/%s,DOWNLOAD_FILE_PATH,DOWNLOAD_FILE_NAME);if(fp=fopen(cmd,r+b)/成功打开文件,读取文件内容do int rs=fread(filebuf,1,sizeof(filebuf),fp);fwrite(filebuf,rs,1,stdout);while(!feof(fp);fclose(fp);return 1;名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 5 页 -

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 初中教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号