Arquitecturas de extensão do
servidor HTTP
CGI | ISAPI : ASP, ASP.NET
Programação na Internet
Secção de Programação
ISEL-DEETC-LEIC
Luis Falcão - [email protected]
Nuno Datia – [email protected]
Autores e contributos
• Autores
– Luís Falcão
• Contributos
–
–
–
–
–
Paulo Pereira
Pedro Félix
Jorge Martins
Carlos Guedes
Nuno Datia
© ISEL 2006/2007
DEEC - LEIC – Programação na Internet
2
Arquitecturas de extensão do servidor HTTP
• CGI
• ISAPI
– ASP
– ASP.NET
© ISEL 2006/2007
DEEC - LEIC – Programação na Internet
3
Tecnologias de servidor
• A interface CGI (Common Gateway Interface)
– Interface standard de extensão do servidor Web
– Suportada pela maioria dos servidores Web
– Define a interface que as aplicações devem cumprir por forma a estenderem o
comportamento do servidor Web
• Associação de comportamento a URLs (Geração
dinâmica de páginas)
– Podem ser desenvolvidas em qualquer linguagem que ofereça suporte para
acesso a variáveis de ambiente, ao standard input e ao standard output
• Alternativas à interface CGI
– Soluções Microsoft: A interface ISAPI: ASP, ASP.NET
– Soluções Sun: Servlets; JSP; JSF
– Outras: PHP
© ISEL 2006/2007
DEEC - LEIC – Programação na Internet
4
CGI – O que é?
• Mecanismo que permite ao servidor WEB comunicar
com aplicações que processam pedidos HTTP
• Como?
– Por cada pedido é criado (com base no URL) um processo
responsável pelo seu atendimento
– Qual o input do processo?
• stdin redireccionado para a ligação com o cliente
• Variáveis de ambiente com informação relativa ao pedido, ao
servidor e ao cliente
– Qual o output do processo?
• stdout redireccionado para a ligação com o cliente
© ISEL 2006/2007
DEEC - LEIC – Programação na Internet
5
Criação dinâmica de recursos (com CGI)
1 - Mensagem HTTP (GET,
POST)
Apresentação
Web Form
CGI
2 - Criação do Processo CGI
parâmetros da mensagem HTTP passados por
variáveis de ambiente (GET), ou pelo Standard
Input (POST)
3- Recurso gerado (via Standard Output)
Web Browser
4- Resposta HTTP
© ISEL 2006/2007
DEEC - LEIC – Programação na Internet
Web Server
6
Variáveis de ambiente
Variável
Descrição
GATEWAY_INTERFACE
versão CGI
SERVER_NAME
nome ou endereço IP do servidor
SERVER_SOFTWARE
nome ou versão do software do servidor
SERVER_PROTOCOL
protocolo e versão usados pelo servidor (HTTP 1.X)
SERVER_PORT
porto do servidor
REQUEST_METHOD
método usado no pedido (GET, POST)
PATH_INFO
informação sobre a PATH do CGI
PATH_TRANSLATED
raiz do servidor + PATH_INFO
SCRIPT_NAME
nome do script CGI
DOCUMENT_ROOT
raiz do servidor WWW
QUERY_STRING
query string enviada através do método GET
REMOTE_HOST
nome do cliente
REMOTE_ADDR
endereço IP do cliente
AUTH_TYPE
método de autenticação do cliente
REMOTE_USER
nome do utilizador remoto (cliente)
REMOTE_IDENT
identificação do cliente (RFC)
CONTENT_TYPE
cabeçalho HTTP MIME Content-Type
CONTENT_LENGTH
número de bytes a ler do stdin (POST)
HTTP_FROM
Cabeçalho HTTP MIME From (email do cliente)
HTTP_ACCEPT
Cabeçalho HTTP MIME Accept (tipos aceites pelo cliente)
HTTP_USER_AGENT
Cabeçalho HTTP MIME User-Agent (aplicação cliente)
HTTP_REFERER
Cabeçalho HTTP MIME Referer (URL anterior)
© ISEL 2006/2007
DEEC - LEIC – Programação na Internet
7
CGI via Forms (1)
Acede a um
Form
Envia o
Form
Utilizador faz
submit do Form
Reencaminhame
nto para CGI
Output
recebido
© ISEL 2006/2007
DEEC - LEIC – Programação na Internet
Envio para
cliente
Processa os
dados
envia para
servidor (ou para
cliente)
8
CGI via Forms (2)
Um Form simples
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Livro de Convidados </title>
</head>
<body>
<h1>Preencha o meu livro de convidados!</h1>
<form method="GET" action="/cgi-bin/convidados.exe" >
<pre>
Primeiro Nome: <input type="text" name="FirstName" />
Ultimo Nome:
<input type="text" name="LastName" />
Password:
<input type="password" name="Password" />
<input type="submit" /> <input type="reset" />
</pre>
</form>
</body>
</html>
URL gerado:
http://www.contoso.com/cgi-bin/convidados.exe?
FirstName=Eusébio&LastName=Ferreira&Password=qwerty
© ISEL 2006/2007
DEEC - LEIC – Programação na Internet
9
#! /usr/local/bin/perl
print “HTTP/1.1 200 OK\n";
print "Content-type: text/html", "\n\n";
print "<html>", "\n";
print "<head><title>CGI livro de convidados escrito em Perl></title></head>", "\n";
print "<body><h1> Bem vindo ao meu livro de convidados </h1>, "\n";
print "REQUEST_METHOD", "$ENV{´REQUEST_METHOD´’}", "\n";
print "QUERY_STRING", "$ENV{´QUERY_STRING´’}", "\n";
print "</body></html>", "\n";
exit(0);
PERL
void main() {
char *env;
cout << “HTTP/1.1 200 OK"<<endl;
cout << "Content-type: text/html"<<endl<<endl;
cout << "<html>"<<endl;
cout << "<head><title>CGI livro de convidados escrito em C++</title></head>“ << endl;
cout << "<body><h1> Bem vindo ao meu livro de convidados </h1>" << endl;
env = getenv("REQUEST_METHOD");
cout << "REQUEST_METHOD: " << (env != NULL ? env : "") << "<br />" << endl;
env = getenv("QUERY_STRING");
cout << "QUERY_STRING: " << (env != NULL ? env : "") << "<br />" << endl;
cout << "</body></html>" << endl;
}
class V1 {
public static void ProcessRequest() {
string content =
@"<html>
<head><title>title>CGI livro de convidados escrito em C++</title></head>
<body>Olá, sou um CGI gerado pela versão 2.</body>
</html>";
// Escrever os headers
System.Console.WriteLine("HTTP/1.1 200 OK");
System.Console.WriteLine("Content-Type: text/html");
System.Console.WriteLine(string.Format("Content-Length: {0}", content.Length));
System.Console.WriteLine();
C++
C#
// Escrever o conteúdo
System.Console.WriteLine(content);
}
}
© ISEL 2006/2007
DEEC - LEIC – Programação na Internet
10
CGI de echo
Resultado
no browser
Os Forms podem simular uma sessão com estado
(Hidden fields)
© ISEL 2006/2007
DEEC - LEIC – Programação na Internet
11
ISAPI
• As extensões ISAPI são uma tecnologia do lado do servidor
que, juntamente com o CGI, foram das primeiras tecnologias a
permitir gerar conteúdos dinâmicos como resposta a pedidos
• Esta tecnologia visa resolver um dos problemas existentes no
CGI – Um processo por pedido, que não é reutilizado
• Com ISAPI é diferente: uma vez carregada, esta fica em
memória.
Web Server
• Não é um processo
• Mas sim uma DLL
© ISEL 2006/2007
DEEC - LEIC – Programação na Internet
Extensão ISAPI
(Dll)
Uma possível configuração…
12
Internet Information Services - IIS
• A arquitectura natural de expansão do IIS baseia-se na
interface ISAPI (Internet Services API)
– Carregamento dinâmico de código recorrendo a dlls
• A interface ISAPI é composta por:
– Funções definidas e exportadas pela dll e invocadas pelo IIS
– Estruturas de dados para troca de informação entre IIS e dll
– Callbacks fornecidos pelo IIS para invocação na dll
• Prevê duas formas de extensão do comportamento do IIS
– ISAPI Extensions - Permitem definir novos endpoints para atendimento
de pedidos
– ISAPI Filters - Permitem interceptar e alterar o conteúdo das streams de
comunicação com o cliente
© ISEL 2006/2007
DEEC - LEIC – Programação na Internet
13
ISAPI Extensions
• Definem novos endpoints para tratamento de pedidos
(no contexto do IIS)
– Através de associações entre extensão do URL e ISAPI que é responsável pelo tratamento
do pedido (ver associações no IIS)
• Passos do IIS no atendimento do pedido (se existir
associação)
1. Carrega a dll (caso não esteja carregada) e invoca a função GetExtensionVersion
permitindo à dll o registo da sua versão
2. Preenche uma instância de EXTENSION_CONTROL_BLOCK com a informação relativa ao
pedido e as funções de callback a utilizar pela dll (por exemplo: WriteClient e
ReadClient)
3. Entrega o atendimento do pedido à dll invocando a função HttpExtensionProc
passando-lhe a estrutura de dados anterior
© ISEL 2006/2007
DEEC - LEIC – Programação na Internet
14
Active Server Pages - ASP
• Tecnologia Microsoft para o desenvolvimento da camada de UI
de aplicações Web (identificada pelas extensões *.asp e *.asa)
• Uma ASP é composta pelo template de apresentação (definido
em HTML) e script a ser interpretado no servidor
• Os seguintes objectos são fornecidos implicitamente pelo
ambiente de execução da página (objectos intrínsecos)
–
–
–
–
–
Request – contém informação relativa ao pedido
Response – permite manipular a resposta
Session – armazenamento de estado associado ao utilizador
Application – para partilha de estado entre todos os utilizadores da aplicação
Server – permite obter informação relativa ao servidor Web
• É suportada na extensão ISAPI implementada em "asp.dll"
© ISEL 2006/2007
DEEC - LEIC – Programação na Internet
15
Demo 1
• Sample ASP Page (SampleASP.asp)
<%@ language="javascript" %>
<script language="Jscript" runat="server" >
function Add(x, y) {
return x+y;
}
</script>
<html>
<body>
<h1>Test ASP Page </h1>
<h2>2+2=<%=Add(2,2)%></h2>
<table border=2>
<% for (var i=0; i<10; i++) { %>
<tr><td>Row<%=i%> Col0</td><td>Row<%=i%> Col1</td></tr>
<% } %>
</table>
<% Response.Write("<h2>Written directly to Response</h2>"); %>
</body>
</html>
© ISEL 2006/2007
DEEC - LEIC – Programação na Internet
16
Demo 2
• Contador com ASP
<%@ Language=JavaScript %>
<html>
<head>
<script language="JavaScript" runat="server" >
function inc() {
if (Request.QueryString.Item("incr").Count ==0) return 0;
return Number(Request.QueryString.Item("incr")) + 1;
}
</script>
</head>
<body>
<form id="Form1" method="get" name="Form1" >
<input type="text" id="incr" name="incr" value="<%=inc() %>" />
<input type="submit" value="Increment" ID="Submit1" />
</form>
</body>
</html>
© ISEL 2006/2007
DEEC - LEIC – Programação na Internet
17
Arquitectura do IIS 5.0
InetInfo.exe
DLLHost.exe
Isapi_1.dll
Isapi_1.dll
Isapi_2.dll
Isapi_3.dll
Named Pipe
• Processo principal (InetInfo.exe)
Socket
–
Internet Services
• Protocolo HTTP; Autenticação; Resolução
de URLs
HTTP
Requests &
Responses
–
Kernel Objects
• Processos secundários (DLLHost.exe)
–
© ISEL 2006/2007
DEEC - LEIC – Programação na Internet
Hosting de aplicações
Hosting de aplicações
18
Hosting de aplicações no IIS 5.0
Main Process
InetInfo.exe
App 1
...
App n
•
Pooled Process
DLLHost.exe
App 1
...
App n
Isolated Process
DLLHost.exe
Isolated
Application
Modos de isolamento de aplicações Web
– Low (Main Process): Executada no processo principal do IIS
– Medium (Pooled Process): Executada num processo secundário partilhado
• Todas as aplicações com este nível de isolamento são hospedadas neste processo
– High (Isolated Process): Executada num processo secundário dedicado
© ISEL 2006/2007
DEEC - LEIC – Programação na Internet
19
Configuração no IIS 5.0 (ISAPI: ASP)
• O servidor HTTP IIS apenas está disponível na versão profissional do
Windows XP
–
Por omissão, não está instalado. (Control
© ISEL 2006/2007
DEEC - LEIC – Programação na Internet
Panel  Add Remove Programs  Add/Remove Windows Components)
20
ASP .NET – O que é?
• Notoriedade deve-se à sua utilização no desenvolvimento da
camada de UI de aplicações Web
– No contexto do desenvolvimento de aplicações Web suportadas pela
plataforma .NET
• É fundamentalmente o conjunto de tipos .NET que participam
no atendimento de pedidos HTTP
– Tipos do espaço de nomes System.Web e dos espaços de nomes nele
contidos
• Estes tipos estão definidos no assembly System.Web.dll
• Caracteriza-se por uma arquitectura extensível
– Designada HTTP Pipeline
• As páginas ASP.NET são “apenas” um dos pontos terminais no
atendimento de pedidos
© ISEL 2006/2007
DEEC - LEIC – Programação na Internet
21
Hosting de ASP .NET no IIS 5.0
InetInfo.exe
aspnet_wp.exe
IHttpHandler
Named Pipe
Page
Class
aspnet_isapi.dll
Socket
• aspnet_wp.exe
process)
(ASP.NET
worker
– Processo hospedeiro do runtime ASP.NET
• CLR + System.Web API
HTTP Requests
& Responses
• aspnet_isapi.dll (Extensão ISAPI)
Kernel Objects
© ISEL 2006/2007
DEEC - LEIC – Programação na Internet
– Encaminha o atendimento de pedidos para
URLs terminados em .aspx (entre outros) para o
runtime ASP .NET
– Utiliza para o efeito Named Pipes
22
Uma aplicação ASP.Net é um conjunto de assemblies executados em
determinado AppDomain do host aspnet_wp.exe
© ISEL 2006/2007
DEEC - LEIC – Programação na Internet
23
Referências
• CGI
– W3C (http://www.w3.org/CGI/)
– NCSA (http://hoohoo.ncsa.uiuc.edu/cgi/)
• ISAPI
– MSDN Library http://msdn.microsoft.com/library/default.asp?url=/library/enus/vccore98/HTML/_core_isapi_server_extensions_and_filters.asp
Fritz Onion, “Essential ASP.NET with Examples in C#”,
Addison-Wesley, 2003
Fritz Onion, “Essential ASP.Net 2.0”,
Addison-Wesley, 2006
© ISEL 2006/2007
DEEC - LEIC – Programação na Internet
24
Download

downloading