𝖂𝖎ƙ𝖎𝖊

Hypertext Transfer Protocol: mudanças entre as edições

imported>RobotQuistnix
m (robot Adicionando: lb)
imported>Pexe
Linha 123: Linha 123:
Host: <ip><br>
Host: <ip><br>
User-Agent: <Agente<sup>1</sup>><br>
User-Agent: <Agente<sup>1</sup>><br>
Connection: <tipo><br>
Connection: <tipo<sup>2</sup>><br>


* <sup>1</sup> Agente que faz a ligação ao servidor, normalmente um [[browser]]
* <sup>1</sup> Agente que faz a ligação ao servidor, normalmente um [[browser]]
* <sup>2</sup> Indica como o servidor deve proceder com a conexão, é comumente utilizado para requisições persistentes.


==Bibliografia==
==Bibliografia==

Edição das 01h55min de 29 de janeiro de 2006

Predefinição:Manutenção/Categorizando por assunto

Predefinição:ProtocolosIP HTTP significa HyperText Transfer Protocol (Protocolo de Transferência de Hipertexto) e é um protocolo da camada de Aplicação do modelo OSI utilizado para transferência de dados na World Wide Web. Esse é o protocolo da World Wide Web (www).Ele transfere dados de hiper midia(imagens,sons e textos).Algumas de suas características é que geralmente esse protocolo utiliza a porta 80 e ele é usado para a comunicação dos sites.Ele se comunica na linguágem HTML(Hipertext Markup Language), mas para os computadores se comunicarem com o servidor do site,tem que usar alguns comandos próprios dele,que não são o HTML.


Para você acessar um outro documento no documento atual que você está acessando,tem uma ancora que liga os documentos,chamada de link(ou ancora),e esses documentos estão em um site e para acessá-lo você tem que digitar o seu endereço que se chama URI (Universal Resource Indentifier),mas não confundam URI com URL(Universal Resource Local),que é o método do HTML de ligar documentos.

Considerações iniciais

O HyperText Transfer Protocol (HTTP) é um protocolo de rede responsável pela transferência de dados e pela comunicação entre cliente e servidor na World Wide Web (WWW). O protocolo HTTP surgiu da necessidade de distribuir informações pela Internet. Para que essa distribuição fosse possível, foi necessário criar uma forma padronizada de comunicação entre os clientes e os servidores da Web. Com isso, o protocolo HTTP passou a ser utilizado para a comunicação entre computadores na Internet e a especificar como seriam realizadas as transações entre clientes e servidores, através do uso de regras básicas (cf. EMBRATEL, HTTP. Disponível em: http://www.embratel.net.br/internet/tecnologia/tecnologia/protocolos_http.html Acesso em: 15 fev. 2002). Este protocolo tem sido usado pela WWW desde 1990. A primeira versão de HTTP, chamado HTTP/0.9, era um protocolo simples para a transferência de dados no formato de texto ASCII pela Internet, através de um único método de requisição, chamado GET. A versão HTTP/1.0 foi desenvolvida, entre 1992 e 1996, para suprir a necessidade de transferir não apenas texto. Com essa versão, o protocolo passou a transferir mensagens do tipo MIME44 (Multipurpose Internet Mail Extension) e foram implementados novos métodos de requisição, chamados POST e HEAD. No HTTP/1.1, versão atual do protocolo descrito na RFC 2616 por Fielding et al (1999, p. 7) foi desenvolvido um conjunto de implementações adicionais ao HTTP/1.0, como por exemplo: o uso de conexões persistentes; o uso de servidores proxy que permite uma melhor organização da cache; novos métodos de requisições; entre outros. Fielding et al (1999, p. 7) afirma que o HTTP também é usado como um protocolo genérico para comunicação entre os agentes de usuários e proxies/gateways com outros protocolos, como o SMTP, NNTP, FTP, Gopher, e WAIS, permitindo o acesso a recursos disponíveis em aplicações diversas.

Funcionamento do protocolo HTTP

Um sistema de comunicação em rede possui diversos protocolos que trabalham cooperativamente para o fornecimento de serviços. Para que o protocolo HTTP consiga transferir seus dados pela Web, é necessário que os protocolos TCP e IP (Internet Protocol) tornam possível a conectividade entre clientes e servidores através de sockets TCP/IP. De acordo com Fielding et al (1999, p. 10), o HTTP utiliza o modelo cliente-servidor, como a maioria dos protocolos de rede, baseando-se no paradigma de requisição e resposta. Um programa requisitante (cliente) estabelece uma conexão com um outro programa receptor(servidor) e envia uma requisição para o servidor na forma de um método de requisição, contendo a URI (Uniform Resource Identifiers), a versão do protocolo, uma mensagem MIME (Padrão utilizado para codificar dados em formato de textos ASCII para serem transmitidos pela Internet) contendo os modificadores da requisição, informações sobre o cliente e, possivelmente, o conteúdo no corpo da mensagem. O servidor responde com uma linha de status (status line) incluindo sua versão de protocolo e um código de operação bem sucedida ou um código de erro, seguido pelas informações do servidor, metainformações da entidade e possível conteúdo no corpo da mensagem, após enviar a resposta encerra-se a conexão estabelecida.

Mensagem http

O protocolo HTTP faz a comunicação entre o cliente e o servidor através de mensagens. O cliente envia uma mensagem de requisição de um recurso e o servidor envia uma mensagem de resposta ao cliente com a solicitação. Segundo Foscarini (2001, p. 13), os dois tipos de mensagens existentes no protocolo, utilizam um formato genérico, definido na RFC 822, para a transferência de entidades . Uma mensagem tanto de requisição quanto de resposta é composta, conforme definido na RFC 2616 (Fielding et al, 1999, p. 21), por uma linha inicial, nenhuma ou mais linhas de cabeçalhos, uma linha em branco obrigatória finalizando o cabeçalho, e por fim o corpo da mensagem podendo ser opcional em determinados casos. Nesta seção serão apresentados os campos que compõem uma mensagem mais detalhadamente. A Figura 1 ilustra um exemplo de mensagens de requisição e resposta. Arquivo:Telnet.jpg


Cabeçalho da mensagem

O cabeçalho da mensagem, identificado como header, é utilizado para transmitir informações adicionais entre o cliente e o servidor. O header é especificado imediatamente após a linha inicial da transação (método), tanto para a requisição do cliente quanto para a resposta do servidor, seguido de dois pontos (:) e um valor. Existem quatro tipos de cabeçalhos que poderão ser incluídos na mensagem os quais são: general-header, requestheader, response-header e entity-header (cf. Fielding et al, 1999, p. 21). Estes cabeçalhos são utilizados para enviar informações adicionais sobre a mensagem transmitida (general-header), a requisição e os clientes (request-header) que comunicam suas configurações e os formatos de documentos desejados como resposta (cf. Bastos & Ladeira, 2001). Além disso, são utilizados pelo servidor ao retornar o recurso no qual foi requisitado pelo cliente, para transmitir informações que descrevem as configurações do servidor e do recurso identificado pelo URI de requisição, e que não pertence à linha de status (responseheader). Na RFC 2616 (cf. Fielding et al, 1999) estão descritos todos os campos que pertencem a estes cabeçalhos.

1.1 Corpo da mensagem

Uma mensagem HTTP pode conter um corpo de dados que são enviados abaixo das linhas de cabeçalho. Em uma mensagem de resposta, o corpo da mensagem é o recurso que foi requisitado pelo cliente, ou uma mensagem de erro caso este recurso não seja possível. Já em uma mensagem de requisição, o corpo pode conter dados que serão enviados diretamente pelo usuário ou um arquivo que será enviado para o servidor. Quando uma mensagem HTTP tiver um corpo, poderão ser incluídos cabeçalhos de entidades que descrevem suas características, como por exemplo, o Content-Type que informa o tipo MIME dos dados no corpo da mensagem e o Content-Length que informa a quantidade de bytes que o corpo da mensagem contém. A Tabela 2 apresenta alguns tipos MIME.

Tabela 2 – Alguns tipos MIME

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 format JPEG. application/zip- Arquivo compactado.


Fonte: Fielding et al, 1999.


1.2 Requisição

De acordo com Fielding (1999, p. 24), uma mensagem de requisição do cliente é composta pelos seguintes campos: uma linha inicial (Request-Line); linhas de cabeçalhos (Request-header); uma linha em branco obrigatória e um corpo de mensagem opcional. A linha inicial de uma requisição é composta por três partes separadas por espaços: o método (Method), a identificação do URI (Request-URI) e a versão do HTTP (HTTP-Version) utilizado. Segundo Bastos & Ladeira ( BASTOS, Leonara de Oliveira; LADEIRA, Adriane Cristina. Protocolo HTTP. Disponível em: http://www.comp.ufscar.br/~drica/http.html. Acesso em: 10 fev. 2002) Request-URI é um identificador de recurso uniforme (Uniform Resource Identifier) que identifica sobre qual recurso será aplicada a requisição. No protocolo HTTP, o tipo de URI utilizado é chamado de URL (Uniform Resource Locater), no qual é composto pela identificação do protocolo, pelo endereço do computador servidor e pelo documento requisitado (cf. Embratel, 2002).


1.2.1 Métodos

O protocolo HTTP/1.1 possui um conjunto de métodos, definidos na RFC 2616, que são utilizados na requisição de recursos, que são os GET, HEAD, POST, OPTIONS, PUT, DELETE, TRACE, CONNECT. Conforme Bastos & Ladeiras (2001), o método determina o que o servidor deve fazer com o URL fornecido no momento da requisição de um recurso. A seguir, serão detalhados os métodos mais utilizados nas mensagens. O método GET é reconhecido por todos os servidores, sendo utilizado como método padrão para a requisição de recursos por meio do protocolo HTTP. Esse método solicita ao servidor para que encontre e retorne como resposta ao cliente, qualquer dado que estiver identificado pelo URI. A Figura 2a ilustra um exemplo de uma requisição utilizando o método GET. A utilização do método POST em uma requisição ocorre quando é necessário enviar dados ao servidor para serem processados geralmente por um programa script identificado no Request-URI. Uma requisição por meio desse método sempre requer que as informações submetidas sejam incluídas no corpo da mensagem e formatadas como uma query string, além de conter cabeçalhos adicionais especificando seu tamanho (Content-Lenght) e seu formato (Content-Type). Por isso, esse método oferece uma maior segurança em relação aos dados transferidos, ao contrário do método GET que os dados são anexados a URL, ficando visíveis ao usuário (cf. 46 HERRMANN, Eric. Aprenda em 1 semana programação CGI em Perl 5. Rio de Janeiro: Campus, 1997). A Figura 2b ilustra a utilização deste método. a) GET /index.html HTTP/1.0 Accept: text/html If-modified-since: Sat, 29 Oct 1999 19:43:31 GMT b) POST /index.html HTTP/1.0 Accept: text/html If-modified-since: Sat, 29 Oct 1999 19:43:31 GMT Content-Type: application/x-www-form-urlencoded Content-Length: 30 Nome=NamePessoa&Idade=99&Curso=Computacao Figura 2 – Exemplos de utilização dos métodos GET e POST


1.3 Resposta

Para Fielding et al (1999, p. 26), uma mensagem de resposta do servidor é composta pelos seguintes campos: uma linha inicial (Status-Line); linhas de cabeçalhos (Responseheader); uma linha em branco obrigatória e um corpo de mensagem opcional. A linha inicial de uma resposta, chamada de linha de status, também possui três partes separadas por espaços: a versão do protocolo HTTP (HTTP-Version), um código de status (Status-Code) da resposta, que fornece o resultado da requisição, e uma frase (Reason-Phrase) de justificativa que descreve o código do status.


1.3.1 Códigos de retorno

O Status-Line de uma resposta HTTP indica ao cliente se sua requisição foi bem sucedida ou não (cf. Herrman, 1997, p. 53). Esta situação é fornecida através de um código de retorno (Status-Code) e uma frase explicativa (Reason-Phrase). De acordo com Fielding et al (1999, p. 37), o código de status é formado por três dígitos e o primeiro dígito representa a classe que pertence classificada em cinco tipos: • 1xx: Informational (Informação) – utilizada para enviar informações para o cliente deque sua requisição foi recebida e está sendo processada; • 2xx: Success (Sucesso) – indica que a requisição do cliente foi bem sucedida; • 3xx: Redirection (Redirecionamento) – informa a ação adicional que deve ser tomada para completar a requisição; • 4xx: Client Error (Erro no cliente) – avisa que o cliente fez uma requisição que não pode ser atendida; • 5xx: Server Error (Erro no servidor) – ocorreu um erro no servidor ao cumprir uma requisição válida.

O protocolo HTTP define somente alguns códigos em cada classe descritos na RFC 2616, mas cada servidor pode definir seus próprios códigos.

1.4 Conexões

Segundo Hirata ( p5,. HIRATA, Renato. Desempenho em Servidores Web de Grande Porte. 1999. Proposta de Tese de Mestrado – Universidade Estadual de Campinas, São Paulo, 1999. Disponível em: http://www.ic.unicamp.br/~ra951407/PROPOSTA.DOC. Acesso em: 25 fev. 2002), o HTTP/1.0 é um protocolo stateless. Isto significa que as conexões entre um cliente e um servidor são encerradas após o envio de cada requisição ou resposta. Cada vez que uma conexão é estabelecida ou encerrada, é consumida uma grande quantidade de tempo da CPU, de largura de banda e de memória. Na maioria das vezes, para se obter o resultado esperado, é necessário realizar mais de uma solicitação de recursos através de várias conexões. Por exemplo, no caso de uma página Web, que consiste de diversos arquivos (.html, .gif, .css, etc) é preciso que sejam feitas várias requisições para compor a página. O ideal seria que apenas uma conexão fosse utilizada para os pedidos e as respostas HTTP, diminuindo, assim, o overhead ocasionado pelas conexões. Este tipo de conexão é chamado de conexão persistente (Persistent Connection). A Figura 13 ilustra uma comparação entre a conexão stateless e a conexão persistente. Arquivo:Httpfoto.jpg

A conexão persistente, implementada como conexão padrão no protocolo HTTP/1.1, possibilita que uma conexão seja estabelecida para enviar várias requisições em seqüência sem a necessidade de esperar por cada resposta, no qual serão recebidas na mesma ordem em que as solicitações foram enviadas, este processo é chamado de pipelining (cf. Fielding et al, 1999, p. 30). Se uma requisição incluir o cabeçalho Connection: close, a conexão será encerrada após o envio da resposta correspondente. Utiliza-se este cabeçalho quando não há suporte a conexões persistentes, quando for a última requisição a ser enviada nesta conexão, ou ainda, sempre que quiser encerrar a conexão mesmo que nem todas as requisições tenham sido completadas. Além disso, o servidor pode fechar uma conexão se estiver ociosa por um determinado período de tempo.

1.5 Considerações finais

De acordo com o que foi apresentado, o HTTP é um protocolo de uso genérico que pode ser usado para diversos tipos de tarefas, através da extensão dos seus métodos de requisição e resposta, códigos de erros e cabeçalhos. Desta forma, o protocolo HTTP é uma alternativa para a comunicação de aplicações distribuídas em applets Java na Internet, devido à utilização deste protocolo como forma de comunicação padrão entre servidores Web. Além disso, permite que estas aplicações sejam executadas sem a necessidade de utilizar uma arquitetura proprietária.

Os principais comandos do HTTP

Os principais comandos são:Get,Post,Trace,Option e Help. A sua sintaxe(estrutura)é: <comando> <documento> HTTP/1.x.Para abrir um canal de comunicação com o serviço HTTP, podemos usar o telnet.Uma diferença entre usar o telnet para estabelecer a comunicação e usar o navegador é que o navegador envia mais parâmetros nos comandos,para detalhar o tipo de conteúdo aceito,as configurações,etc.

Esquema de comunicação HTTP

Pedido basico de http cliente - servidor:

GET <ficheiro> HTTP/1.1
Host: <ip>
User-Agent: <Agente1>
Connection: <tipo2>

  • 1 Agente que faz a ligação ao servidor, normalmente um browser
  • 2 Indica como o servidor deve proceder com a conexão, é comumente utilizado para requisições persistentes.

Bibliografia


Ícone de esboço Este sobre informática é um esboço. Você pode ajudar a Wikipédia expandindo-o.

ar:HTTP ca:Protocol de transferència d'hipertext cs:HTTP da:HTTP de:Hypertext Transfer Protocol en:HyperText Transfer Protocol eo:Hiperteksto-Transiga Protokolo es:Hypertext Transfer Protocol et:Hypertext Transfer Protocol fi:HTTP fr:Hypertext Transfer Protocol he:HTTP hu:HTTP id:HTTP it:HTTP ja:Hypertext Transfer Protocol ko:HTTP lb:Hypertext Transfer Protocol lt:HTTP lv:HTTP nl:Hypertext Transfer Protocol nn:Hypertext Transfer Protocol no:HTTP pl:HTTP ro:HTTP ru:HTTP sk:Hypertext Transfer Protocol sl:HTTP sv:HTTP th:HyperText Transfer Protocol tl:HTTP tr:HTTP zh:超文本传输协议

talvez você goste