原理的话就是监听80端口,如果有连接来的话就解析HTTP报文。
我们用的浏览器访问网站的时候,默认情况下都是连接的服务器80端口,这个端口号是约定俗成的,但是也可以显示指定,比如
XXXXXXXXXXXXXX:1234,就是显示指明要连接服务器的1234端口访问网页。
客户端,或者说浏览器在连接上服务器后,会传送一段http报文,大概内容就是下面这样的:
GET /XXXXXXml HTTP/1.1 Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0;
Host:
XXXXXXXXXXXXXX Connection: Keep-Alive
。
。
。
其中第一行,GET表示以get方式发送的请求,/XXXXXXml表示访问网站根目录下的一个叫XXXXXXml的页面,剩下的内容就是关于访问哪个域名啊,或者还有断点续传的请求起始位置之类的。服务器程序要做的就是解析报文头,然后把相应的页面传过去。
关于那个动态页面,就是通过创建进程的方式,以一个实现约定好的参数形式把客户端的连接交给动态页面那个程序,由程序处理后将结果传回标准http格式内容,实现页面内容可变的功能。
这样做的好处就是可以像设计网页一样设计程序界面,并且这个界面就是一个网页,外网也能访问,但是这个页面的结果是交给另一个程序处理的,就达到了界面和处理程序分离的目的,以后想改界面,只需要修改网页,程序都不用重新编译。还有个好处就是网页可以直接控制硬件了。
我觉得最有用的就是这种分层设计,界面和处理逻辑分离,同时也有底层控制能力,用在嵌入式系统上很适合。