# Servidor web

Servidor web é um software responsável por aceitar pedidos em HTTP de clientes, geralmente os navegadores, e servi-los com respostas em HTTP, incluindo opcionalmente dados, que geralmente são páginas web, tais como documentos em HTML com objetos embutidos (imagens, etc) ou um computador que executa um programa que provê a funcionalidade descrita anteriormente. O mais popular, e mais utilizado no mundo, é o servidor Apache (software livre). A Microsoft possui a sua própria solução denominada IIS (Internet Information Services).

## Características

Os pedidos http que se referem habitualmente a páginas em HTML são normalmente feitos através de navegadores.
O processo se inicia com a conexão entre o computador onde está instalado o servidor web e o computador do cliente; como na web não é possível prever a que hora se dará essa conexão, os servidores web precisam estar disponíveis dia e noite.
A partir daí é processado o pedido do cliente, e conforme as restrições de segurança e a existência da informação solicitada, o servidor devolve os dados.
Genericamente tudo o que se enquadre no conceito de ficheiro pode ser enviado como resultado de um pedido em HTTP.
Finalmente, os servidores web também podem executar programas e scripts, interagindo mais com o usuário.

## Páginas dinâmicas e estáticas

A origem do conteúdo enviado pelo servidor web numa resposta a um pedido em HTTP pode ser:
* Estática: se vier directamente de um ficheiro já existente no servidor;
* Dinâmica: se for criada dinamicamente por outro programa, script ou API chamado pelo servidor.
No caso de uma página dinâmica, o pedido, depois de recebido, é processado pelo servidor web que vai criar dinamicamente o conteúdo que depois será enviado para o cliente.
As páginas dinâmicas têm a vantagem de poderem ser programadas, ou seja usando alguma linguagem de programação (que dependendo do servidor web pode ser php, Java, Perl, Visual Basic .NET, C#, ...) podemos criar programas que correm no servidor web, eventualmente acessando a bases de dados e cujo resultado é enviado para o browser.

## Exemplo do fluxo pedido/resposta gerado
### Quando se acessa uma página estática

Supondo que num servidor web existe um ficheiro chamado introWebServer.html com o seguinte conteúdo:
Se no navegador tentar aceder a este ficheiro a sequência "pedido / resposta" iria produzir os seguintes comandos:
Pedido
Resposta
Embora estes valores variem de acordo com o navegador que utilizarmos e com o servidor web que responde a este pedido em HTTP, muito do conteúdo será sempre igual:
* no pedido
GET /introWebServer.html HTTP/1.1
ou seja estamos a pedir usando o protocolo HTTP versão 1.1 o ficheiro introWebServer.html que está na raiz do servidor
* na resposta
HTTP/1.1 200 OK
ou seja o pedido é válido (200 OK) e o conteúdo segue embaixo. Como podemos ver depois de mais um conjunto de dados aparece finalmente o conteúdo em HTML da página que tínhamos criado.
Independentemente de estarmos falando de páginas dinâmicas ou páginas estáticas este será sempre o fluxo que o pedido/resposta entre o servidor e o navegador irá provocar.

### Quando se acede a uma página dinâmica

Num servidor web capaz de responder a páginas dinâmicas (no nosso caso o IIS da Microsoft) temos um ficheiro chamado introWebServer.asp com o seguinte conteúdo:
Se no navegador tentar aceder a este ficheiro, a sequência pedido / resposta iria produzir os seguintes comandos:
Pedido
Resposta
Como podemos ver, o pedido/resposta de um ficheiro estático ou de um ficheiro dinâmico gera fluxos de informação praticamente iguais, isto é, na web a informação que circula é essencialmente a mesma. A diferença é que um ficheiro dinâmico tem que ser primeiro processado pelo servidor web.

## Lista

* Apache HTTP Server
* Baby Web Server, servidor Portable que roda ASP
* BadBlue
* Boa
* Caudium, uma derivação do Roxen
* Covalent Enterprise Ready Server, baseado no Apache HTTP Server
* EasyPHP, baseado no Apache HTTP Server + PHP + MySQL + phpMyAdmin
* Fnord
* IBM HTTP Server (baseado no Apache HTTP Server), antigo Domino Go Webserver
* Internet Information Services (IIS) da Microsoft, incluso no Windows XP
* IIS 7.5 Express, solução Internet Information Services para Windows 7
* Light HTTP Server (lighttpd)
* Monkey HTTP Daemon
* NaviServer
* Nginx
* Oracle HTTP Server, baseado no Apache HTTP Server
* Roxen
* Sun Java System Web Server da Sun Microsystems, antigo Sun ONE Web Server, iPlanet Web Server, and Netscape Enterprise Server.
* thttpd da ACME Laboratories
* Ultidev Cassini, servidor que roda ASP.NET
* WAMP, uma evolução do EasyPHP
* Xampp
* Zeus Web Server
* AOLWebServer