Что такое сервер приложения?
Из всего прочитанного в интернете мне удалось понять, что существуют 2 вида серверов: статические и динамические. Статические сервера включают в себя «сервер-железо» и «сервер-ПО», которое работает с HTTP и URL. Динамические сервера содержат все то, что содержат статические + сервер приложения и базу данных. Вся инфа отсюда. То есть по сути динамический сервер называется таким из-за работы сервер приложения, который может изменять файлы, передаваемые по HTTP, налету. У меня возник вопрос. Получается, что сервер приложения — это какой-то код, который позволяет обрабатывать файлы. Но судя по этой цитате, это не совсем так (вряд ли код может содержать веб-сервер): Источник
Сервер приложений может содержать веб-серверы, поэтому он считается более мощным, чем веб-сервер.
Здесь мне скорее всего не понятно само строение или структура этого сервера приложения. Для чего и каким образом он содержит этот веб-сервер? Также не понятна эта фраза:
Сервер приложений действует как набор компонентов, доступных разработчику программного обеспечения через API (интерфейс прикладного программирования), определённый самой платформой.
Получается, что если API поддерживает взаимодействие 2-ух программ, то в этом случае API может поддерживать взаимодействие между сервером приложения и какой-то любой другой программой. А всегда ли API поддерживает работу с сервером приложений, API работает только с сервером приложений?
я не хочу умничать, но, мне кажется, Вы читаете какие то не те источники. Не хочу катить бочку на авторитетную Википедию и т.п., но в общем здесь идёт «спор о терминах». Посмотрите на это с другой стороны: Сервер — это любая «штука», которая обслуживает «запросы». Вам компьютер ответил на ping? О! Это — сервер!
А то, что Вы пишете про статическиие и динамические сервера — обычно, мне кажется, называется «статическим контентом» и «динамическим контентом». И — еще, если уточнить, что речь идет о HTTP — серверах, всё становится на свои места. Но я всё же советую Вам разбить вопрос на несколько вопросов, так как в текущем виде на него трудно ответить
Сервер — это программа, принимающая входящие запросы от клиентов. Веб-сервер — программа, принимающая входящие запросы по протоколу http. Также сервером называют компьютер, основным назначением которого является запуск программ-серверов. Всю остальную «серверную» терминологию я считаю малополезной шелухой
2 ответа 2
я рискну ответить на вопрос, хотя, скорее всего, это не будет полным и законеченым ответом.
Мне кажется, что то непонимание, которое у Вас есть, происходит от обилия терминов и их «исторического напластования»
- То, что Вы называете «статическиие и динамические сервера» — обычно, мне кажется, называется «статическим контентом» и «динамическим контентом».
- то, что в тексте назывется серверами приложений — нужно понимать просто как «веб сервер без морды», как бы грубо это ни звучало. Это — программа, которая по HTTP принимает запросы и по HTTP же отвечает. Обычно это называют REST — протоколом (Representational state transfer)
Еще один распространённый термин для «серверов приложений» — это «веб-служба».
А всегда ли API поддерживает работу с сервером приложений?
Сам термин «сервер приложений» — это некая историческая шелуха.
Поясню свою мысль. На этапе зарождения WEB’а возможности написать файл с гиперссылками и отдавать его в примитивный браузер типа мозаики в общем всем хватало.
Но хотелось «динамики» например, счетчика числа посетителей на странице. Для этого использовался CGI (Common Gateway Interface).
Фактически, это означало, что в ответ на запрос из браузера на сервере выполнится программа, и результат её выполнения будет показан в браузере.
Чтобы «хорошо продавать» эту возможность ( а веб-сервера были не только бесплатными open source, но иногда и очень даже платными, типа Microsoft IIS и IBM WebSphere ) — был придуман маркетинговый термин «сервер приложений».
Который означал не более и не менее, чем возможность в ответ на запрос пользователя выполнить некий код, который на этот запрос ответит. В этом была разница с сервером, который умеет только «тупо хостить файлы»
Далее — под API, наверное, следует понимать «взаимодействие по заранее согласованному протоколу», но применительно к HTTP — серверам это в 99% случаев следует читать как REST API.
Объясню на примере. Пускай у меня есть база данных с ценной информацией.
Я могу сделать веб — сервер, который на своих страницах будет показывать эту информацию по запросам пользователя.
А могу предоставить интерфейс к своей базе данных, и многие — многие сервера в интернете начнут показывать эту информацию на своих страницах, обращаясь за самой информацией ко мне. По API. При этом у меня может вообще не быть «веб сервера, на котором есть страницы для просмотра посетителями».
Я надеюсь, что я смог — в этом коротком ответе — помочь Вам разобраться в терминах. Но если есть уточняющие вопросы — пишите!
я перечитал Ваш вопрос, и решил немного дополнить ответ вот в какой части:
Сервер приложений может содержать веб-серверы, поэтому он считается более мощным, чем веб-сервер.
Здесь мне скорее всего не понятно само строение или структура этого сервера приложения. Для чего и каким образом он содержит этот веб-сервер?
Я попытаюсь «на пальцах» рассказать, что имется в виду. Для этого посмотрим на стуктуру того, что вообще есть во всех этих серверах.
- Есть программа, которая реализует HTTP — протокол. Она просто умеет получать HTTP-запрос и в ней есть модуль, который пытается на это запрос ответить.
- Обычно эту программу просто «привязывают» к файловой системе WEB-сервера, и «модуль отвечания» работает по такому алгоритму: «К тебе пришел запрос? Посмотри, есть ли на диске файл, название которого соответствует запросу. Если есть — выдай этот файл в ответ на запрос, если нет — покажи страницу с 404-й ошибкой». Это — то что называется «статический контент», или «статический сервер» (как бы не передёргивало меня от этого термина)
- Что такое «динамический сервер»? Это когда «модуль отвечания» в программе, которая обслуживает запросы, учат еще одному фокусу: «. а вот если к тееб придёт запрос определенного вида — то вместо отдачи файла пользователю выполни вот эту программу, и отдай пользоваетлю результаты её выполнения».
вот именно в этом смысле «Сервер приложений может содержать веб-серверы» — они имеют в виду, что, для того, чтобы принять запрос и отправить ответ — нужен модуль работы с HTTP протоколом, и называют его «веб-сервер». В этом смысле «динамический сервер» собержит «веб-сервер» в своём составе.
вот именно в этом смысле «Сервер приложений может содержать веб-серверы» — они имеют в виду, что, для того, чтобы принять запрос и отправить ответ — нужен модуль работы с HTTP протоколом, и называют его «веб-сервер» а что тогда содержит веб-сервер для работы с HTTP (ПО сервер, как говорится на MDN) при отсутствии сервера приложений (т.е. если говорить про статический контент, статический сервер)? Сервер-железо?
@Eva — > а что тогда содержит веб-сервер для работы с HTTP при отсутствии сервера приложений — я думаю, при отсутствии сервера приложений модуль работы с HTTP (это штука, которая умеет принимать запрос и отдавать ответ) имеет простейшую инструкцию «приняв запрос, возьми файл, если он существует, и отправь его в качестве ответа». То есть, имеется в виду сервер — программа, но которая не умеет запускать «другие программы», а умеет только отдавать готовые файлы.
вы наверное не поняли моего вопроса)) вопрос был в том, где находится программа по работе с HTTP — на железе или на сервере приложений? Хотя, наверное, и там, и там, в любом случае надо же сначала обработать запрос (обрабатывает, как я понимаю, железо), а уже потом выдать ответ (обрабатывает, как я понимаю, или железо, или сервер приложения). Я правильно понимаю?
@Eva обработкой и выдачей ответов занимаются программы, а программы запускаются на железе. «Сервер приложений» это просто ещё одна программа, наличие или отсутствие которой зависит только от ваших личных предпочтений
@Eva — я советую Вам критически относиться к этой фразе, потому что она 1) изначально включала в себя неоднозначности, присущие языку вообще 2) была переведена, что не добавило ей однозначности. Слова «считается более мощным» можно понимать как «позволяет выполнить больше функций». Такое трактование, скорее всего, близкО к исходному смыслу
англ: serve — служить; +er —> server — тот, кто обслуживает.
Простыми словами «сервер» это то, что обслуживает (исполняет) запросы. Исполнитель.
Исполнитель (сервер) — это приложение. Однако этим же «словом» также называют железо на котором работает это приложение(-я). Да, на одном железе (сервере) могут быть запущены несколько приложений (серверов).
Деды от «айти» не перевели, в своё время, теперь вот такие вопросы.
Далее по наследию от дедов.
«Статичный, статический»
англ (прил): static — неподвижный.
«Динамичный, динамический и прочее динамо-«
англ (прил): dynamic — действующий, работающий, живой.
Веб-сервер — исполнитель, который обрабатывает сетевые запросы, созданные по тем или иным правилам (договорённостям) (англ: protocol): TCP/IP, HTTP и т.д.
Сервер-приложений — исполнитель, на котором выполняется какое-либо прикладное приложение.
Статический-сервер — исполнитель, который также является ещё и веб-сервером, в задачи которого входит выдать те или иные данные, которые уже имеются у него. Т.е. ничего нового он при обращении к нему не создаёт. Например, у него есть набор изображений, вот, при обращении к нему, он и будет выдавать лишь эти изображения.
Динамический-сервер — исполнитель, который может быть веб-сервером, а может и не быть им, но в любом случае он является сервером-приложений. Если с ним можно общаться по сети, то значит это веб-сервер, если его задача, например, просто вычислять простые числа, то для этого никакой веб не нужен.
Ну и несколько слов про API исполнителя приложений.
К примеру, возьмём самовоз (англ: auto- (само-); mobile (подвижный)). У него есть рычаг переключения передач. Так вот допустимые положения для этого рычага являются API, т.е. способами для переключения передач, которые предоставлены разработчиками самовоза для этих нужд.
Наглядно положения передач можно описать так:
- 1-я: /влево/вверх
- 2-я: /влево/вниз
- ..
- 5-я: /вправо/вверх
- Задняя: /вправо/вниз
Для исполнителя приложений всё тоже самое. Есть набор мест (положений) при обращении к которым (с указанием дополнительных данных, если это необходимо) будет выполнено то или иное действие этим самым приложением. Например:
создать заметку: /createArticle, /create-article, /создатьЗаметку, /заметку-создать (выбор названия всецело зависит от разработчиков приложений).