O Protheus como servidor HTTP – Parte 02

Introdução

Continuando de onde paramos no post anterior, vamos agora acrescentar mais alguns detalhes e falar sobre algumas configurações mais avançadas do Protheus como Servidor HTTP.

Porta TCP 80

Quando falamos de Internet e HTTP, a porta padrão deste protocolo é a porta TCP 80. Isto quer dizer que, o Servidor WEB deve estar configurado para receber conexões HTTP na porta 80.

Porém, quando estamos por exemplo testando um serviço, ou mesmo ciando um serviço para WEB usando WebServices sobre HTTP (REST ou SOAP), podemos especificar outra porta para disponibilizar o serviço. Na prática, o que muda é a forma de você escrever a URL.

Partindo do exemplo anterior, onde configuramos o Protheus como HTTP Server na porta 80, usamos a URL http://localhost/index.html. Ao mudarmos a porta de publicação do serviço — e consequentemente reiniciar o Servidor — devemos colocar a porta depois do nome do host, usando o separador “:” dois pontos. Por exemplo, ao subir o serviço de HTTP na porta 8000, a nossa URL passa a ser http://localhost:8000/index.html

Porta SSL 443

A porta 443 é a porta default para acesso ao WEB Server usando uma conexão chamada de “segura”, que nada mais é do que uma conexão criptografada usando o protocolo SSL (Secure Socket Layer) sobre o TCP. Se, no nosso exemplo, você trocar a URL http://localhost/index.html para https://localhost/index.html, o Browse vai tentar abrir uma conexão segura na porta 443, pois esta é a porta DEFAULT para o protocolo HTTPS — e como o nosso Protheus Server ainda não está configurado para SSL, esta conexão ainda não será possível. Caso seja usada outra porta, a forma de especificar é a mesma: Após o nome do host, deve ser colocado “:” mais o número da porta desejada. O Protheus como servidor WEB também suporta HTTPS, porém vamos ver este recurso mais para frente.

Falha ao subir o serviço de HTTP

Normalmente um Protheus pode falhar na subida do serviço HTTP, caso já exista outra aplicação na máquina usando (ou em outros termos, “fazendo bind”) da porta 80. Existem alguns programas de mensagens e aplicativos que podem subir um serviço de HTTP na porta 80, para uso na máquina local. Caso já exista algum outro serviço qualquer usando a porta configurada, o Protheus Server emite a seguinte mensagem no log de console:

[WARN ][SERVER] [Thread 12628] Trying acquire port 80 (Bind error #10048:Address already in use.)

Neste caso, você pode pode mudar a porta do Protheus, para preferencialmente usar uma porta a partir da 5024, ou tentar identificar qual é a aplicação que está usando a porta 80. Uma das formas mais simples — no Windows — é usar o aplicativo gráfico RESMON.EXE (Resource Monitor), abrir a aba NETWORK, e expandir a seção “Listening Ports”. Veja um exemplo abaixo, onde o appserver.exe (Protheus Server) está com o servidor HTTP habilitado na porta 80:

AdvPL ASP - Server 80

Falha ao acessar o servidor HTTP

Vamos pegar o nosso exemplo de acesso, http://localhost/index.html — e enumerar as possibilidades desta requisição, ao ser feita pelo Browser, não ser completada com sucesso.

  1. Erro na digitação da URL  — qualquer coisa alterada nessa URL pode fazer a conexão TCP feita pelo Browser não chegar ao servidor certo, ou não localizar o arquivo desejado.
  2. O Serviço HTTP do Protheus não está no ar.  — ou está no ar mas em outra porta.
  3. O Serviço do Protheus não foi iniciado, ou falhou na subida ou inicialização.

Agora, se estamos acessando esta página pelo IP da máquina, a partir de outro computador dentro da mesma rede, além de todos os problemas enumerados acima, ainda podemos ter:

  1. Windows Firewall endo executado na máquina onde o HTTP Server está sendo executado, bloqueando o aceite ou retorno de conexões vindas de outra máquina na porta 80.
  2. Um Proxy Client configurado para acesso de internet na máquina onde está sendo executado o Browser , onde faltou configurar que o IP da máquina de destino, onde está o Protheus Server, não deve ser acessado através do PROXY. — vamos ver depois  o que é um “proxy”.

Formas de Acesso ao HTTP Server

Nestes exemplos, já vimos duas formas de escrever uma URL para abrir a página HTML de testes “index.html”, uma usando a palavra reservada “localhost”, e outra usando o IP da máquina em questão. Ainda podemos usar o IP reservado 127.0.0.1 — que na verdade é a mesma coisa que “localhost”, e caso a máquina onde está o Protheus Server HTTP tiver um nome de host — ou nome do equipamento na rede — visível pelos outros computadores da rede, podemos colocar o nome da máquina na URL, ao invés do IP. Por exemplo, ao invés de http://192.168.0.12/index.html, eu poderia usar http://note-juliow-ssd/index.html, que o Browser abriria a página corretamente.

Quando queremos que o HTTP Server esteja publicado na Internet, para que pessoas de qualquer parte do mundo conectadas na rede possam acessar, o buraco é um pouco mais em baixo… vamos ver primeiro o acesso através de uma rede local.

Configurações HTTP adicionais

Para o nosso teste, foi necessário informar na URL o protocolo (http://), o host (localhost ou IP), e a página ou arquivo a ser aberto (index.html), certo? Normalmente ninguém precisa saber qual é a página principal de um site, você entra apenas com a URL contendo protocolo e host, e o próprio website já abre a página inicial (ou DEFAULT).

Para configurar uma página DEFAULT para o PRotheus Server como HTTP, usamos a chave DEFAULTPAGE. Vide exemplo abaixo:

[http]
enable=1
port=80
path=c:\Protheus12LG\Http
defaultpage=index.html

Desta forma, agora podemos abrir o site usando apenas http://localhost , que o arquivo index.html será revolvido ao Browser, sem que você precise informar o nome dele na URL .

Sub-Pastas de publicação WEB

No nosso PATH de publicações WEB, a pasta “raiz” de publicação fica no disco, mais exatamente no drive C:, na pasta \Protheus12LG\Http . Logo, qualquer arquivo que a gente coloque dentro desta pasta, pode ser acessado pela URL http://host-ou-ip/nomedoarquivo.extensao”

Caso você crie no disco, dentro da pasta HTTP, uma pasta chamada “imagens”, e dentro dela você colocar a imagem “foto.jpg”, para acessá-la do Browser, você deverá usar a URL http://host-ou-ip/imagens/foto,jpg”

Mais de um site no mesmo HTTP Server

Quando utilizamos no Browse o IP da máquina, ou o nome dela na rede local, ambas as requisições chegam no mesmo HTTP Server, na mesma porta. O que muda entre elas é a URL através da qual foi feito o pedido da página.

Usando o HTTP Server do Protheus, podemos configurar uma ou mais seções no arquivo de configuração, para permitir direcionar URLs diferentes que chegam no mesmo serviço, para diferentes pastas raiz de publicação. Por exemplo, minha máquina na rede chama-se note-juliow-ssd, com o IP 192.168.0.12, e eu quero colocar dois sites diferentes, com pastas de publicação WEB diferentes. Basta eu acrescentar as chaves abaixo no appserver.ini:

[note-juliow-ssd]
enable=1
Path=c:\Protheus12LG\WebSite1
DefaultPage=index.html

[192.168.0.12]
enable=1
Path=c:\Protheus12LG\WebSite2
DefaultPage=index.html

Considerando que eu ainda tenho todas as demais configurações da seção HTTP (abaixo), agora nós temos o seguinte cenário:

[http]
enable=1
port=80
path=c:\Protheus12LG\Http
defaultpage=index.html

Deste modo, o HTTP Server vai se comportar da seguinte forma, para cada uma das URLs de acesso:

http://192.168.0.12/ — O HTTP Server encontra uma seção de configuração com este IP, verifica que está habilitada (Enable=1) e que o PATH raiz de publicação é a pasta c:\Protheus12LGWebSite1. Logo, ele vai procurar a página default (index.html) dentro dessa pasta do disco, e retorná-la ao Browse.

http://note-juliow-ssd/ — Mesmo caso anterior, porém com outra pasta raiz de publicação configurada — c:\Protheus12LG\WebSite2. Logo, o HTTP Server vai retornar o arquivo index.html deste diretório configurado.

http://localhost/ — Inicialmente o HTTP Server verifica se tem uma seção de configuração chamada de [localhost] no arquivo de configuração. Como ele não encontra nada, ele vai ler as configurações default da seção [HTTP], e vai retornar o arquivo index.html da pasta raiz default — c:\Protheus12LG\Http

FAQ

  • É possível subir o Protheus como  HTTP Server em mais de uma porta ao mesmo tempo ? 

R: Não. A configuração de porta do HTTP Server é única, e é definida apenas na seção HTTP. O que dá para ser feito é subir o HTTP Server e o HTTPS Server — conexão SSL — no mesmo serviço, porém são protocolos distintos, cada um sendo acessado pela porta configurada.

  •  É possível subir mais de um Protheus como HTTP Server na mesma porta e na mesma máquina?

R: Sim, mediante configuração específica. Quando subimos um HTTP Server Protheus em uma porta, ele passa a atender as requisições que chegam nesta porta, por qualquer interface de rede da máquina. Se você configurar, através da chave IP=nnn.nnn.nnn.nnn, na seção HTTP, indicando o IP de uma interface de rede para o HTTP Server atender as requisições, você consegue configurar outro HTTP Server na mesma porta, bastando especificar o IP de outra interface de rede da sua máquina.

  • Eu consigo criar pastas virtuais no HTTP Server ?

R: Sim, usando o mesmo recurso para configurar múltiplos sites na mesma máquina — criando uma chave no arquivo appserver.ini com o nome do host de entrada da URL, seguido por “/” e uma ou mais pastas, separadas por “/”. Por exemplo, os dois sites acima possuem uma pasta chamada “common”, cujo conteúdo é idêntico para os dois sites. Você pode gravar estes arquivos em apenas uma pasta — por exemplo c:\Protheus12LG\WebCommon, e criar as seguintes configurações:

[note-juliow-ssd/common]
enable=1
Path=c:\Protheus12LG\WebCommon

[192.168.0.12/common]
enable=1
Path=c:\Protheus12LG\WebCommon

Com isso, tanto faz se o usuário está navegando no site 1 ou no site 2, quando o Browse pedir um arquivo da pasta “/common/” através de qualquer uma das URLs, apenas uma pasta será usada para atender estas requisições, evitando duplicidades de arquivo desnecessárias.

Conclusão

Acho que até aqui já está bom como introdução ao HTTP Server do Protheus para páginas estáticas. No próximo post, vamos ver o uso de uma conexão segura (SSL), e depois vamos partir para o AdvPL ASP !!!

Agradeço novamente a audiência, e desejo a todos TERABYTES DE SUCESSO !!!

Referências

5 comentários sobre “O Protheus como servidor HTTP – Parte 02

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s