Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
| Ambos lados da revisão anterior Revisão anterior | |||
| espec:servico_http [2011/09/06 18:25] – 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-// | ||