Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
Ambos lados da revisão anterior Revisão anterior Próxima revisão | Revisão anterior | ||
espec:servico_http [2008/06/11 21:28] – maziero | espec:servico_http [2020/08/18 22:51] (atual) – edição externa 127.0.0.1 | ||
---|---|---|---|
Linha 1: | Linha 1: | ||
+ | ====== O Serviço HTTP ====== | ||
+ | |||
+ | O objetivo desta aula é compreender o funcionamento básico do serviço Web, explorando suas principais possibilidades de configuração. | ||
+ | |||
+ | ===== Conceitos básicos ===== | ||
+ | |||
+ | A World-Wide-Web é baseada em um relacionamento cliente/ | ||
+ | |||
+ | O protocolo HTTP permite o transporte dos mais diversos tipos de arquivos, como textos HTML, imagens, documentos em formatos específicos, | ||
+ | |||
+ | ===== URLs ===== | ||
+ | |||
+ | Os recursos disponíveis na Web são acessados através de referências denominadas URLs - //Uniform Resource Locators//. Uma URL define completamente um recurso na Internet, e tem os seguintes componentes: | ||
+ | |||
+ | * protocolo: forma de comunicação usada para acessar o recurso. Pode ser FTP, HTTP, LDAP, ... | ||
+ | * servidor: nome da máquina que provê o serviço desejado. | ||
+ | * domínio: complemento do nome do servidor, especificando em que rede se encontra. | ||
+ | * porta: porta a conectar no servidor. Pode ser omitida se for a porta default para o serviço desejado. | ||
+ | * caminho: localização do recurso dentro do servidor. | ||
+ | * recurso: nome do recurso dentro do servidor. | ||
+ | |||
+ | Considerando as seguintes URLs de exemplo, seus componentes têm os seguintes significados: | ||
+ | |||
+ | ^ URL ^ protocolo ^ servidor ^ domínio ^ porta ^ caminho ^ recurso ^ | ||
+ | | %%http:// | ||
+ | | %%http:// | ||
+ | | %%ftp:// | ||
+ | |||
+ | ===== O protocolo HTTP ===== | ||
+ | |||
+ | O HTTP - //HyperText Transport Protocol// (versão 1.0 definida na [[http:// | ||
+ | |||
+ | Um exemplo típico de solicitação em HTTP, enviada pelo navegador ao servidor Web, é indicado a seguir: | ||
+ | |||
+ | < | ||
+ | GET /teste.html HTTP/1.0 | ||
+ | Host: 20.0.0.29: | ||
+ | Accept: text/html, text/plain, image/*, application/ | ||
+ | Accept-Encoding: | ||
+ | Accept-Language: | ||
+ | User-Agent: Lynx/ | ||
+ | |||
+ | </ | ||
+ | |||
+ | Observe que a última linha da solicitação é vazia (sem conteúdo). Ao receber uma linha vazia, o servidor compreende que a solicitação terminou e começa a preparar uma resposta. A resposta do servidor a essa solicitação, | ||
+ | |||
+ | < | ||
+ | HTTP/1.1 200 OK | ||
+ | Date: Tue, 01 Jun 2004 01:41:08 GMT | ||
+ | Server: Apache/ | ||
+ | Last-Modified: | ||
+ | ETag: " | ||
+ | Accept-Ranges: | ||
+ | Content-Length: | ||
+ | Connection: close | ||
+ | Content-Type: | ||
+ | |||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Deve-se observar que a resposta do servidor é dividida em duas seções, separadas por uma linha vazia. A primeira seção é denominada // | ||
+ | |||
+ | Os principais métodos (comandos) do protocolo HTTP são: | ||
+ | |||
+ | ^ Método ^ Descrição ^ | ||
+ | | GET | busca um objeto definido por uma URL do servidor | | ||
+ | | PUT | indica que os dados no corpo da consulta devem ser armazenados na URL especificada | | ||
+ | | POST | cria um novo objeto ligado ao objeto especificado na URL. Uma URL será alocada pelo servidor e retornada ao cliente. O conteúdo do novo objeto é o corpo de dados da consulta | | ||
+ | | HEAD | similar ao método GET, mas retorna somente o cabeçalho da resposta do servidor | | ||
+ | | DELETE | solicita ao servidor a remoção da informação correspondente à URL indicada | | ||
+ | |||
+ | Os principais status de retorno de métodos HTTP, informados pelo servidor no cabeçalho da resposta, são indicados abaixo (veja a [[http:// | ||
+ | |||
+ | ^ Categoria ^ Descrição ^ Código ^ Descrição ^ | ||
+ | | 1 - - | Informational | 100 | Continue | | ||
+ | | | | 101 | Switching protocols | | ||
+ | | 2 - - | Success | 200 | Ok | | ||
+ | | | | 201 | Created | | ||
+ | | | | 202 | Accepted | | ||
+ | | | | 203 | Non-authoritive information | | ||
+ | | 3 - - | Redirection | 300 | Multiple choices | | ||
+ | | | | 301 | Moved permanently | | ||
+ | | | | 302 | Moved temporarily | | ||
+ | | 4 - - | Client error | 400 | Bad request | | ||
+ | | | | 401 | Unauthorized | | ||
+ | | | | 402 | Payment required | | ||
+ | | | | 403 | Forbidden | | ||
+ | | | | 404 | Not found | | ||
+ | | | | 415 | Unsupported media type | | ||
+ | | | | 426 | Upgrade Required | | ||
+ | | 5 - - | Server error | 500 | Internal server error | | ||
+ | | | | 501 | Not implemented | | ||
+ | | | | 502 | Bad gateway | | ||
+ | | | | 503 | Service unavailable | | ||
+ | | | | 505 | HTTP version not supported | | ||
+ | |||
+ | Os tipos MIME usados para identificar o tipo do conteúdo da resposta do servidor (na linha '' | ||
+ | |||
+ | ^ Tipo MIME ^ Significado ^ | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | |||
+ | ====== O servidor Apache ====== | ||
+ | |||
+ | ===== Funcionamento básico do servidor ===== | ||
+ | |||
+ | O servidor WWW que será usado neste curso é o [[http:// | ||
+ | |||
+ | O servidor Apache é executado na forma de um processo //daemon// chamado '' | ||
+ | |||
+ | < | ||
+ | $ ps aux|grep -i http | ||
+ | ... | ||
+ | root 1084 0.0 0.3 258800 15112 ? S< | ||
+ | apache | ||
+ | apache | ||
+ | apache | ||
+ | apache | ||
+ | apache | ||
+ | apache | ||
+ | apache | ||
+ | apache | ||
+ | apache | ||
+ | apache | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | A estrutura em vários processos do servidor Apache tem vários objetivos: | ||
+ | |||
+ | * **Maior segurança**, | ||
+ | * **Melhor desempenho**, | ||
+ | * **Maior robustez**, pois cada filho trata um número máximo de requisições e em seguida encerra sua execução, sendo substituido por um novo filho. | ||
+ | |||
+ | Os principais arquivos e diretórios usados pelo Apache (na distribuição Linux RedHat) são: | ||
+ | |||
+ | * ''/ | ||
+ | * ''/ | ||
+ | * ''/ | ||
+ | * ''/ | ||
+ | * ''/ | ||
+ | * ''/ | ||
+ | * ''/ | ||
+ | * '' | ||
+ | |||
+ | A localização dos diretórios pode ser alterada editando-se o arquivo de configuração. | ||
+ | |||
+ | É importante observar que, como os //daemons// do servidor executam sob a identidade de um usuário menos privilegiado, | ||
+ | |||
+ | ===== Configuração básica ===== | ||
+ | |||
+ | O principal arquivo de configuração do Apache é o ''/ | ||
+ | |||
+ | < | ||
+ | DocumentRoot "/ | ||
+ | |||
+ | < | ||
+ | |||
+ | # | ||
+ | # This may also be " | ||
+ | # " | ||
+ | |||
+ | Options Indexes FollowSymLinks ExecCGI | ||
+ | |||
+ | # This controls which options the .htaccess files in directories can | ||
+ | # | ||
+ | # " | ||
+ | |||
+ | AllowOverride None | ||
+ | |||
+ | # | ||
+ | |||
+ | Order allow,deny | ||
+ | Allow from all | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== Controle de acesso a páginas ===== | ||
+ | |||
+ | O controle de acesso à páginas pelos clientes é feito com base em diretórios. Além das definições presentes no arquivo de configuração global (cláusulas '' | ||
+ | |||
+ | Para controlar o acesso ao diretório baseado em hosts: | ||
+ | |||
+ | < | ||
+ | order deny,allow | ||
+ | deny from all | ||
+ | allow from .ppgia.pucpr.br | ||
+ | allow from 200.123.123.123 | ||
+ | allow from 10.1 | ||
+ | allow from 10.2.0.0/ | ||
+ | allow from 10.3.0.0/16 | ||
+ | </ | ||
+ | |||
+ | Para controlar o acesso baseado em usuários/ | ||
+ | |||
+ | < | ||
+ | AuthUserFile / | ||
+ | AuthName " | ||
+ | AuthType Basic | ||
+ | require valid-user | ||
+ | </ | ||
+ | |||
+ | Informações mais detalhadas sobre controle de acesso no Apache podem ser encontradas [[http:// | ||
+ | |||
+ | Para ter mensagens de erro personalizadas: | ||
+ | |||
+ | < | ||
+ | ErrorDocument 404 / | ||
+ | </ | ||
+ | |||
+ | Para usar outra página default para um determinado diretório: | ||
+ | |||
+ | < | ||
+ | DirectoryIndex filename.html | ||
+ | </ | ||
+ | |||
+ | É importante ressaltar que o uso dos arquivos '' | ||
+ | |||
+ | Uma série de opções interessantes, | ||
+ | |||
+ | ===== Páginas pessoais ===== | ||
+ | |||
+ | O Apache considera que um recurso designado no formato "''/ | ||
+ | |||
+ | É importante observar que os diretórios contendo páginas pessoais devem estar acessíveis aos //daemons// do Apache. Como estes executam sob a identidade de um usuário não-// | ||