A ESTRUTURA DO PROTOCOLO HTTP Rodrigo Albino 27/05/2009 1. INTRODUÇÃO O HTTP (hyper text transfer protocol) surgiu em 1990 sendo intitulado de HTTP 0.9 para WWW, tendo como finalidade apenas a transferência dos dados sem nenhuma formatação na internet. Em maio de 1990 o IETF publicou a RFC 1945 que regulamentou uma nova versão, surgindo então o HTTP 1.0, que acrescentou a formatação de dados do tipo MIME e a meta-informação sobre os dados transmitidos, mudou também a forma de requisição e respostas e desconsiderou os poxys hierárquicos. Após a criação da RFC 1945 houve duas atualizações, em janeiro de 1997 surgiu o HTTP 1.1 com a RFC 2068 e logo em seguida em junho de 1999 a RFC 2616 padronizando o HTTP 1.1 até os dias de hoje. O protocolo HTTP é utilizado na camada de aplicação da rede segundo o Modelo OSI, é responsável por determinar as regras utilizadas na comunicação entre o cliente e servidor para intranets e World Wide Web. Seu objetivo é dar eficiência na transferência de dados multimídia, podendo ser áudio, vídeo, imagens, textos, hiper-texto dentre outros. Seu protocolo é simples e utiliza 4 procedimentos, conexão, requisição, resposta e desconexão. Na Requisição, o cliente faz uma requisição ao servidor que é seguida por uma mensagem do tipo MIME (Multipurpose Internet Mail Extension) que possui modificações da requisição; Resposta, o servidor logo após o recebimento envia uma linha de confirmação contendo a versão do protocolo e o código de sucesso ou erro; Conexão, pode ser direta ou intermediada podemos citar o proxy que reescreve uma parte da mensagem quando for necessário e o gateway que faz uma tradução entre diferentes protocolos quando é necessário e também temos o tunelamento que não modifica nenhuma mensagem. Este trabalho relata a estrutura e funcionamento do protocolo HTTP, na seção 2 descreve o funcionamento, na seção 3 descreve sobre mensagens HTTP, na seção 4 descreve o cabeçalho, corpo da mensagem e a requisição, na seção 5 os métodos como resposta, códigos de retorno, conexões e outros tipos de protocolo, na seção 6 um breve relato sobre o protocolo HTTPS . 2. FUNCIONAMENTO Para que aja a comunicação cliente\servidor é necessário que o cliente faça uma conexão TCP/IP(Internet Protocol), criando uma socket no servidor utilizando normalmente a porta 80 e o servidor aceite a conexão TCP/IP do cliente para que as trocas de mensagens HTTP entre o browser e o servidor Web sejam realizadas (Requisição e Resposta)[3]. Essa Comunicação com o servidor é feita através da linguagem HTML, porém para haver controle sobre os procedimentos é necessário utilizar comandos adequados que a linguagem HTML não possui. A Comunicação é estabelecida quando o cliente envia uma requisição URI para o servidor que contem as informações da versão do protocolo utilizada, e uma mensagem MIME que codifica o texto em formato ASCII para o envio, modificando a requisição e informando ao cliente o conteúdo do texto. O Servidor responde o status e inclui uma linha com sua versão do protocolo e um código contendo se houve ou não erro na informação. 3. MENSAGENS HTTP As Mensagens utilizadas tanto pelo cliente como pelo servidor utilizando um formato genérico na transferência de entidades [4]. A RFC 2616 de 1999, determina que a mensagem é composta por um linha em branco, uma ou mais linhas compondo o cabeçalho sempre sendo finalizado por uma linha em branco, e o corpo da mensagem no final é opcional dependendo do procedimento. 4. CABEÇALHO DA MENSAGEM A utilização do cabeçalho para adicionar informações na mensagem para serem enviadas entre o cliente e servidor, é posicionada logo após a linha inicial tanto para a requisição quanto para a resposta seguida de dois pontos com um valor. A utilização do cabeçalho possui 4 variações que são elas: general-header, request-header, response-header e entity-header [3]. 4.1 Corpo da Mensagem O Corpo da Mensagem HTTP fica localizado abaixo do cabeçalho, no caso de uma mensagem de resposta o corpo da mensagem é o resultado que foi solicitado pelo cliente, podendo ter como resultado também o erro. Na mensagem de requisição o corpo de dados pode ser enviado diretamente pelo usuário ou até mesmo um arquivo enviado ao servidor. Quando for detectado que a mensagem HTTP possui um corpo, seu cabeçalho recebe suas características como o Content-Type e o Content-Length, que representa o tipo MIME e a quantidade de bytes conseqüentemente. 1 Exemplo Descrição text/plain Arquivo no formato texto (ASCII) text/html Arquivo no formato HTML, utilizado como padrão para documentos Web Image/gif Imagem com o formato GIF Image/jpeg Imagem com o formato JPEG application/zip Arquivo compactado Fig. 4.1 - Tipos de Mensagens 4.2 Requisição A estrutura de uma mensagem de requisição é composta pelas seguintes divisões: Linha inicial (Resquest-Line); Linhas de cabeçalhos (Requestheader); Linha em branco obrigatória após o cabeçalho; Corpo da mensagem opcional; A Resquest-Line é composto por três partes utilizadas sendo dividida por espaços: O Method, o RequestURI e o HTTP-Version. O Request-URI identifica qual recurso será aplicado a requisição, e no protocolo HTTP a URI é denominado URL (Uniform Resource Locater), que contem a identificação do protocolo, o endereço do servidor e o documento requisitado [3]. O método PUT faz o upload de arquivo contido no corpo da mensagem para o caminho especificado no campo URL. O DELETE exclui arquivo especificado no campo URL. O TRACE transmite o pedido de forma que o cliente saiba que o servidor está mudando o seu pedido. O OPTIONS faz a recuperação dos métodos HTTP que o servidor reconheça. O CONNECT é destinado a Proxy ou túnel SSL de forma segura. 5.1 Resposta A estrutura de uma mensagem de resposta do servidor é composta pelas seguintes divisões: Linha inicial (Status-Line); Linhas de cabeçalhos (Responseheader); Linha em branco obrigatória após o cabeçalho; Corpo da mensagem opcional; A ResquestLine é composta por três partes utilizadas sendo dividida por espaços: O HTTP-version, o Status-Code e o Reason-Phrase. Fig. 5.1 - Mensagem de Resposta HTTP Fig. 4.1 - Mensagem de Requisição HTTP 5. MÉTODOS A divisão dos métodos utilizados pelo protocolo HTTP são definidos em oito, para indicar qual será a ação realizada no recurso especificado, no caso da URL o servidor utilizando os métodos determina o que fazer. O método GET é o mais comum, faz uma solicitação de algum recurso podendo ser arquivos ou script através do protocolo HTTP, sendo aceito por todos os servidores. O método HEAD é semelhante ao método GET mudando apenas o retorno do recurso, é utilizado para captar meta-informação através do cabeçalho de resposta, sem recuperar todo o conteúdo. O método POST encaminha as informações para processamento no recurso específico, os dados são embutidos no corpo do comando, muito comum quando os dados têm que ser processados nos servidores por um programa de script (RequestURI). Por utilizar no cabeçalho informações como (Content-Lenght) e (Content-Type) proporciona maior segurança na transferência dos dados. 5.2 Códigos de retorno A resposta do HTTP é o Status-Line que indica se a requisição foi bem sucedida ou deu algum erro, isso é possível através de um código de retorno (StatusCode) e uma frase explicativa (Reason-Phrase), que são formados por três dígitos, o primeiro dígito representa a classe. São divididos em cinco tipos: 1xx: Informação – utilizada para enviar confirmação ao cliente de que sua requisição foi recebida e está sendo processada; Ex. 100 - Confirmado 2xx: Sucesso – indica que a requisição do cliente foi bem sucedida; Ex. 200 – OK, 201- Criado, 204 – Sem Conteúdo. 3xx: Redirecionamento – informa a ação adicional que deve ser tomada para completar a requisição; Ex. 304 – Não modificado. 4xx: Erro no cliente – avisa que o cliente fez uma requisição que não pode ser atendida; Ex. 400 – Pedido mal formado, 401 – Não tem autorização. 5xx: Erro no servidor – ocorreu um erro no servidor ao cumprir uma requisição válida. Ex. 501 – Comando não implementado. O protocolo HTTP especifica alguns códigos em cada classe, porém cada servidor pode definir seus próprios códigos. 2 5.3 Conexões O HTTP 1.0 é um protocolo não persistente, sua conexão entre o cliente e o servidor se encerra logo após o envio de cada requisição ou resposta. Com isso o aumento do consumo de processamento, memória e banda são inevitáveis. Na busca de se obter um resultado muitas vezes são necessários realizar várias solicitações através de várias conexões, no caso de se abrir um Web Site que contenha código HTML, imagens gif, dentre outras. O HTTP 1.1 é um protocolo persistente que possibilita várias requisições simultâneas sem a necessidade de esperar respostas, e as mesmas serão recebidas na mesma ordem das solicitações, essa estrutura é chamada de pipelining. A conexão com pipelining pode também não ser realizada, no caso em que o servidor fique inativo até que o objeto HTML, imagem, chegue ao destino no cliente. 5.4 Outros Protocolos Há outros tipos de protocolos como o FTP (Protocolo de Transferência de Arquivo), o SMTP (Protocolo de Transferência de Correio Eletrônico Simples), TELNET (Protocolo de Acesso Terminal Remoto), dentre outros. diferentes tipos de tarefas, usando os métodos de requisição e resposta, cabeçalhos e códigos de erros. 8. REFERÊNCIA [ 1 ] T. Berners, R. Fielding e H. Frystyk. “RFC 1945: Hypertext Transfer Protocol -- HTTP/1.0”. Maio 1996. [ 2 ] R. Fielding, J. Gettys, J. Mogul, T. Berners, H. Frystyk. “RFC 2068: Hypertext Transfer Protocol -HTTP/1.1”. Janeiro 1997. [ 3 ] R. Fielding, J. Gettys, J. Mogul, H. Frystyk, L. Masinter, P. Leach, T. Berners. “RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1”. Junho 1999. [ 4 ] David H. Crocker. “RFC 822: STANDARD FOR THE FORMAT OF ARPA INTERNET TEXT MESSAGES”. Agosto 1982. [ 5 ] R. Khare, S. Lawrence. “RFC 2817: Upgrading to TLS Within HTTP/1.1”. Maio 2000. [ 6 ] E. Rescorla. “RFC 2818: HTTP Over TLS”. Maio 2000. [ 7 ] http://pt.wikipedia.org/wiki/Web_2.0: acessado em 28/05/2009 6. HTTPS Com a necessidade constante de segurança surge o HTTPS (HyperText Transfer Protocol Secure) implementado em cima do protocolo HTTP sobre uma camada segura SSL ou TLS. Com a ajuda destas camadas adicionais é possível que os dados sejam transmitidos por uma conexão criptografada e também verifique a autenticidade do servidor através de certificados digitais. Enquanto o HTTP utiliza em sua maioria a porta TCP 80, o HTTPS utiliza a porta 443. Esse protocolo fica bem evidente quando entramos em sites seguros ou e-commerce quando aparece um cadeado garantindo que há certificação segura da página (SSL) [5] [6]. 7. WEB 2.0 Esse termo surgiu em uma apresentação em 2004 pela empresa americana O´Reilly Media, para especificar a segunda geração de comunicação e serviços, tendo como conceito a WEB como plataforma. Este termo não refere a novas atualizações e especificações técnicas, mais sim a forma com que a web é encarada pelos usuários e desenvolvedores. Então podemos definir que a Web 2.0 é um ambiente de interação que engloba inúmeras linguagens e modificações.[7] 8. CONCLUSÃO De acordo com sua estrutura e comunicação podemos definir que o protocolo HTTP possui um uso genérico, podendo suprir as necessidades de 3