简单的嵌入式web服务器设计

实验原理

WEB浏览器

    浏览器是个显示网页伺服器或档案系统内的HTML文件,并让用户与此些文件互动的一种软件。个人电脑上常见的网页浏览器包括Internet Explorer、Firefox、Safari。浏览器是最经常使用到的客户端程序。

WEB服务器

    Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。

    通俗的讲,Web服务传送页面使得浏览器可以浏览,它专门处理HTTP请求。

嵌入式服务器架构

常见的嵌入式WEB服务器有lighttpd、shttpd、thttpd、boa、mathopd、minihttpd、appweb、goahead等上百种

SOCKET编程技术

    Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程

    Socket可以支持数据的发送和接收,它会定义一种称为套接字的变量,发送数据时首先创建套接字,然后使用该套接字的sendto等方法对准某个IP/端口进行数据发送;接收端也首先创建套接字,然后将该套接字绑定到一个IP/端口上,所有发向此端口的数据会被该套接字的recv等函数读出。如同读出文件中的数据一样 

HTTP协议

HTTP--Hyper Text Transfer Protocol,超文本传输协议,是一种建立在TCP上的无状态连接,整个基本的工作流程是客户端发送一个HTTP请求,说明客户端想要访问的资源和请求的动作,服务端收到请求之后,服务端开始处理请求,并根据请求做出相应的动作访问服务器资源,最后通过发送HTTP响应把结果返回给客户端。其中一个请求的开始到一个响应的结束称为事务,当一个事物结束后还会在服务端添加一条日志条目

一次完整的HTTP请求需要七个步骤

图片来源:http://android.jobbole.com/85218/

HTTP报文:

它是HTTP应用程序之间发送的数据块。这些数据以一定的文本信息开头,这些信息描述了报文的内容及含义,报头后跟着数据部分

一次http请求,http会从客户端流到服务器,服务器的工作完成后,报文从服务器流到客户端

所有的http报文都可以分为请求报文和响应报文。它们的结构基本相同,只有起始语法些许不同

图片来源:https://www.cnblogs.com/zhuifeng/p/4072248.html

 

请求报文:它会向Web服务器请求一个动作

请求报文的格式:

起始行: <method> <request-URL> <version>

头部:   <headers>

主体:   <entity-body>

 

响应报文:它会将请求的结果返回给客户端。

响应报文的格式:

起始行:  <version> <status> <reason-phrase>

头部:    <headers>

主体:    <entity-body>

1、方式(method):客户端希望服务器对资源执行的动作,是一个单独的词,比如,GET、POST或HEAD

2、请求URL(request-URL):要直接与服务器进行对话,只要请求URL是资源的绝对路径就可以了,服务器可以假定自己是URL的主机/端口

3、版本(version):报文所使用的HTTP版本。其格式:HTTP/<主要版本号>.<次要版本号>

4、状态码(status-code):状态码是三位数字,描述了请求过程中所发生的情况。每个状态码的第一位数字都用于描述状态的一般类别(比如,“成功”、“出错”等等)

5、原因短语(reason-phrase):数字状态码的可读版本,包含行终止序列之前的所有文本。原因短语只对人类有意义,因此,尽管响应行HTTP/1.0 200 NOT OK和HTTP/1.0 200 OK中原因短语的含义不同,但同样都会被当作成功指示处理

6、头部(header):可以有零个或多个头部,每个首部都包含一个名字,后面跟着一个冒号(:),然后是一个可选的空格,接着是一个值,最后是一个CRLF首部是由一个空行(CRLF)结束的,表示了头部列表的结束和实体主体部分的开始

7、实体的主体部分(entity-body):实体的主体部分包含一个由任意数据组成的数据块,并不是所有的报文都包含实体的主体部分,有时,报文只是以一个CRLF结束。

SOCKET编程接口

1.socket()函数

int socket(int domain,int type,int protocol);

说明:socket()函数创建一个套接字
参数:
domain    应用程序所在主机使用的通信协议族
type      建立的套接字类型
protocol  使用的特定协议

2.bind()函数

int bind(int sockfd,struct sockaddr *my_addr,socklen_t addrlen);

说明:将套接字地址和所创建的套接字id联系起来
参数:
sockfd        socket返回的文件描述符
my_addr       指向结构体sockaddr的指针,保存地址信息(端口、ip)
addrlen       sockaddr的长度

3、connect函数

int connect(int sockfd,const struct sockaddr *serv_addr,socklen_t addrlen);

说明:建立套接字连接,成功返回0,否则返回-1
参数:

sockfd        socket返回的文件描述符
serv_addr     保存着连接信息的结构体sockaddr
addrlen       sockaddr的长度

4、listen()函数

int listen(int sockfd,int backlog);

说明:使得一个进程可以接受其它进程的请求,使其变为服务器进程

参数:
sockfd        socket返回到文件描述符
backlog       允许建立连接的数目

5、accept()函数

int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen);

说明:用于流式套接字的通讯,返回实际发送的数据的字节数
参数:

sockfd        socket返回的文件描述符
addr          保存套接字信息的结构体
addrlen       addr的长度

6、send()函数

ssize_t send(int sockfd,const void *msg,size_t len,int flags);

说明:用于流式套接字或数据报套接字的通讯,返回实际发送的数据的字节数

参数:
sockfd    发送数据的套接字描述符
msg       指向发送数据的指针
len       发送数据的长度
flags     默认为0

7、recv()函数

ssize_t recv(int sockfd,void *buf,size_t len,int flags);

说明:    用于流式套接字的通讯,返回值为实际读入缓冲的数据的字节数

参数:
sockfd    要读的套接字描述符
buf       要读的消息的缓冲区
len       缓冲的最大长度
flags     默认为0

Apache服务器的安装

Web服务器一般指网站服务器,是指驻留于Inter网上某种类型的计算机程序,它可以向浏览器客户端提供文档,也可以放置网站文件,让全世界浏览;它可以放置数据文件,让全世界下载。

Apaches世界排名第一的Web服务器软件。它可以运行在所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用。

如果你使用的linux系统为Ubuntu,你可以很方便的下载apache

终端输入:apt-get install apache2

只需一个指令,你就能完成apache的安装,如果你想要进行apache的各种配置,请自行搜索

安装之后,apache默认是开启的且每次会随系统启动

终端输入:apachectl -v查看apache的版本

当然,你可以在浏览器输入你服务器的ip地址(安装服务器的linux的ip),如果你得到默认界面,那么一切都是正常的

之后,你就能在/var/www/html/下找到index.html文件,编辑它,你就能得到你想要的界面

效果如下:

该页面为仿写淘宝页面

  • 7
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值