在嵌入式设备的管理与交互中,基于Web方式的应用成为目前的主流,这种程序结构也就是大家非常熟悉的B/S结构,即在嵌入式设备上运行一个支持脚本或CGI功能的Web服务器,能够生成动态页面,在用户端只需要通过Web浏览器就可以对嵌入式设备进行管理和监控,非常方便实用。本文主要介绍BOA服务器和CGI的工作原理。

一、BOA服务器

1.嵌入式WEB服务器常见的有lighttpd、shttpd、thttpd、boa、mathopd、minihttpd、appweb、goahead等,本文主要介绍BOA服务器。

它是一个非常小巧的服务器,执行代码大约60KB左右,是一个运行于unix或linux下的,支持CGI的、适合于嵌入式系统的单任务的http服务器,源代码开放、性能高。由于它是一个单任务的web服务器,只能一次完成用户的请求,而不会fork出新的进程来处理并发的链接请求。但是BOA支持CGI,能够为CGI程序fork出一个进程来执行相应的客户请求。它的主要功能是在互联嵌入式设备之间进行信息交互,达到通过网络对嵌入式设备进行监控,并将反馈信息自动上传给主控设备的目的。它是基于HTTP超文本传输协议的,Web网页是Web服务基本的传输单元。嵌入式Web服务的工作基于客户机/服务器计算模型,由Web浏览器(客户机)和Web服务器(服务器)构成,也即著名的B/S结构。运行于客户端的浏览器首先要与嵌入式Web服务器BOA端建立连接,打开一个套接字虚拟文件,此文件建立标志着SOCKET连接建立成功然后客户端浏览器通过套接字SOCKET以GET或者POST参数传递方式向Web服务器提交请求,Web浏览器提交请求后,通过HTTP协议传送给Web服务器。Web服务器接到请求后,根据请求的不同进行事务处理,返回HTML文件或者通过CGI调用外部应用程序,返回处理结果。服务器通过CGI与外部应用程序和脚本之间进行交互,根据客户端浏览器在请求时所采用的方法,服务器会搜集客户所提供的信息,并将该部分信息发送给指定的CGI扩展程序,CGI扩展程序进行信息处理并将结果返回给服务器,然后服务器对信息进行分析,并将结果发送回客户端在浏览器上显示出来。

2.服务器客户端之间的通信,是客户端的浏览器和服务器端的http服务器之间的HTTP通信,我们只需要知道浏览器请求执行服务器上哪个CGI程序就可以了,其他不必深究细节,以为这些过程不需要程序员去操作。服务器和CGI程序之间的通信才是我们关注的。

一般情况下,服务器和CGI程序之间是通过标准输入输出来进行传递的,而这个过程需要环境变量的协作方可实现。

(1)服务器将URL指向一个应用程序

(2)服务器为应用程序执行做准备

(3)应用程序执行,读取标准输入输出和有关环境变量

(4)应用程序进行标准输出

注:对于Windows系统而言,还可以通过profile文件进行数据传输

更通俗点讲,网页里面有个变量(环境变量),变量里面有个值, 通过某种方式把这个值传到 cgi 程序中, cgi 程序中提取这个变量的值,根据这个值做出相应的处理;那么这个变量是怎么在从网页传到 cgi 程序的呢?

3.在HTML中,当客户填写了表单,并按下了发送(submit)按钮后,表单的内容被发送到了服务器端,一般的,这时就需要有一个服务器端脚本来对表单的内容进行一些处理,或者是把它们保存起来,或者是按内容进行一些查询,或者是一些别的什么。没有了 CGI,WEB 的世界就完全失去了它的交互性,所有的信息都变成单向的了,而不能够有任何的反馈。这里就要说到表单了:

表单是html中

这个标签的翻译,在网页中主要负责数据采集功能。

一个表单有三个基本组成部分:表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法。 表单域:包含了文本框、密码框、隐藏域、多行文本框、复选框、单选框、下拉选择框和文件上传框等。 表单按钮:包括提交按钮、复位按钮和一般按钮;用于将数据传送到服务器上的CGI脚本或者取消输入,还可以用表单按钮来控制其他定义了处理脚本的处理工作。这些东西只要打开 dreamweaver 随便建个 html 就可以看到它的表单元素; 当你打开一个网页的时候,你输入的文字或者做出的选择,类似等等要提交信息的地方基本上都是属于表单元素; 这些表单元素(表单项)都必须放在表单内, 而整个表单在网页是看不到的,你可以理解它为一个容器,里面装着你要发给服务器的东西。

由于 HTML 只能显示静态网页,无法和服务器活动数据进行交互,所以要通过表单与服务器互动; 就跟你去银行办业务,人家要你在表上填一堆东西,然后把表提交给业务员,那个表就是表单, 网站表单类似这种包含了许多用户填写的信息,提交给服务器,服务器获取填写的信息后执行相应操作。

图为html文件中的一个代码段,这就是表单的提交过程

这里的“submit”即为表单内容,里面的数据会被提交到指定 URL(这个 url 可以是服务器上的一个 cgi程序,此处即为login.cgi)。

URL:统一资源定位符(Uniform Resource Locator,URL)是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。

4.在此处也简单的提一下网页

网页是一个纯文本文件,是向浏览者传递信息的载体,以超文本和超媒体为技术,采用HTML、CSS、XML等语言来描述组成页面的各种元素,包括文字、图像、音乐等,并通过客户端浏览器进行解析,从而向浏览器呈现网页的各种内容。做好的网页放在BOA服务器的WWW文件里,客户端浏览器对哪个网页有请求服务器就把哪个页面发送给浏览器。

二、CGI

CGI即通用网关接口(Common Gateway Interface),是一个 Web 服务器主机提供信息服务的标准接口。通过CGI 接口,Web 服务器就能够获取客户端提交的信息,转交给服务端的CGI 程序进行处理,后返回结果给客户端。组成 CGI 通信系统的是两部分:一部分是 html 页面,就是在用户端浏览器上显示的页面。另一部分则是运行在服务器上的 Cgi 程序。它们之间的通讯方式如下图:

客户端(网页)发送表单信息给服务器,服务器去调用CGI,CGI通过服务器将反馈信息发给客户端,客户端浏览器对信息进行解析并显示。

CGI程序被用来解释处理来自表单的输入信息,并在服务器产生相应的处理,或将相应的信息反馈给浏览器。CGI使网页不再是静态的,而是具有交互功能。到时做好的 cgi 程序放在服务器 www/cgi-bin 里面,cgi 程序不能跳出 www文件夹取其他文件夹的资源。

对于 CGI 程序来说,它继承了系统的环境变量。CGI 环境变量在 CGI 程序启动时初始化,在结束时销毁。当一个 CGI 程序不是被 web服务器调用时,它的环境变量几乎是系统环境变量的复制。当这个 CGI 程序被 web服务器调用时,它的环境变量就会多了以下关于 web服务器、客户端、CGI 传输过程等项目。

有了表单,知道表单项中有个按钮点一下就可以提交表单了, 那么这个表单是怎么提交到服务器上面的?

上面那个代码段中 method 中的 get 和 post 就是提交表单的两种方式;

GET: 对于那些使用了属性“METHOD=GET”的表单(或者没有 METHOD 属性,这时候 GET 是其缺省值),CGI 定义为:当表单被发送到服务器断后,表单中的数据被保存在服务器上一个叫做 QUERY_STRING 的环境变量中。这种表单的处理相对简单,只要读取环境变量就可以了。

POST:对于 POST 类型的表单,其内容被送到 CGI 程序的标准输入(在 C 语言中是stdin),而被传送的长度被放在环境变量 CONTENT_LENGTH 中。因而我们要做的就是,在标准输入中读入 CONTENT_LENGTH 长度的字符串。从标准输入读入数据听起来似乎要比从环境变量中读数据来的要容易一些,其实则不然,有一些细节地方要注意,这在下面的程序中可以看到。特别要注意的一点就是:CGI 程序和一般的程序有所不同,一般的程序在读完了一个文件流的内容之后,会得到一个EOF标志。但在 CGI 程序的表单处理过程中,EOF 是永远不会出现的,所以千万不要读多于 CONTENT_LENGTH 长度的字符,否这会有什么后果,谁也不知道。

两种表单提交方式之间的区别:

以GET方式接收的数据是有长度限制,而用POST 方式接收的数据是没有长度限制的。并且,以GET方式发送数据,可以通过URL的形式来发送,但POST方式发送数据必须要通过Form才到发送。

boa服务器如何运行cgi,BOA服务器与CGI相关推荐

  1. python在服务器上运行慢_服务器响应慢问题

    1.排除本机自身原因 2.服务器性能分析 3.项目本身分析(不详细说) 4.虚拟机分析 5.数据库分析 二.详细分析方法 1.排除本机自身原因 可以使用站长工具测试网站速度. 2.服务器性能分析 使用 ...

  2. 打开软件后跳出服务器正在运行中,关于 服务器正在运行中,由于另一个程序正在运行中,此操作没法完成 问题的解决...

    1.用Windows清理助手检测出中了木马,清除后提示依然存在.(木马不是主要原因.) 2.用SystemRepairEngineer V2.5.16.900检查启动项没有可疑项目. 3.用超级兔子魔 ...

  3. 云服务器软件运行出错,云服务器程序运行中出现木马

    攻击补充 01:13:30.597 [http-nio-9070-exec-28] WARN o.a.s.m.AbstractRememberMeManager - [onRememberedPrin ...

  4. 企业服务器虚拟化方案文档,服务器虚拟化在企业中的应用

    3 VMware虚拟化的一些应用 3.1分布式资源调度(DRS)功能 VMware的分布式资源调度(DRS)功能持续监榨VMware服务器集群中资源池的利用率,根据业务需求在虚拟服务器中智能地分配资源 ...

  5. 如何做到服务器虚拟化,老生常谈 如何打造服务器虚拟化的基础

    部署虚拟化带来的好处 几乎没有哪项技术像服务器虚拟化那样,迅速的成为了数据中心的基础组成部分.原因就在于:通过虚拟化技术当在单个物理服务器上运行多个虚拟服务器时,你会得到更多的硬件资源,这样你就能少花 ...

  6. 服务器与虚拟技术,云服务器与虚拟化服务器的区别

    虚拟化服务器是让一台服务器变成几台甚至上百台相互隔离的虚拟服务器,不再受限于物理上的界限,而是让CPU.内存.磁盘.I/O等硬件变成可以动态管理的"资源池",从而提高资源的利用率, ...

  7. l4d2 加入指定服务器,朝舞网 - Windows服务器上搭建求生之路(L4D2)Steam社区服务器...

    1:下载steam http://store.steampowered.com/ 2:安装并登陆steam 3:安装L4D2社区服务器 4:运行L4D2社区服务器 5:测试 6:server.cfg说 ...

  8. boa服务器如何运行cgi,嵌入式WEB服务器BOA+CGI.ppt

    嵌入式WEB服务器BOACGI 嵌入式WEB服务器:BOA+CGI 报 告 人: 李 实 * ASIPP 随着Internet技术的兴起,在嵌入式设备的管理与交互中,基于Web方式的应用成为目前的主流 ...

  9. boa服务器怎样运行,boa服务器的配置与编译

    上午看了下boa服务器的配置与编译,还不算难.对我而言,重在理解概念就行.不过,还是基于PC.交叉编译以后尝试. 系统:ubuntu10.04 boa版本:boa-0.94.13.tar.gz 内核: ...

  10. boa linux arm修改网卡,Boa服务器在ARM+Linux上的移植

    Boa服务器在ARM+Linux上的移植 一.Boa服务器介绍 Boa是一种非常小巧的Web服务器,其可执行代码只有大约60KB左右. 作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会 ...

最新文章

  1. Mysql列类型-数值型
  2. 树上分块 - Successor HDU - 4366
  3. 更高效的PacBio长read纠错算法的研究
  4. python基础代码事例-Python基础总结成千行代码,让Python入门更简单!
  5. MySQL优化--where条件字段的顺序对效率的影响 (02)
  6. 如何自动判断域名是否被微信拦截 被微信屏蔽的域名网址如何正常打开使用
  7. 秦九韶算法matlab实验报告,数值分析上机实验报告.doc
  8. 大数据之路:阿里巴巴大数据实践,附339页PPT下载
  9. java扑克牌排序_扑克牌排列 运用List ArrayList Arrays
  10. 世界卫生组织高血压防治指南_建立对团队和组织的信任的指南
  11. Xilinx Altera FPGA中的逻辑资源(Slices VS LE)比较
  12. Windows Azure Virtual Machine (33) Azure虚拟机删除重建
  13. 一个OpenMP的学习程序
  14. Vue学习(学习打卡Day12)
  15. 哈,我终于成功量产:因写保护无法格式化的U盘。
  16. This application’s application-identifier entitlement does not match that of the installed applicati
  17. TIA博途中如何为PLC分配IP地址?
  18. 论文推荐 | 综述:自动驾驶背景下的交通流模型研究
  19. PTA_2019春_电话聊天狂人
  20. 电子邮件签名档 HTML 手写时的折腾(附 原创工具)

热门文章

  1. c语言字符二维数组指针赋值,C语言之二维数组与指针
  2. php计算器源码,php 简单计算器
  3. 第4章 Function语义学
  4. matlab实现SCPI控制安捷伦电源
  5. 使用PYTHON采集船舶MMSI数据
  6. 最小二乘法曲线拟合(代码注释)
  7. Oracle function语法
  8. 纵横公路造价软件学习_纵横公路造价软件教程
  9. 一键安装包php.ini,laravel 在windows中使用一键安装包步骤
  10. http测试工具:httpbin