280 likes | 413 Views
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 - lfalcao@cc.isel.ipl.pt Carlos Guedes – cguedes@cc.isel.ipl.pt Nuno Datia – datia@isel.ipl.pt.
E N D
Arquitecturas de extensão doservidor HTTPCGI eISAPI: ASP, ASP.NET Programação na Internet Secção de Sistemas e Tecnologias de Informação ISEL-DEETC-LEIC Luis Falcão - lfalcao@cc.isel.ipl.pt Carlos Guedes – cguedes@cc.isel.ipl.pt Nuno Datia – datia@isel.ipl.pt
Autores e contributos • Autores • Luís Falcão • Contributos • Paulo Pereira • Pedro Félix • Jorge Martins • Carlos Guedes • Nuno Datia Arquitecturas 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 Arquitecturas 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 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? • StandarInput(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 Arquitecturas de extensão do servidor HTTP
Pedido HTTP (GET, POST) Web Form Web Browser Web Server Criação dinâmica de recursos (com CGI) Apresentação Criação do Processo CGIparâmetros da mensagem HTTP passados por variáveis de ambiente (GET), ou pelo Standard Input (POST) CGI 2 3 1 Recurso gerado (via Standard Output) 4 Resposta HTTP Arquitecturas de extensão do servidor HTTP
Variáveis de ambiente Arquitecturas de extensão do servidor HTTP
Demo 1CGI de ECHO Executar o CGI que faz echo do pedido HTTP e das variáveis de ambiente Usar o servidor TIWebServer
CGI via Forms (1) Browser Servidor HTTP Aplicação CGI Acede a um Form Envia o Form Utilizador faz submit do Form Processa os dados envia para servidor (ou para cliente) Reencaminhamento para CGI Envio para cliente Output recebido Arquitecturas de extensão do servidor HTTP
CGI via Forms (2) <!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> Um Form simples URL gerado: http://www.contoso.com/cgi-bin/convidados.exe?FirstName=Eusébio&LastName=Ferreira&Password=qwerty Arquitecturas de extensão do servidor HTTP
PERL #! /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); C++ 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# 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); } } Arquitecturas de extensão do servidor HTTP
CGI de echo Resultado no browser Os Forms podem simular uma sessão com estado usando (Hidden fields) Arquitecturas de extensão do servidor HTTP
ISAPI Uma possível configuração… • 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 Arquitecturas de extensão do servidor HTTP
Internet Information Services - IIS • A arquitectura natural de expansão do IIS baseia-se na interface ISAPI (InternetServices 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 nadll • Prevê duas formas de extensão do comportamento do IIS • ISAPI Extensions - Permitem definir novosendpoints para atendimento de pedidos • ISAPI Filters - Permitem interceptar e alterar o conteúdo das streams de comunicação com o cliente Arquitecturas de extensão do servidor HTTP
ISAPI Extensions • Definem novosendpoints 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) • Carrega a dll (caso não esteja carregada) e invoca a funçãoGetExtensionVersionpermitindo à dll o registo da sua versão • Preenche uma instância deEXTENSION_CONTROL_BLOCKcom a informação relativa ao pedido e as funções decallback a utilizar pela dll (por exemplo: WriteClient e ReadClient) • Entrega o atendimento do pedido à dll invocando a funçãoHttpExtensionProcpassando-lhe a estrutura de dados anterior Arquitecturas 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" Arquitecturas de extensão do servidor HTTP
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> Arquitecturas de extensão do servidor HTTP
Demo 2: Contador com ASP <%@ language="javascript" %> <html> <head> <scriptlanguage="Jscript" runat="server" > function inc() { if (Request.QueryString.Item("incr").Count == 0) return 0; return Number(Request.QueryString.Item("incr")) + 1; } </script> </head> <body> <formid="Form1"method="get"name="Form1"> <inputtype="text"id="incr"name="incr"value="<%=inc() %>" /> <inputtype="submit"value="Increment"ID="Submit1"/> </form> </body> </html> Arquitecturas de extensão do servidor HTTP
Arquitectura do IIS 5.0 InetInfo.exe DLLHost.exe Isapi_1.dll Isapi_1.dll Isapi_2.dll Isapi_3.dll Named Pipe Socket HTTP Requests & Responses Kernel Objects • 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 Arquitecturas de extensão do servidor HTTP
App 1 App 1 ... ... App n App n Hosting de aplicações no IIS 5.0 Main Process Pooled Process Isolated Process InetInfo.exe DLLHost.exe 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 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 doWindows XP • Por omissão, não está instalado. (ControlPanel Add Remove Programs Add/Remove WindowsComponents) Arquitecturas 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çõesWeb 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 assemblySystem.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 Arquitecturas de extensão do servidor HTTP
Hosting de ASP .NET no IIS 5.0 InetInfo.exe aspnet_wp.exe Named Pipe aspnet_isapi.dll PageClass IHttpHandler • 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 efeitoNamed Pipes Socket HTTP Requests & Responses Kernel Objects Arquitecturas de extensão do servidor HTTP
Uma aplicaçãoASP.Net é um conjunto deassemblies executados em determinado AppDomain do hostaspnet_wp.exe Arquitecturas 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 • FritzOnion, “Essential ASP.NET with Examples in C#”, Addison-Wesley, 2003 • FritzOnion, “EssentialASP.Net 2.0”,Addison-Wesley, 2006 Arquitecturas de extensão do servidor HTTP