Подтвердить что ты не робот

Какая разница между простым веб-сервером и сервером Apache?

Здесь простой веб-сервер означает сервер, который обрабатывает простой 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 Server? Или, другими словами, если я хочу использовать python для реализации сервера, который может быть использован в бизнесе, что же мне делать?

Было бы очень полезно, если будет показана общая картина Apache Server.

4b9b3361

Ответ 1

Или, другими словами, если я хочу использовать python для реализации сервера, который может быть использован в бизнесе, что мне также делать?

Уже существуют веб-серверы на основе python, такие как CherryPy (который, как я думаю, предназначен для решения веб-сервера на том же уровне стека, что и Apache, однако он больше основан на python, и Apache был вокруг много больше).

Если вы хотите написать легкий чрезвычайно простой веб-сервер с нуля, возможно, нет ничего плохого в использовании BaseHTTPServer, кроме, возможно, нескольких выдающихся проблем дизайна (я слышу, что условия гонки могут постоянно засорять сокет до тех пор, пока нить не умрет).

Хотя я бы не рекомендовал его (в одиночку) для бизнеса, некоторые из крупных мальчиков используют BaseHTTPServer с небольшим количеством дополнительного оборудования: http://www.cherrypy.org/browser/trunk/cherrypy/_cphttpserver.py?rev=583

Чтобы разработать, Apache является отраслевым стандартом. У него множество опций конфигурации, команда безопасности, списки рассылки для уязвимостей, которые я думаю, и т.д. Он поддерживает модули (например, mod_python). Веб-серверы на базе Python также поддерживают модули на основе python (возможно, они могут позволить вам получить доступ к вещам, отличным от python) через нечто, называемое стек WSGI; приложение WSGI может запускаться на любом веб-сервере на основе python (и Apache тоже, который также имеет modwsgi); Я думаю, что они более узкие по охвату, чем модули Apache.

Примеры модуля Apache: http://httpd.apache.org/docs/2.0/mod/

Примеры WSGI (не действительное сравнение): http://wsgi.org/wsgi/Middleware_and_Utilities

Я могу закодировать свой собственный веб-сервер, если я делаю что-то очень легкое, или если мне нужен огромный контроль над внутренними веб-серверами, которые интерфейсы модуля не могли обеспечить, или если я делал личный проект. Я бы не закодировал свой собственный сервер для бизнеса, если бы у меня не было значительного опыта работы с веб-серверами реального мира. Это особенно важно с точки зрения уязвимости безопасности.

Например, однажды я написал веб-музыкальный плеер. Я использовал BaseHTTPServer для прослушивания музыки из песочницы, которую я написал, чтобы люди не могли получить доступ к произвольным файлам. Threading был кошмаром. (Я помню ошибку, в которой вам нужно было передать специальные аргументы Popen, поскольку потоки вызвали неявную вилку, которая вызывала бы зависания на оборванных дескрипторах файлов.) Были и другие различные проблемы. Код должен быть реорганизован много. Это может быть очень полезно для личного проекта, но является значительным начинанием и не стоит для бизнеса, которому просто нужен веб-сайт.

Я знаю двух стартапов, которые в прошлом использовали контент Pylons (используя Paste) или Turbogears (используя CherryPy), если вы ищете легкий стежок веб-сервера python. Однако их системы шаблонов по умолчанию отсутствуют. Выбор между Apache и более компактным веб-сервером на основе python также может зависеть от набора навыков ваших со-разработчиков.

Ответ 2

Apache написан на C и предназначен для масштабирования, в то время как BaseHTTPServer предназначен для локальных/тестовых/отладочных сред.

Поэтому вы не должны использовать BaseHTTPServer для любых производственных сайтов.

Ответ 3

Веб-сервер Apache знает и поддерживает весь HTTP-протокол, поэтому он может справляться со всеми осложнениями, связанными с заголовками, открывать соединения, кэшировать контент, все разные коды ответов HTTP и их надлежащее обращение и т.д.

Вам нужно будет понять весь HTTP-протокол и выразить его в коде, чтобы выйти за пределы вашего простого HTTP-сервера.