E-commerce em russo compreensível. Como funcionam os negócios na Internet?
Recentemente, mais e mais projetos relacionados ao comércio online surgiram. Estudando essa direção, não consegui encontrar uma descrição geral e compreensível do processo. Portanto, decidi fazer algo como uma folha de dicas, que você sempre pode consultar para entender o procedimento em uma área como o comércio eletrônico.
Já vou fazer uma reserva que foquei nos processos e canais que ajudam a trazer clientes.
E-commerce: do que se trata?
Definições de várias fontes dizem algo sobre a venda de bens ou serviços pela Internet. Em palavras simples, o comércio eletrônico é qualquer atividade na rede em que o dinheiro apareça.
Compras, vendas, seguros, bancos, dinheiro eletrônico, tudo está aqui. Pegue, assine.
Do alvo
Para entender a questão, proponho começar a jornada desde o final. Qual é o objetivo de qualquer negócio? Isso mesmo, ganhar dinheiro. Então, imagine qualquer produto, por exemplo, meias de silicone. Por que não!
Peguei a primeira coisa que me veio à mente, acabou que é isso ...
Nossa tarefa é ganhar dinheiro com essas meias. Pensamos na Internet. Hmm… por que não “cortar” o site e é assim que as vendas vão, apenas me mantenha nas Maldivas! Mas, nem tudo é tão simples.
Eu realmente gosto de desenhar. Isso ajuda a entender os vários processos. Vamos desenhar?!
Até agora, nosso modelo se parece com isso. Pegamos meias, colocamos na internet e ganhamos dinheiro. É ótimo! Os olhos ardem, as palmas das mãos suam e já quero entrar nesse negócio. Mas você precisa fazer um site ou uma plataforma para venda?
Site ou plataforma para venda
Existem várias soluções para colocar seu produto na World Wide Web. Você pode criar seu próprio site ou usar sites de terceiros (grupos, páginas em redes sociais, quadros de avisos, etc.). Vamos parar no local.
Eles encomendaram um site, pegaram um modelo pronto ou criaram eles mesmos usando o construtor (o CMS pode ser pesquisado no Google), não importa. Em seguida, eles colocaram um monte de meias de silicone de vários tipos e ficaram felizes.
Perdoe-me por interromper minha leitura. Entre no meu canal do telegram. Novos anúncios de artigos, desenvolvimento de produtos digitais e growth hack, está tudo lá. Esperando Por Você! Nós continuamos ...
Sistemas de pagamento
Mas para que uma pessoa possa comprar de você aqui e agora, será necessário ajustar os sistemas de pagamento. Este é um tipo de serviço que permite fazer compras online através de: cartões bancários, dinheiro na Internet, telemóveis e um monte de outras coisas. Para isso, você terá que compartilhar uma porcentagem das transações, mas assim simplificará muito sua vida.
Escolha o serviço que mais lhe convém. Em algum lugar haverá uma porcentagem maior e em algum lugar um assinante ou outra coisa. Basta pesquisar um pouco sobre a questão. Coloque você mesmo o código necessário no site, vincule todas as transações à sua conta de cartão e pronto!
Isso parece ser tudo. Tem site, fichas de produtos, e até o botão “comprar” funciona, mas falta alguma coisa... Não tem fluxo de clientes que vão comprar.
fluxos de clientes
Onde: CAC = Custo de Aquisição de Novo Cliente. MCC (marketingcampaigncosts) = O custo total de gastos com marketing para adquirir (mas não reter) clientes. W (salários) = Salário para profissionais de marketing e gerentes de vendas. S (software) = Custo do software usado em publicidade e vendas (por exemplo, plataforma de vendas, automação de marketing, teste A/B, serviços analíticos, etc.). PS (professionalservices) = Custo dos serviços profissionais prestados aos departamentos de marketing e vendas (design, consultoria, etc.). O (outros) = Outras despesas gerais relacionadas com os departamentos de marketing e vendas. CA (clientes adquiridos) = Número total de clientes adquiridos.
Mas não devemos esquecer a qualidade do cliente, o LTV vai ajudar aqui.
Indicadores importantes: LTV
O Live Time Value, ciclo de vida do cliente, é outra métrica de comércio eletrônico a ser considerada. Ele mostra quanta receita um cliente traz em média. Existem diferentes abordagens para o cálculo, escolhi o lucro real como um dos mais precisos.
É simplesmente a soma da receita total do histórico de compras para cada cliente individual. Adicione a soma de todas as compras (transações) do cliente à transação N, onde a transação N é a última compra que o cliente fez em sua empresa. Se você tiver acesso a todos os dados de transações do cliente, poderá calculá-los facilmente usando o Excel.
LTV = (transação 1 + transação 2 + transação 3… + transação N) x participação nos lucros na receita.
O cálculo do LTV com base no lucro líquido, em última análise, mostra o lucro real que o cliente traz para sua empresa. Aqui, são levados em consideração o custo do atendimento ao cliente, o custo de retenção, o custo de aquisição etc. O resultado é todo um complexo de cálculos baseados em dados individuais. O lucro acumulado gerado por um único cliente ao longo do tempo lhe dará uma compreensão precisa da lucratividade de seus clientes até o momento.
Outras abordagens podem ser encontradas em.
Métricas importantes: relação CAC para LTV
Para entender a viabilidade de um negócio, é muito importante observar a proporção das duas métricas CAC:LTV mencionadas.
- Menos de 1:1 - Você está caminhando para a falência.
- 1:1 - Você perde dinheiro a cada cliente atraído.
- 1:2 - Parece bom, mas parece que você não está investindo o suficiente e pode crescer mais rápido. Lance campanhas de aquisição de clientes mais agressivas e alcance proporções próximas de 1:3.
- 1:3 - Relação ideal. Você tem um negócio próspero e um modelo de negócios forte.
Indicadores importantes: o ROI não é esquecido
Como discutimos acima, no comércio eletrônico é necessário entender claramente se é lucrativo usar o canal de aquisição ou não. Além do LTV e do CAC, existe outro indicador importante, esse é o ROI. Mostra se o seu investimento valeu a pena, no nosso caso em publicidade. Aquilo é. quanto 1 rublo investido nos trouxe no final.
Para o cálculo, uma fórmula muito simples é usada:
Onde “Receita da campanha” é a diferença entre a receita do canal e o custo do seu produto. E para calcular o lucro, subtraia mais custos de publicidade.
Assim, uma fórmula mais detalhada ficaria assim:
ROI = (Receita do Canal - Custo) - Custos de Publicidade / Custos de Publicidade x 100%
Leia um exemplo mais detalhado com um cálculo. Na verdade, esta fórmula simples é colocada toda na mesma tabela do Excel, onde tudo é calculado automaticamente.
Todos os três indicadores que analisamos são importantes no comércio eletrônico. Cada um deles permite que você encontre gargalos em seus fluxos e trabalhe com eles. É neles que reside o potencial de crescimento do negócio. Acrescentei um pouco mais ao nosso modelo com meias.
Não dá para encaixar tudo em um só material, e quem vai ler por tanto tempo? Posteriormente farei um guia separado sobre as nuances do comércio eletrônico que podem interferir nas vendas.
Total
Em geral, agora você tem uma compreensão geral do comércio on-line ou comércio eletrônico. Além disso, como se costuma dizer: "O diabo está nos detalhes". Estude cada um dos canais separadamente, calcule os indicadores de desempenho e busque novos insights nos detalhes. Vendas pela Internet para você, sim mais! E mais uma coisa minha.
Sim, quase me esqueci, feliz ano novo para vocês, queridos leitores! Desejo a você grandes vitórias e conquistas no próximo ano!
Capítulo 9.
Programação com CGI
Incluir uma seção sobre CGI em um livro de banco de dados pode parecer tão estranho quanto ter um capítulo sobre conserto de automóveis em um livro de receitas. Claro, para ir ao supermercado, você precisa de um carro em boas condições, mas é apropriado falar sobre isso? Uma introdução completa ao CGI e à programação da Web em geral está além do escopo deste livro, mas uma breve introdução a esses tópicos é suficiente para estender a capacidade do MySQL e do mSQL de representar dados no domínio da Web.
Este capítulo destina-se principalmente àqueles que estão aprendendo sobre bancos de dados, mas também gostariam de adquirir algum conhecimento de programação Web. Se o seu sobrenome for Berners-Lee ou Andressen, é improvável que você encontre algo aqui que ainda não saiba. Mas mesmo que você não seja novo em CGI, ter uma referência rápida à mão enquanto mergulha nos mistérios do MySQL e do mSQL pode ser bastante útil.
O que é CGI?
Como a maioria dos acrônimos, Common Gateway Interface (CGI significa Common Gateway Interface) não diz muito. Interface com o quê? Onde fica esse portal? De que comunidade estamos falando? Para responder a essas perguntas, vamos voltar um pouco e dar uma olhada na WWW como um todo.
Tim Berners-Lee, um físico que trabalhou no CERN, criou a Web em 1990, embora o plano remonte a 1988. A ideia era permitir que pesquisadores de física de partículas trocassem dados multimídia de maneira fácil e rápida - texto, imagens e som - através da internet. A WWW consistia em três partes principais: HTML, URL e HTTP. HTML- a linguagem de formatação usada para representar o conteúdo na Web. url- este é o endereço usado para obter conteúdo em formato HTML (ou não) do servidor web. E finalmente http-é uma linguagem que o servidor web entende e permite que os clientes solicitem documentos do servidor.
A capacidade de enviar todos os tipos de informações pela Internet foi uma revolução, mas outra possibilidade logo foi descoberta. Se você pode enviar qualquer texto pela Web, por que não pode enviar um texto criado por um programa e não retirado de um arquivo finalizado? Isso abre um mar de possibilidades. Um exemplo simples é usar um programa que imprima a hora atual para que o leitor veja a hora correta toda vez que visualizar a página. Alguns espertinhos do National Center for Supercomputing Applications (NCSA) que estavam construindo um servidor web viram essa oportunidade, e logo nasceu o CGI.
CGI é um conjunto de regras pelas quais programas em um servidor podem enviar dados para clientes por meio de um servidor web. A especificação CGI foi acompanhada por mudanças no HTML e HTTP que introduziram um novo recurso conhecido como formulários.
Enquanto o CGI permite que os programas enviem dados para um cliente, os formulários estendem essa capacidade permitindo que um cliente envie dados para esse programa CGI. Agora o usuário pode não apenas ver a hora atual, mas também acertar o relógio! Os formulários CGI abriram as portas para a verdadeira interatividade no mundo da Web. Aplicações CGI comuns incluem:
- HTML dinâmico. Sites inteiros podem ser gerados por um único programa CGI.
- Mecanismos de busca que encontram documentos com palavras especificadas pelo usuário.
- Livros de visitas e quadros de avisos onde os usuários podem adicionar suas mensagens.
- Formulários de pedidos.
- Questionários.
- Extraindo informações de um banco de dados hospedado no servidor.
Nos capítulos seguintes, discutiremos todos esses aplicativos CGI, bem como alguns outros. Todos eles fornecem uma excelente oportunidade para conectar o CGI a um banco de dados, que é o que nos interessa nesta seção.
Formulários HTML
Antes de explorar as especificidades do CGI, é útil examinar a maneira mais comum pela qual os usuários finais obtêm uma interface para programas CGI: formulários HTML. Os formulários fazem parte da linguagem HTML que fornece ao usuário final vários tipos de campos. Os dados inseridos nos campos podem ser enviados para o servidor web. Os campos podem ser usados para inserir texto ou ser botões nos quais o usuário pode clicar ou marcar. Aqui está um exemplo de uma página HTML contendo um formulário:
<НТМL><НЕАD><ТITLЕ>minha página de formulário
<р>Esta é uma página de formulário.
Este formulário cria uma string de 40 caracteres onde o usuário pode inserir seu nome. Abaixo da linha de entrada existe um botão, quando pressionado, os dados do formulário são transferidos para o servidor. A seguir estão as tags relacionadas a formulários suportadas pelo HTML 3.2, o padrão mais usado atualmente. Nomes de tags e atributos podem ser inseridos em qualquer caso, mas aderimos à convenção opcional de que as tags de abertura são escritas em maiúsculas e as de fechamento em minúsculas.
O único tipo de entrada que não usamos aqui é o tipo IMAGE para a tag . Ele pode ser usado como um método alternativo de envio de formulários. No entanto, o tipo IMAGE raramente é compatível com navegadores baseados em texto e não tão responsivos, portanto, é prudente evitá-lo, a menos que seu site tenha um estilo gráfico rico.
Agora que você está familiarizado com os fundamentos dos formulários HTML, está pronto para explorar o próprio CGI.
especificação CGI
Então, qual é exatamente o "conjunto de regras" que permite que um programa CGI em, digamos, Batavia, Illinois, se comunique com um navegador da Web na Mongólia Exterior? A especificação oficial do CGI, junto com uma série de outras informações sobre o CGI, pode ser encontrada no servidor NCSA em http://hoohoo . ncsa.uluc.edu/cgi/. No entanto, este capítulo existe para que você não precise viajar muito e procurá-lo sozinho.
Existem quatro maneiras pelas quais o CGI passa dados entre o quadro CGI-npor e o servidor Web e, portanto, o cliente Web:
- variáveis ambientais.
- Linha de comando.
- Dispositivo de entrada padrão.
- dispositivo de saída padrão.
Com esses quatro métodos, o servidor envia todos os dados enviados pelo cliente para o programa CGI. O programa CGI então faz sua mágica e envia a saída de volta para o servidor, que a encaminha para o cliente.
Esses dados são baseados em um servidor Apache HTTP. O Apache é o servidor web mais usado e roda em quase todas as plataformas, incluindo Windows 9x e Windows NT. No entanto, eles podem ser aplicados a todos os servidores HTTP que suportam CGI. Alguns servidores proprietários, como os da Microsoft e Netscape, podem ter recursos adicionais ou funcionar de maneira diferente. Como a face da Web continua a mudar em um ritmo incrível, os padrões ainda estão evoluindo e o futuro certamente mudará. No entanto, no que diz respeito ao CGI, essa tecnologia parece estar bem estabelecida - o preço disso é que outras tecnologias, como applets, a suplantaram. Quaisquer programas CGI que você escrever usando essas informações quase certamente poderão ser executados na maioria dos servidores da Web por muitos anos.
Quando um programa CGI é chamado por meio de um formulário, a interface mais comum, o navegador envia uma string longa para o servidor que começa com o caminho para o programa CGI e seu nome. Isso é seguido por vários outros dados, chamados de informações de caminho, que são passados para o programa CGI por meio da variável de ambiente PATH_INFO (Figura 9-1). As informações do caminho são seguidas por um "?" seguido dos dados do formulário, que são enviados ao servidor usando o método HTTP GET. Esses dados são disponibilizados para o programa CGI por meio da variável de ambiente QUERY_STRING. Quaisquer dados que a página enviar usando o método HTTP POST, que é o mais comumente usado, serão passados para o programa CGI via entrada padrão. Uma string típica que um servidor pode receber de um navegador é mostrada na Figura 1. 9-1. programa nomeado ler formulário no catálogo cgi-bin chamado pelo servidor com informações de caminho adicionais informação extra e choice=help request data - presumivelmente como parte do URL original. Finalmente, os próprios dados do formulário (o texto "programação CGI" no campo "palavras-chave") são enviados através do método HTTP POST.
Variáveis ambientais
Quando um servidor executa um programa CGI, ele primeiro passa alguns dados para ele executar na forma de variáveis de ambiente. Existem dezessete variáveis definidas oficialmente na especificação, mas muitas outras são usadas não oficialmente por meio de um mecanismo descrito abaixo chamado HTTP_/nec/zams/n. programa CGI
tem acesso a essas variáveis como qualquer variável de ambiente shell quando executado a partir da linha de comando. Em um shell script, por exemplo, a variável de ambiente F00 pode ser acessada como $F00; em Perl esta chamada se parece com $ENV("F00" ); em C - getenv("F00" ); e assim por diante.Tabela 9-1 lista as variáveis que são sempre definidas pelo servidor, mesmo que sejam nulas. Além dessas variáveis, os dados retornados pelo cliente no cabeçalho da solicitação são atribuídos a variáveis no formato HTTP_F00 , onde F00 é o nome do cabeçalho. Por exemplo, a maioria dos navegadores da Web inclui informações de versão em um cabeçalho denominado USEfl_AGENT . Sua estrutura CGI npor pode obter essas informações da variável HTTP_USER_AGENT.
Tabela 9-1.Variáveis de ambiente CGI
variável de ambiente |
Descrição |
||
COMPRIMENTO DO CONTEÚDO |
O comprimento dos dados passados pelos métodos POST ou PUT, em bytes. |
||
TIPO DE CONTEÚDO |
O tipo MIME dos dados anexados usando os métodos POST ou PUT. |
||
GATEWAY_INTERFACE |
Número da versão da especificação CGI suportada pelo servidor. |
||
PATH_INFO |
Informações de caminho adicionais fornecidas pelo cliente. Por exemplo, para um pedido http://www.myserver.eom/test.cgi/this/is/a/ caminho?campo=verde o valor da variável PATH_INFO será /este/é/um/caminho. |
||
PATH_TRANSLATED |
O mesmo que PATH_INFO , mas o servidor produz todos |
||
|
Uma tradução possível, por exemplo, uma extensão de nome como "-account". » |
||
QUERY_STRING |
Todos os dados após o "?" na URL. Esses também são os dados passados quando o REQ-UEST_METHOD do formulário é GET. |
||
REMOTE_ADDR |
O endereço IP do cliente que faz a solicitação. |
||
HOSPEDEIRO REMOTO |
O nome do host da máquina cliente, se disponível. |
||
REMOTE_IDENT |
Se o servidor web e a identificação do tipo de suporte ao cliente identd, então é o nome de usuário da conta que está fazendo a solicitação. |
||
REQUEST_METHOD |
O método usado pelo cliente para fazer a solicitação. Para os programas CGI que estamos prestes a criar, geralmente será POST ou GET. |
||
NOME DO SERVIDOR | O nome do host - ou endereço IP se o nome não estiver disponível - da máquina na qual o servidor da Web está sendo executado. | ||
PORTA DO SERVIDOR | O número da porta usada pelo servidor da web. | ||
SERVER_PROTOCOL |
O protocolo usado pelo cliente para se comunicar com o servidor. No nosso caso, esse protocolo é quase sempre HTTP. | ||
SERVER_SOFTWARE | Informações de versão do servidor web que executa o programa CGI. | ||
SCRIPT_NAME |
O caminho para o script a ser executado, conforme especificado pelo cliente. Pode ser usado quando uma URL se refere a si mesma, de modo que os scripts referenciados em locais diferentes possam ser executados de forma diferente dependendo do local. |
||
Aqui está um exemplo de script Perl CGI que imprime todas as variáveis de ambiente definidas pelo servidor, bem como todas as variáveis herdadas, como PATH, definidas pelo shell que iniciou o servidor.
#!/usr/bin/perl -w
imprimir<< HTML;
Tipo de conteúdo: text/html\n\n
HTML
foreach (chaves %ENV) ( print "$_: $ENV($_)
\n"; )
imprimir<
HTML
Todas essas variáveis podem ser usadas e até modificadas pelo seu programa CGI. No entanto, essas alterações não afetam o servidor da Web que iniciou o programa.
Linha de comando
O CGI permite que argumentos sejam passados para um programa CGI como opções de linha de comando, o que raramente é usado. Raramente é usado porque suas aplicações práticas são poucas e não vamos nos deter nele em detalhes. O ponto principal é que, se a variável de ambiente QUERY_STRING não contiver o caractere " = ", o programa CGI será executado com parâmetros de linha de comando obtidos de QUERY_STRING . Por exemplo, http://www.myserver.com/cgi- bin/dedo?raiz irá executar o finger root em www.myserver.com.
Existem duas bibliotecas principais que fornecem a interface CGI para Perl. O primeiro deles - cgi-lib.pl Utilitário cgi-lib.pl muito comum porque por muito tempo foi a única grande biblioteca disponível. Ela foi projetada para funcionar em Perl 4, mas também funciona com Perl 5. A segunda biblioteca, CGI.pm, mais novo e em muitos aspectos superior cgi-lib.pl CGI.pm escrito para Perl 5 e usa um esquema totalmente orientado a objetos para trabalhar com dados CGI. Módulo CGI.pm analisa a entrada padrão e a variável QUERY_STRING e armazena os dados em um objeto CGI. Seu programa só precisa criar um novo objeto CGI e usar métodos simples como paramQ para extrair os dados necessários. O Exemplo 9-2 serve como uma breve demonstração de como CGI.pm interpreta os dados. Todos os exemplos de Perl neste capítulo usarão CGI.pm.
Exemplo 9-2.
Analisando dados CGI em Perl
#!/usr/bin/perl -w
usar CGI qw(:padrão);
# O módulo CGI.pm é usado. qw(:padrão) importações
# namespace de funções CGI padrão para obter
# código mais limpo. Isso pode ser feito se o script
# apenas um objeto CGI é usado.
$mycgi = novo CGI; #Cria um objeto CGI que será a "porta de entrada" para os dados do formulário
@campos = $mycgi->param; # Extraia os nomes de todos os campos do formulário preenchidos
cabeçalho de impressão, start_html("teste CGI.pm"); ft métodos "header" e "start_html",
# oferecido
# CGI.pm facilita a obtenção do HTML.
# "header" gera o cabeçalho HTTP necessário, um
#"start_html" gera um cabeçalho HTML com o nome fornecido,
#a marca também
.imprimir"<р>Dados do formulário:
";
foreach (@campos) ( imprime $_, ":",- $mycgi->param($_), "
"; }
# Para cada campo, exiba o nome e o valor obtido usando
#
$mycgi->param("nome do campo").
imprimir end_html; # Abreviação para saída de tags finais "".
Processando entrada em C
Como as principais APIs para MySQL e mSQL são escritas em C, não abandonaremos completamente o C em favor do Perl, mas daremos alguns exemplos de C onde apropriado. Existem três bibliotecas C amplamente usadas para programação CGI: cgic Tom Boutell*; cgihtml Eugene Kim e libcgi da EIT*. nós acreditamos que cgicé o mais completo e fácil de usar. No entanto, falta a capacidade de enumerar todas as variáveis de formulário quando elas não são conhecidas por você com antecedência. Na verdade, ele pode ser adicionado com um patch simples, mas isso está além do escopo deste capítulo. Portanto, no Exemplo 9-3, usamos a biblioteca cgihtml, para repetir o script Perl acima em C.
Exemplo 9-3.Analisando dados CGI em C
/*
cgihtmltest.c - Programa CGI genérico para imprimir chaves e seus valores
a partir dos dados recebidos do formulário */
#incluir
#include "cgi-lib.h" /* Contém todas as definições de função CGI */
#include "html-lib.h" /* Contém "todas as definições de funções auxiliares para HTML */
void print_all(lllist 1)
/* Essas funções fornecem dados enviados por formulário no mesmo formato do script Perl acima. Cgihtml também fornece uma função interna
Print_entries() que faz o mesmo usando o formato de lista HTML. */(
nó*janela;
/* O tipo "nó" é definido na biblioteca cgihtml e refere-se a uma lista encadeada que contém todos os dados do formulário. */
janela = i.head; /* Define um ponteiro para o início dos dados do formulário */
while (window != NULL) ( /* Atravessa a lista encadeada até o último elemento (primeiro vazio) */
printf("%s:%s
\n",window->entry.name,replace_ltgt(window->entry.value));
/* Dados de saída. Replace__ltgt() é uma função que entende a codificação HTML do texto e garante que ela seja exibida corretamente no navegador do cliente. */
janela = janela->próximo; /* Move para o próximo elemento na lista. */
} }
int principal() (
entradas da lista; /* Ponteiro para dados analisados*/
estado int; /* Um inteiro representando o status */
html_cabeçalho(); /* Função auxiliar HTML que gera o cabeçalho HTML */
html_begin("teste cgihtml");
/* Uma função auxiliar HTML que gera o início da página HTML com o título especificado. */
status = read_cgi_input(&entries); /* Executa a entrada e análise dos dados do formulário */
printf("<р>Dados do formulário:
");
print_all(entradas); /* Chama a função print_all() definida acima. */
html_end(); /* Uma função auxiliar HTML que gera o final da página HTML. */
List_clear(&entries); /* Libera a memória ocupada pelos dados do formulário. */
retornar 0; )
Dispositivo de saída padrão
Os dados enviados por um programa CGI para a saída padrão são lidos pelo servidor da Web e enviados ao cliente. Se o nome do script começar com nph-, os dados são enviados diretamente ao cliente sem intervenção do servidor web. Nesse caso, o programa CGI deve gerar um cabeçalho HTTP válido que o cliente entenda. Caso contrário, deixe o servidor da Web gerar o cabeçalho HTTP para você.
Mesmo que você não use nph-script, você precisa fornecer ao servidor uma diretiva que informará as informações sobre sua emissão. Geralmente é um cabeçalho HTTP Content-Type, mas também pode ser um cabeçalho Location. O cabeçalho deve ser seguido por uma linha vazia, ou seja, uma nova linha ou uma combinação CR/LF.
O cabeçalho Content-Type informa ao servidor que tipo de dados seu programa CGI está servindo. Se esta for uma página HTML, a string deve ser Content-Type: texto/html. O cabeçalho Location informa ao servidor uma URL diferente - ou um caminho diferente no mesmo servidor - para onde direcionar o cliente. O título deve ficar assim: Localização: http:// www. myserver. com/outro/lugar/.
Após os cabeçalhos HTTP e a string vazia, você pode enviar os dados reais que seu programa produz - uma página HTML, uma imagem, texto ou qualquer outra coisa. Entre os programas CGI que acompanham o servidor Apache estão nph-test-cgi E teste cgi, que demonstram bem a diferença entre cabeçalhos nph e não-nph, respectivamente.
Nesta seção, usaremos as bibliotecas CGI.pm E cgic, que possuem funções para saída de cabeçalhos HTTP e HTML. Isso permitirá que você se concentre na saída do conteúdo real. Essas funções auxiliares são usadas nos exemplos anteriores neste capítulo.
Recursos importantes dos scripts CGI
Você já sabe basicamente como funciona o CGI. O cliente envia dados, geralmente por meio de um formulário, para o servidor web. O servidor executa o programa CGI, passando dados para ele. O programa CGI faz seu processamento e retorna sua saída ao servidor, que a envia ao cliente. Agora, a partir da compreensão de como os quadros CGI-npor funcionam, precisamos entender por que eles são tão amplamente utilizados.
Embora você já saiba o suficiente deste capítulo para montar um programa CGI simples e funcional, há mais algumas coisas importantes a considerar antes de escrever programas realmente funcionais para MySQL ou mSQL. Primeiro, você precisa aprender a trabalhar com vários formulários. Então você precisa aprender algumas medidas de segurança que impedirão que invasores obtenham acesso ilegal aos arquivos do servidor ou os destruam.
memória de estado
Statefulness é um meio vital de fornecer um bom serviço aos seus usuários, e não apenas para combater criminosos inveterados, como pode parecer. O problema é causado pelo fato de que o HTTP é o chamado protocolo "sem memória". Isso significa que o cliente envia dados para o servidor, o servidor retorna os dados para o cliente e cada um segue seu próprio caminho. O servidor não armazena dados sobre o cliente que possam ser necessários em operações subsequentes. Da mesma forma, não há garantia de que o cliente salvará quaisquer dados sobre a transação que possam ser usados posteriormente. Isso impõe uma limitação imediata e significativa no uso da World Wide Web.
O script CGI sob este protocolo é análogo a não ser capaz de se lembrar de uma conversa. Sempre que você fala com alguém, não importa quantas vezes já tenha falado com essa pessoa antes, você deve se apresentar e encontrar um assunto comum para conversar. Desnecessário dizer que isso não é propício à produtividade. A Figura 9-2 mostra que cada vez que uma solicitação chega a um programa CGI, é uma instância completamente nova do programa sem conexão com a anterior.
No lado do cliente, com o advento do Netscape Navigator, havia uma solução de aparência hacker chamada cookies. Consiste na criação de um novo cabeçalho HTTP que pode ser enviado entre o cliente e o servidor, semelhante aos cabeçalhos Content-Type e Location. O navegador do cliente, ao receber o cabeçalho do cookie, deve armazenar os dados no cookie, bem como o nome do domínio no qual o cookie opera. Posteriormente, sempre que uma URL dentro do domínio especificado for visitada, o cabeçalho do cookie deverá ser devolvido ao servidor para uso em programas CGI nesse servidor.
O método de cookie é usado principalmente para armazenar o ID do usuário. As informações do visitante podem ser armazenadas em um arquivo na máquina do servidor. O ID exclusivo desse usuário pode ser enviado como um cookie para o navegador do usuário, após o qual, cada vez que o usuário visita o site, o navegador envia automaticamente esse ID para o servidor. O servidor passa o ID para o programa CGI, que abre o arquivo correspondente e obtém acesso a todos os dados do usuário. Tudo isso acontece de forma invisível para o usuário.
Por mais útil que seja esse método, a maioria dos grandes sites não o utiliza como único meio de lembrar o estado. Há uma série de razões para isso. Primeiro, nem todos os navegadores suportam cookies. Até recentemente, o principal navegador para deficientes visuais (sem falar em pessoas com baixa velocidade de rede) - Lynx - não suportava cookies. Ele ainda não os apóia "oficialmente", embora alguns de seus "ramos laterais" amplamente disponíveis o façam. Em segundo lugar, e mais importante, os cookies vinculam o usuário a uma máquina específica. Uma das grandes virtudes da Web é que ela pode ser acessada de qualquer lugar do mundo. Independentemente de onde sua página da Web foi criada ou armazenada, ela pode ser exibida em qualquer máquina conectada à Internet. No entanto, se você tentar acessar um site habilitado para cookies da máquina de outra pessoa, todos os seus dados pessoais suportados pelo cookie serão perdidos.
Muitos sites ainda usam cookies para personalizar as páginas do usuário, mas a maioria os está complementando com uma interface de estilo de login/senha tradicional. Se o site for acessado a partir de um navegador que não suporta cookies, a página contém um formulário no qual o usuário insere o nome de login e a senha atribuídos a ele quando visitou o site pela primeira vez. Normalmente esse formulário é pequeno e modesto para não assustar a maioria dos usuários que não estão interessados em nenhuma personalização, mas simplesmente querem ir além. Quando um usuário insere um nome de login e senha no formulário, o CGI encontra o arquivo de dados do usuário como se o nome tivesse sido enviado com um cookie. Usando esse método, um usuário pode se registrar em um site personalizado de qualquer lugar do mundo.
Além das tarefas de contabilizar as preferências do usuário e armazenar informações a longo prazo sobre ele, um exemplo mais sutil de lembrança de estado, fornecido pelos mecanismos de pesquisa populares, pode ser fornecido. Quando você pesquisa usando serviços como AltaVista ou Yahoo, geralmente obtém muito mais resultados do que pode exibir em um formato fácil de ler. Esse problema é resolvido mostrando um pequeno número de resultados - geralmente 10 ou 20 - e fornecendo alguns meios de navegação para visualizar o próximo grupo de resultados. Embora esse comportamento pareça comum e esperado para o internauta médio, a implementação real não é trivial e requer que o estado seja lembrado.
Quando um usuário faz uma solicitação pela primeira vez a um mecanismo de pesquisa, ele coleta todos os resultados, possivelmente sujeitos a algum limite predefinido. O truque é fornecer esses resultados ao mesmo tempo em uma pequena quantidade, lembrando que tipo de usuário solicitou esses resultados e que parte ele espera a seguir. Deixando de lado a complexidade do próprio mecanismo de busca, nos deparamos com o problema de fornecer consistentemente ao usuário algumas informações em uma página. Considere o Exemplo 9-4, que mostra um script CGI que gera dez linhas de um arquivo e permite que ele examine as dez linhas seguintes ou anteriores.
Exemplo 9-4. Salvando o estado em um script CGI
#!/usr/bin/perl -w
usar CGI;
Open(F,"/usr/dict/words") or die("Não foi possível abrir! $!");
#Este é o arquivo que será gerado, pode ser qualquer um.
$saída = novo CGI;
sub print_range ( # Esta é a função principal do programa, my $start = shift;
# Linha inicial do arquivo, my $count = 0;
# Ponteiro, minha $linha = "";
# Linha atual do arquivo, imprima $output->header,
$output->start_html("Meu dicionário");
#
Gera HTML com o título "Meu dicionário", imprime "
enquanto (($contagem< $start) and ($line =
# Pular todas as linhas antes do início, while (($count< $start+10) and
($line ?
#
Imprima as próximas 10 linhas.
meu $newnext = $start+10; meu $newprev = $start-10;
# Definir strings iniciais para URLs "Próximo" e "Anterior",
imprimir"
";
excepto ($start == 0) ( # Activar URL "Anterior" excepto se você
# não está mais no começo.
imprimir qq%Anterior%; )
excepto (eof) ( # Incluir "Próximo" URL a menos que você #
não no final do arquivo.
imprimir qq%Próximo%;
}
imprimir "HTML;HTML
saída(0); )
# Se não houver dados, recomece,
if (não $output->param) (
&print_range(0); )
# Caso contrário, inicie na string especificada nos dados.
&print_range($output->param("start"));
Neste exemplo, lembrar o estado é feito usando o método mais simples. Não há problema em salvar os dados, pois os mantemos em um arquivo no servidor. Precisamos apenas saber de onde começar a saída, então o script simplesmente inclui o ponto de partida para o próximo ou anterior grupo de linhas na URL, que é tudo o que é necessário para gerar a próxima página.
No entanto, se você precisar de mais do que apenas rolar por um "arquivo", confiar em um URL pode ser complicado. Você pode aliviar essa dificuldade usando um formulário HTML e incluindo dados de estado nas tags. tipo OCULTO. Esse método tem sido usado com sucesso por muitos sites, permitindo vincular programas CGI relacionados ou estender o uso de um único programa CGI, como no exemplo anterior. Em vez de se referir a uma entidade específica, como uma página inicial, os dados de URL podem apontar para um ID de usuário gerado automaticamente.
É assim que o AltaVista e outros mecanismos de pesquisa funcionam. A primeira pesquisa gera um ID de usuário que é incluído implicitamente nas URLs subsequentes. Este ID está associado a um ou mais arquivos contendo os resultados da consulta. Mais dois valores estão incluídos no URL: a posição atual no arquivo de resultado e a direção na qual você deseja avançar nele. Esses três valores são tudo o que é necessário para rodar os poderosos sistemas de navegação dos grandes buscadores.
No entanto, algo mais está faltando. O arquivo usado em nosso exemplo /usr/dieta/palavras muito grande. E se deixarmos no meio da leitura, mas quisermos voltar mais tarde? Se você não se lembra da URL da próxima página, não há como voltar atrás, nem mesmo o AltaVista permite. Se você reiniciar o computador ou começar a trabalhar em outro, é impossível retornar aos resultados da pesquisa anterior sem inserir novamente a consulta. No entanto, essa estabilidade de longo prazo está no centro da personalização do site da qual falamos acima e vale a pena ver como ela pode ser explorada. O Exemplo 9-5 é uma versão modificada do Exemplo 9-4.
Exemplo 9-5.
Memória de estado persistente
#!/usr/bin/perl -w
usar CGI;
umask 0;
Open(F,"/usr/dict/words") or die("Não foi possível abrir! $!");
Chdir("users") or die("Não consigo mudar para o diretório $!");
#
Este é o diretório onde todos os dados serão armazenados
# sobre o usuário.
Saída = novo CGI;
if (não $output->param) (
imprimir $saída->cabeçalho,
$output->start_html("Meu dicionário");
imprimir "HTML;