简单的web服务器和Apache服务器有什么区别?

2024-03-29 12:25:19 发布

您现在位置:Python中文网/ 问答频道 /正文

在这里,简单web服务器是指处理简单HTTP请求的服务器,如下所示:

import BaseHTTPServer
class WebRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
    def do_GET(self):
        if self.path == ‘/foo’: 
            self.send_response(200)
            self.do_something()
        else:
            self.send_error(404)

    def do_something(self):
        print ‘hello world’

server = BaseHTTPServer.HTTPServer((’127.0.0.1′,8080), WebRequestHandler)    
server.serve_forever()

尽管处理POST、PUT、DELETE方法的请求,这个简单的服务器与Apache Web服务器有什么区别? 或者换句话说,如果我想使用python来实现一个可以投入使用的服务器,我还应该做什么?

如果能展示Apache服务器的大局,我们将不胜感激。


Tags: importself服务器sendwebhttpserverapache
3条回答

Apache是用C编写的,设计成可伸缩的,而BaseHTTPServer是用于本地/测试/调试环境的。

因此,您不应该对任何生产站点使用BaseHTTPServer。

Or in other words, if i want to use python to implement a server which can be put into use of business, what also should i do?

已经有了基于python的web服务器,比如CherryPy(我认为这是一个与Apache在相同堆栈级别上的web服务器解决方案;虽然它更基于python,但是Apache已经存在很久了)。

如果您希望从头开始编写一个轻量级的非常简单的web服务器,那么使用BaseHTTPServer可能没有什么问题,除了一些突出的设计问题(我听说竞争条件可能会永久地阻塞套接字,直到线程死亡)。

尽管我不建议(单独)将其用于业务,但一些大公司使用BaseHTTPServer时会使用一些额外的机器: http://www.cherrypy.org/browser/trunk/cherrypy/_cphttpserver.py?rev=583

详细说明一下,Apache是行业标准。它有很多配置选项、安全团队、我认为的漏洞邮件列表等。它支持模块(例如mod_python)。基于Python的web服务器还通过WSGI堆栈支持基于Python的模块(可能它们允许您访问非Python的东西);WSGI应用程序可以在任何基于Python的web服务器上运行(Apache也有modwsgi);我认为它们的范围比Apache模块窄。

Apache模块示例:http://httpd.apache.org/docs/2.0/mod/

WSGI示例(不是有效的比较):http://wsgi.org/wsgi/Middleware_and_Utilities

如果我正在做一些非常轻量级的事情,或者如果我需要对web服务器内部进行模块接口无法提供的大量控制,或者如果我正在做一个个人项目,我可能会编写自己的web服务器。我不会为自己的服务器编写代码,除非我对现实世界中的web服务器的工作有着丰富的经验。从安全漏洞的角度来看,这一点尤其重要。

例如,我曾经写过一个基于网络的音乐播放器。我使用BaseHTTPServer从我编写的沙盒中提供音乐,以确保人们无法访问任意文件。穿线简直是噩梦。(我记得有一个错误,你需要向Popen传递特殊的参数,因为线程导致了一个隐式fork,它会导致挂起在悬挂的文件描述符上。)还有其他各种问题。代码需要进行大量重构。对于一个个人项目来说,这是非常值得的,但对于一个只需要一个网站的企业来说,这是一项重大的事业,并不值得。

我认识两个初创公司,他们过去一直满足于使用Pylons(使用Paste)或Turbogears(使用CherryPy),如果你正在寻找一个轻量级python web服务器堆栈的话。不过,它们的默认模板系统是缺乏的。Apache和更精简、更基于python的web服务器之间的选择也可能取决于您的联合开发人员的技能集。

Apache web服务器知道并支持整个HTTP协议,因此它可以处理与头、保持连接打开、缓存内容、所有不同HTTP响应代码及其正确处理等相关的所有复杂问题

您必须理解整个HTTP协议,并用代码表示它,以超越简单的HTTP服务器。

相关问题 更多 >