简单HTTP Server的设计与实现

2017-03-22 12:39周畅王赜
软件工程 2017年1期
关键词:万维网

周畅 王赜

摘 要:超文本传输协议(HTTP)是分布式、协作和超媒体信息系统的应用协议。HTTP Server是一个监听特定端口TPC连接,对客户端请求进行处理的一个应用。得益于高级语言对HTTP协议的内置支持,我们也可以使用简单的方式来实现一个较完整功能的HTTP Server。本文主要是研究一个HTTP Server的简单实现,在实现的过程中,能够体现出POST、GET方法,现已将要求完成,本文一共分为三个章节,分别对于此次设计进行阐述。

关键词:超文本传输协议服务;万维网;外部应用程序

中图分类号:TP393.0 文献标识码:A

1 引言(Introduction)

CGI是WWW技术中最重要的技术之一,有着不可替代的重要地位。CGI是外部应用程序(CGI程序)与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的规程[1]。CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。使在网络服务器下运行外部分应用程序(或网关)成为可能。CGI-BIN目录是存放CGI脚本的地方。这些脚本使Web服务器和浏览器能运行外部程序,而无需启动另一个程序[2]。

2 项目背景(The project background)

在HTTP中定义了很多和服务器之间进行交互的方法,例如平时我们所看到的GET、POST、PUT、DELETE[3,4]。其中资源描述符是URL,在这里我们可以这样理解,一个URL地址可以描述一个网络上的资源,而前面所提到的HTTP中的,GET、POST、PUT、DELETE所对应的分别是这个资源的查、改、增、删四个操作,而这其中的POST一般适用于资源信息的更新,GET用于信息的获取/查询,因为早期的系统对于DELETE是不支持的,所以说PUT和DELETE用的比较少。

POST方法是HTTP中的一个重要的组成部分,这种方法一般是用来项目的服务器发出更新请求,在请求中附有请求实体[5]。

在客户机和服务器之间进行请求-响应时,这两种方法是最常被用到的。

POST:向指定的资源提交要被处理的数据,采用这种方法,查询查询字符串(名称/值对)是在POST请求的HTTP消息主体中发送的。

GET:从指定的资源请求数据,采用这种方法查询字符串(名称/值对)是在GET请求的URL中发送的[6,7]。

除以上介绍的内容之外,这两种方法在安全性等方面也有一定的区别,表1列出了两种方法在具体项目上的区别。

3 具体实现(Implementation)

实现HTTP Server的简单设计有多种语言可以选择,但是本文采取的是Python语言进行设计。Python是一种代表简单主义思想的语言[8]。它的底层是用C语言写的,很多标准库和第三方库也都是用C写的,运行速度非常快,无需考虑诸如如何管理你的程序使用的内存一类的底层细节[9]。

3.1 代码编写

程序的代码编写主要包括post、get方法实现,以及服务器的建立,其中在代碼编写的过程中,post和get的体系基本相同,所以这里只介绍get的方法,post就不再进行赘述,其中get的代码思路主要是首先从cgi中将存储的数据调到form中,接着取出字段名是name的字段,取出字段名是comment的字段,最后打印html,并且加入name comment。除了get、post的编写之外还有服务器的建立,大体思路是重写http server类,然后获得cgi句柄,接着设置cgi脚本路径,最后是监听端口的死循环。

以上是简单的介绍一下程序代码的思路,为了代码编写过程中能够更加的简洁一些,才会采用Python这种编程语言,下面附上代码的截图以及代码的注释,以下两个图分别是get和服务器创建的代码及注释,post的不再进行重复。

3.2 软件实现

建立在理解以上概念的基础之上,接下来对于此项目进行具体的实现,在创建项目的时候采用的Python语言,首先介绍一下程序实现的流程,程序运行开始之后,要建立一个服务器,然后创建监听端口,接下来用户会发送一个请求,在接收到用户的请求之后,要对用户的请求类型进行判断,因为在HTTP中定义了很多和服务器之间进行交互的方法,如前面提到的GET、POST、PUT、DELETE,但是由于此次项目只是针对GET、POST方法的实现进行设计,所以说PUT、DELETE在这里不做考虑。

判断用户的类型之后,要对用户的要求进行处理,例如,用户的请求类型是POST,那么接下来要在CGI-BIN中找到相对应的脚本,找到脚本之后,对请求进行处理,并且将数据返回到监听端口,GET类型的流程和POST是一样的,因为没有涉及DELETE和PUT方法,所以如果用户的要求是属于这两种类型的话,那么将不做任何处理,直接返回到监听端口[10]。

如图3所示是程序实现过程中的流程图,程序的流程图主要分为两个部分,一个是主程序的流程图,另外一个是在进行判断是后的流程图。

图3所显示的是该程序的主程序流程图,表现了不管采用的是什么样的方法,都是按照这样的流程进行,但是正如前面所说的那样,这个程序在处理用户请求的时候认可的是POST和GET两种方法,所以说当用户的请求是DELETE或者是PUT的时候,程序是不会进行数据处理的,如图4所示请求类型判断时候的具体方法。

4 结论(Conclusion)

在这篇文章中,我们讨论实现HTTP Server的一些方法,并分析了其优缺点。经过对比,我们针对GET和POST方法进行了设计。并使用Python语言编写脚本,对程序进行测试,最终实现简单HTTP Server的设计。

参考文献(References)

[1] Huang B,Lin H.A Java/CGI Approach to Developing a Geographic Virtual Reality Toolkit on the Internet[J].Computers & Geosciences,2002,28(1):13-19.

[2] Min B,Nahm E,Kim H.An analytic Model of an HTTP

Server[J].Journal of the Electrochemical Society,2002,140(140):1080-1085.

[3] Laliberte D,Hamilton M.Experimental HTTP Methods to Support Indexing and Searching[J].Journal of Biomolecular Structure & Dynamics,1996,1(6):1543-1546.

[4] Demiryurek U,Shahabi C,Banaei-Kashani F.Efficient K-nearest Neighbor Search in Time-Dependent Spatial Networks:US8566030[P].2013.

[5] 刘一峰,刘冰,郭良動.抓取HTTP协议POST文本数据方法设计[J].中国科技信息,2016(18):26-27.

[6] 杜雷,辛阳.基于规则库和网络爬虫的漏洞检测技术研究与实现[J].信息网络安全,2014(10):38-43.

[7] 齐红心.PHP开发过程中页面参数传递方法分析[J].软件导刊,2016,15(1):6-9.

[8] Salvatier J,Wiecki T,Fonnesbeck C.Probabilistic Programming in Python using PyMC[J].Statistics,2015.

[9] Perkel J M.Programming:Pick up Python[J].Nature,2015,

518(7537):125-126.

[10] 狄刚.HTTP实现代理服务器及缓存替换算法的研究[D].吉

林大学,2010.

作者简介:

周 畅(1993-),女,硕士生.研究领域:网络安全.

王 赜(1976-),男,博士,副教授.研究领域:网络安全.

猜你喜欢
万维网
基于万维网大数据的农药场地土壤污染快速预测方法研究*
“开放共享,合作共赢”是推动互联网不断发展的精神力量
共享比独占更重要
基于测绘地理信息技术的山洪质灾害信息动态提取方法研究
5 Fast Facts About the World Wide Web on Its 30th Birthday万维网30年:小知识一览
万维网30岁,创始人发公开信表达“不满意”
WWW是什么意思
万维网的HTTP和FTP协议
浅议互联网网格技术