Відповіді:
WSGI запускає інтерпретатор Python на старті веб-сервера, або як частина процесу веб-сервера (вбудований режим), або як окремий процес (режим демон), і завантажує в нього сценарій. Кожен запит призводить до виклику певної функції в скрипті, при цьому середовище запиту передається як аргументи функції.
CGI запускає скрипт як окремий процес кожного запиту і використовує змінні середовища, stdin та stdout для "спілкування" з ним.
З точки зору повністю відступаючої, Blankman, ось моя "сторінка вступу" для інтерфейсу шлюзу веб-служб:
Частина перша: веб-сервери
Веб-сервери подають відповіді. Вони сидять навколо, терпляче чекаючи, а потім раптом, не попереджуючи зовсім:
Веб-сервери (принаймні, кращі) в цьому дуже ДУЖЕ хороші. Вони масштабують обробку вгору та вниз, залежно від попиту, вони надійно ведуть розмови з найвибагливішими клієнтами по-справжньому крутих мережах, і нам ніколи насправді не потрібно про це турбуватися. Вони просто продовжують служити.
Це моя думка: веб-сервери - це саме це: сервери. Вони нічого не знають про вміст, нічого про користувачів, насправді нічого, крім того, як багато чекати і надійно відповідати.
Вибір веб-сервера повинен відображати вашу перевагу доставки, а не програмне забезпечення. Ваш веб-сервер повинен відповідати за обслуговування, а не обробку чи логічні речі.
Частина друга: (ПІТОН) ПРОГРАМНЕ ЗАБЕЗПЕЧЕННЯ
Програмне забезпечення не сидить навколо. Програмне забезпечення існує лише під час виконання. Програмне забезпечення не дуже пристосоване, якщо мова йде про несподівані зміни в оточенні (файли не там, де він очікує, параметри перейменовані тощо). Хоча оптимізація має бути центральним принципом вашого дизайну (звичайно), саме програмне забезпечення не оптимізується. Розробники оптимізують. Програмне забезпечення виконує. Програмне забезпечення виконує всі речі в розділі "навмисне бурмотіння" вище. Може бути що завгодно.
Ваш вибір або дизайн програмного забезпечення повинен відображати вашу програму, ваш вибір функціональності, а не ваш вибір веб-сервера.
Саме тут традиційний метод "компіляції" мов на веб-сервери стає болючим. У кінцевому підсумку ви додаєте код у свою програму, щоб впоратися з фізичним середовищем сервера або, принаймні, змушений вибрати відповідну бібліотеку "обгортки", яку потрібно включити під час виконання, щоб створити ілюзію рівномірності між веб-серверами.
ТАКІ ШТО WSGI?
Отже, нарешті, що таке WSGI? WSGI - це сукупність правил , написаних у дві половини. Вони написані таким чином, що їх можна інтегрувати в будь-яке середовище, яке вітає інтеграцію.
У першій частині, написаній на стороні веб-сервера, написано: "Добре, якщо ви хочете мати справу з додатком WSGI, ось як програмне забезпечення буде думати при завантаженні. Ось, що потрібно зробити доступним для програми, і тут це інтерфейс (макет), на який ви можете очікувати наявності кожної програми. Більше того, якщо щось піде не так, ось як буде думати додаток і як ви можете очікувати, що він буде вести себе ".
Друга частина, написана для прикладного програмного забезпечення Python, говорить: «Добре, якщо ви хочете мати справу з сервером WSGI, ось як сервер буде думати, коли він зв’яжеться з вами. Ось що потрібно зробити доступним для сервера, і ось інтерфейс (макет), від якого можна очікувати, що кожен сервер матиме. Більше того, якщо щось піде не так, ось як ви повинні вести себе, і ось що ви повинні сказати серверу ".
Отож, у вас це є - сервери будуть серверами, а програмне забезпечення буде програмним забезпеченням, і ось такий спосіб вони можуть добре уживатися, не потребуючи жодних дозволів на особливості іншого. Це WSGI.
mod_wsgi, з іншого боку, є плагіном для Apache, який дозволяє йому спілкуватися з програмним забезпеченням, сумісним з WSGI, іншими словами, mod_wsgi - це реалізація - в Apache - правил першої частини правила вище.
Що стосується CGI .... запитайте когось іншого :-)
Якщо вам не зрозуміло всі терміни в цьому просторі, і давайте поглянемо на це, це заплутане абревіатура, також є хороший фоновий читач у формі офіційного пітона HOWTO, який обговорює CGI проти FastCGI проти WSGI і так далі на. Я б хотів, щоб я прочитав її спочатку.
І CGI, і WSGI визначають стандартні інтерфейси, які програми можуть використовувати для обробки веб-запитів. Інтерфейс CGI знаходиться на нижчому рівні, ніж WSGI, і включає сервер, який налаштовує змінні середовища, що містять дані з HTTP-запиту, при цьому програма повертає щось відформатоване майже як голий відповідь сервера HTTP.
З іншого боку, WSGI - це специфічний для Python інтерфейс дещо вищого рівня, який дозволяє програмістам писати програми, які є агностичними для сервера та які можна зафіксувати в інших програмах WSGI (середнє програмне забезпечення).