Arquitecturas de extensão do servidor HTTP Arquitecturas de extensão do servidor HTTP CGI e ISAPI:...

28
Arquitecturas de extensão do servidor HTTP CGI e ISAPI: ASP, ASP.NET Programação na Internet Secção de Sistemas e Tecnologias de Informação ISEL-DEETC-LEIC Luis Falcão - [email protected] Carlos Guedes – [email protected] Nuno Datia – [email protected]

Transcript of Arquitecturas de extensão do servidor HTTP Arquitecturas de extensão do servidor HTTP CGI e ISAPI:...

Page 1: Arquitecturas de extensão do servidor HTTP Arquitecturas de extensão do servidor HTTP CGI e ISAPI: ASP, ASP.NET Programação na Internet Secção de Sistemas.

Arquitecturas de extensão doservidor HTTP

CGI e ISAPI: ASP, ASP.NET

Programação na Internet Secção de Sistemas e Tecnologias de Informação

ISEL-DEETC-LEICLuis Falcão - [email protected]

Carlos Guedes – [email protected] Datia – [email protected]

Page 2: Arquitecturas de extensão do servidor HTTP Arquitecturas de extensão do servidor HTTP CGI e ISAPI: ASP, ASP.NET Programação na Internet Secção de Sistemas.

2007 - 2009©ISEL/DEETC/STI – Programação na Internet

2Arquitecturas de extensão do servidor HTTP

Autores e contributos• Autores

– Luís Falcão• Contributos

– Paulo Pereira– Pedro Félix– Jorge Martins– Carlos Guedes– Nuno Datia

Page 3: Arquitecturas de extensão do servidor HTTP Arquitecturas de extensão do servidor HTTP CGI e ISAPI: ASP, ASP.NET Programação na Internet Secção de Sistemas.

2007 - 2009©ISEL/DEETC/STI – Programação na Internet

3Arquitecturas de extensão do servidor HTTP

Arquitecturas de extensão do servidor HTTP• CGI

– Interface standard de extensão do servidor HTTP

• ISAPI– Solução oferecida pela Microsoft (na aplicação IIS)– Tecnologias suportadas

• ASP• ASP.NET

Page 4: Arquitecturas de extensão do servidor HTTP Arquitecturas de extensão do servidor HTTP CGI e ISAPI: ASP, ASP.NET Programação na Internet Secção de Sistemas.

2007 - 2009©ISEL/DEETC/STI – Programação na Internet

4Arquitecturas de extensão do servidor HTTP

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

Page 5: Arquitecturas de extensão do servidor HTTP Arquitecturas de extensão do servidor HTTP CGI e ISAPI: ASP, ASP.NET Programação na Internet Secção de Sistemas.

2007 - 2009©ISEL/DEETC/STI – Programação na Internet

Arquitecturas de extensão do servidor HTTP

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?• Standar Input (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?• Standard Output (stdout) redireccionado para a ligação com o cliente

5

Page 6: Arquitecturas de extensão do servidor HTTP Arquitecturas de extensão do servidor HTTP CGI e ISAPI: ASP, ASP.NET Programação na Internet Secção de Sistemas.

2007 - 2009©ISEL/DEETC/STI – Programação na Internet

6

Criação dinâmica de recursos (com CGI)

1. Pedido HTTP (GET, POST)ApresentaçãoApresentação

Web BrowserWeb Server

CGIWeb Form2. Criação do Processo CGIparâmetros da mensagem HTTP passados por variáveis de ambiente (GET), ou pelo Standard Input (POST)

3. Recurso gerado (via Standard Output)

4. Resposta HTTP

Arquitecturas de extensão do servidor HTTP

1

23

4

Page 7: Arquitecturas de extensão do servidor HTTP Arquitecturas de extensão do servidor HTTP CGI e ISAPI: ASP, ASP.NET Programação na Internet Secção de Sistemas.

2007 - 2009©ISEL/DEETC/STI – Programação na Internet

Variáveis de ambiente

7

Variável DescriçãoGATEWAY_INTERFACE versão CGISERVER_NAME nome ou endereço IP do servidorSERVER_SOFTWARE nome ou versão do software do servidorSERVER_PROTOCOL protocolo e versão usados pelo servidor (HTTP 1.X)SERVER_PORT porto do servidorREQUEST_METHOD método usado no pedido (GET, POST)PATH_INFO informação sobre a PATH do CGI PATH_TRANSLATED raiz do servidor + PATH_INFOSCRIPT_NAME nome do script CGIDOCUMENT_ROOT raiz do servidor WWWQUERY_STRING query string enviada através do método GETREMOTE_HOST nome do clienteREMOTE_ADDR endereço IP do clienteAUTH_TYPE método de autenticação do clienteREMOTE_USER nome do utilizador remoto (cliente)REMOTE_IDENT identificação do cliente (RFC)CONTENT_TYPE cabeçalho HTTP MIME Content-TypeCONTENT_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)

Arquitecturas de extensão do servidor HTTP

Page 8: Arquitecturas de extensão do servidor HTTP Arquitecturas de extensão do servidor HTTP CGI e ISAPI: ASP, ASP.NET Programação na Internet Secção de Sistemas.

8

Demo 1

CGI de ECHO

• Executar o CGI que faz echo do pedido HTTP e das variáveis de ambiente– Usar o servidor TIWebServer

Page 9: Arquitecturas de extensão do servidor HTTP Arquitecturas de extensão do servidor HTTP CGI e ISAPI: ASP, ASP.NET Programação na Internet Secção de Sistemas.

2007 - 2009©ISEL/DEETC/STI – Programação na Internet

CGI via Forms (1)

9

Acede a um Form

Envia o Form

Utilizador faz submit do Form

Reencaminhamento para CGI

Processa os dados

envia para servidor (ou para cliente)Envio para

clienteOutput recebido

Arquitecturas de extensão do servidor HTTP

Page 10: Arquitecturas de extensão do servidor HTTP Arquitecturas de extensão do servidor HTTP CGI e ISAPI: ASP, ASP.NET Programação na Internet Secção de Sistemas.

2007 - 2009©ISEL/DEETC/STI – Programação na Internet

CGI via Forms (2)

10

<!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

URL gerado:http://www.contoso.com/cgi-bin/convidados.exe? FirstName=Eusébio&LastName=Ferreira&Password=qwerty

Um Form simplesUm Form simples

Arquitecturas de extensão do servidor HTTP

Page 11: Arquitecturas de extensão do servidor HTTP Arquitecturas de extensão do servidor HTTP CGI e ISAPI: ASP, ASP.NET Programação na Internet Secção de Sistemas.

2007 - 2009©ISEL/DEETC/STI – Programação na Internet

11

#! /usr/local/bin/perlprint “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);

PERLPERL

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;}

C++C++

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();

// Escrever o conteúdo System.Console.WriteLine(content); }}

C#C#

Arquitecturas de extensão do servidor HTTP

Page 12: Arquitecturas de extensão do servidor HTTP Arquitecturas de extensão do servidor HTTP CGI e ISAPI: ASP, ASP.NET Programação na Internet Secção de Sistemas.

2007 - 2009©ISEL/DEETC/STI – Programação na Internet

CGI de echo

12

Os Forms podem simular uma sessão com estado

usando (Hidden fields)

Os Forms podem simular uma sessão com estado

usando (Hidden fields)

Resultado no browserResultado no browser

Arquitecturas de extensão do servidor HTTP

Page 13: Arquitecturas de extensão do servidor HTTP Arquitecturas de extensão do servidor HTTP CGI e ISAPI: ASP, ASP.NET Programação na Internet Secção de Sistemas.

2007 - 2009©ISEL/DEETC/STI – Programação na Internet

13

ISAPI

Page 14: Arquitecturas de extensão do servidor HTTP Arquitecturas de extensão do servidor HTTP CGI e ISAPI: ASP, ASP.NET Programação na Internet Secção de Sistemas.

2007 - 2009©ISEL/DEETC/STI – Programação na Internet

14Arquitecturas de extensão do servidor HTTP

ISAPI• As extensões ISAPI são uma tecnologia do lado do servidor que,

juntamente com o CGI, foram das primeiras tecnologias a suportar a geração de 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. – Não é um processo– Mas sim uma DLL Web Server

Extensão ISAPI(Dll)

Uma possível configuração…

Page 15: Arquitecturas de extensão do servidor HTTP Arquitecturas de extensão do servidor HTTP CGI e ISAPI: ASP, ASP.NET Programação na Internet Secção de Sistemas.

2007 - 2009©ISEL/DEETC/STI – Programação na Internet

15Arquitecturas de extensão do servidor HTTP

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

Page 16: Arquitecturas de extensão do servidor HTTP Arquitecturas de extensão do servidor HTTP CGI e ISAPI: ASP, ASP.NET Programação na Internet Secção de Sistemas.

2007 - 2009©ISEL/DEETC/STI – Programação na Internet

Arquitecturas de extensão do servidor HTTP

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

16

Page 17: Arquitecturas de extensão do servidor HTTP Arquitecturas de extensão do servidor HTTP CGI e ISAPI: ASP, ASP.NET Programação na Internet Secção de Sistemas.

2007 - 2009©ISEL/DEETC/STI – Programação na Internet

17

ISAPI: ASP

Page 18: Arquitecturas de extensão do servidor HTTP Arquitecturas de extensão do servidor HTTP CGI e ISAPI: ASP, ASP.NET Programação na Internet Secção de Sistemas.

2007 - 2009©ISEL/DEETC/STI – Programação na Internet

18Arquitecturas de extensão do servidor HTTP

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"

Page 19: Arquitecturas de extensão do servidor HTTP Arquitecturas de extensão do servidor HTTP CGI e ISAPI: ASP, ASP.NET Programação na Internet Secção de Sistemas.

2007 - 2009©ISEL/DEETC/STI – Programação na Internet

Arquitecturas de extensão do servidor HTTP

Demo 1: Sample ASP Page (SampleASP.asp)

19

<%@ 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>

Page 20: Arquitecturas de extensão do servidor HTTP Arquitecturas de extensão do servidor HTTP CGI e ISAPI: ASP, ASP.NET Programação na Internet Secção de Sistemas.

2007 - 2009©ISEL/DEETC/STI – Programação na Internet

Arquitecturas de extensão do servidor HTTP

Demo 2: Contador com ASP

20

<%@ language="javascript" %><html> <head> <script language="Jscript" 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>

Page 21: Arquitecturas de extensão do servidor HTTP Arquitecturas de extensão do servidor HTTP CGI e ISAPI: ASP, ASP.NET Programação na Internet Secção de Sistemas.

2007 - 2009©ISEL/DEETC/STI – Programação na Internet

Arquitecturas de extensão do servidor HTTP

Arquitectura do IIS 5.0

• Processo principal (InetInfo.exe)– Internet Services

• Protocolo HTTP; Autenticação; Resolução de URLs

– Hosting de aplicações

• Processos secundários (DLLHost.exe)– Hosting de aplicações

21

InetInfo.exeInetInfo.exe

Isapi_1.dll

HTTP Requests & Responses

DLLHost.exeDLLHost.exe

Named Pipe

Socket

Kernel Objects

Isapi_2.dll

Isapi_1.dll

Isapi_3.dll

Page 22: Arquitecturas de extensão do servidor HTTP Arquitecturas de extensão do servidor HTTP CGI e ISAPI: ASP, ASP.NET Programação na Internet Secção de Sistemas.

2007 - 2009©ISEL/DEETC/STI – Programação na Internet

Hosting de aplicações no IIS 5.0

22

InetInfo.exeInetInfo.exe DLLHost.exeDLLHost.exe DLLHost.exeDLLHost.exe

Main Process Pooled Process Isolated Process

Isolated Application...

App 1

App n

...

App 1

App n

• 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

Arquitecturas de extensão do servidor HTTP

Page 23: Arquitecturas de extensão do servidor HTTP Arquitecturas de extensão do servidor HTTP CGI e ISAPI: ASP, ASP.NET Programação na Internet Secção de Sistemas.

2007 - 2009©ISEL/DEETC/STI – Programação na Internet

Arquitecturas de extensão do servidor HTTP

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 Panel Add Remove Programs Add/Remove Windows Components)

23

Page 24: Arquitecturas de extensão do servidor HTTP Arquitecturas de extensão do servidor HTTP CGI e ISAPI: ASP, ASP.NET Programação na Internet Secção de Sistemas.

2007 - 2009©ISEL/DEETC/STI – Programação na Internet

24

ISAPI: ASP.NET

Page 25: Arquitecturas de extensão do servidor HTTP Arquitecturas de extensão do servidor HTTP CGI e ISAPI: ASP, ASP.NET Programação na Internet Secção de Sistemas.

2007 - 2009©ISEL/DEETC/STI – Programação na Internet

25Arquitecturas de extensão do servidor HTTP

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

Page 26: Arquitecturas de extensão do servidor HTTP Arquitecturas de extensão do servidor HTTP CGI e ISAPI: ASP, ASP.NET Programação na Internet Secção de Sistemas.

2007 - 2009©ISEL/DEETC/STI – Programação na Internet

Arquitecturas de extensão do servidor HTTP

Hosting de ASP .NET no IIS 5.0

26

• aspnet_wp.exe (ASP.NET worker process) – Processo hospedeiro do runtime ASP.NET

• CLR + System.Web API

• aspnet_isapi.dll (Extensão ISAPI)– Encaminha o atendimento de pedidos para

URLs terminados em .aspx (entre outros) para o runtime ASP .NET

– Utiliza para o efeito Named Pipes

aspnet_wp.exeaspnet_wp.exeInetInfo.exeInetInfo.exe

aspnet_isapi.dll

HTTP Requests & Responses

Named Pipe

Socket

Kernel Objects

PageClass

IHttpHandler

Page 27: Arquitecturas de extensão do servidor HTTP Arquitecturas de extensão do servidor HTTP CGI e ISAPI: ASP, ASP.NET Programação na Internet Secção de Sistemas.

2007 - 2009©ISEL/DEETC/STI – Programação na Internet

Arquitecturas de extensão do servidor HTTP

Uma aplicação ASP.Net é um conjunto de assemblies executados em determinado AppDomain do host aspnet_wp.exe

27

Page 28: Arquitecturas de extensão do servidor HTTP Arquitecturas de extensão do servidor HTTP CGI e ISAPI: ASP, ASP.NET Programação na Internet Secção de Sistemas.

2007 - 2009©ISEL/DEETC/STI – Programação na Internet

28Arquitecturas de extensão do servidor HTTP

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/en-us/vccore98/HTML/_core_isapi_server_extensions_and_filters.asp)

• ASP.NET– Fritz Onion, “Essential ASP.NET with Examples in C#”,

Addison-Wesley, 2003

– Fritz Onion, “Essential ASP.Net 2.0”,Addison-Wesley, 2006