HTTP é a sigla em língua inglesa de HyperText Transfer Protocol (Protocolo de Transferência de Hipertexto), um protocolo da camada de Aplicação do modelo OSI utilizado para transferência de dados na rede mundial de computadores, a World Wide Web
HTTP é a sigla em língua inglesa de HyperText Transfer Protocol (Protocolo de Transferência de Hipertexto), um protocolo da camada de Aplicação do modelo OSI utilizado para transferência de dados na rede mundial de computadores, a World Wide Web. Também transfere dados de hiper-mídia (imagens, sons e textos).
Normalmente, este protocolo utiliza o porta 80 e é usado para a comunicação de "sites" (sítios), comunicando na linguagem HTML (Hipertext Markup Language, ou Linguagem de Marcação de Hipertexto). Contudo, para haver comunicação com o servidor do site é necessário utilizar comandos adequados, que não estão em linguagem HTML.
Para acedermos a outro documento a partir de uma palavra presente no documento actual podemos utilizar os chamados links/ (ligações) ou âncoras. Estes documentos encontram-se num "site" (sítio) com um endereço de página da Internet - e para entrarmos neles devemos digitar o respectivo endereço, denominado URI (Universal Resource Indentifier ou Identificador Universal de Recurso), que não deve ser confundir com URL (Universal Resource Locator ou Localizador Universal de Recurso), um tipo de URI que pode ser directamente localizado.
Funcionamento do protocolo HTTP
Um sistema de comunicação em rede possui diversos protocolos que trabalham em conjunto 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, Protocolo de Internet) tornem possível a conexão 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-lhe uma requisição, contendo a URI, 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 o envio da resposta pelo servidor, 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, opcional em determinados casos. Nesta seção serão apresentados os campos que compõem uma mensagem mais detalhadamente; ou seja, o HTTP apresenta o sítio ou local onde está a página da Internet.
Cabeçalho da mensagem
O cabeçalho da mensagem (header) é utilizado para transmitir informações adicionais entre o cliente e o servidor. O cabeçalho é 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.
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 ainda 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 [2]
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
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.) Request-URI é um identificador uniforme de recurso (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), o qual é composto pela identificação do protocolo, pelo endereço do computador servidor e pelo documento requisitado (cf. Embratel, 2002).
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(conexão não-persistente). 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 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). Pode também dar-se o caso de ser estabelecida uma conexão sem pipelining, em que o cliente só faz nova requisição quando o servidor lhe envia a resposta, ou seja, o servidor fica inactivo até o objecto (.html, .gif, .css, etc) atingir o seu destino no cliente. 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.
Outros protocolos
Existem outros tipos de protocolos como o FTP (File Tranfer Protocol, ou Protocolo de Transferência de Arquivos), usado para envio de arquivos do computador para um servidor na Web, o SMTP (Simple Mail Transfer Protocol, ou Protocolo de Transferência de Correio Simples), protocolo usado para correio eletrônico (e-mail), entre outros protocolos.
Métodos
O protocolo HTTP define oito métodos que indicam a ação a ser realizada no recurso especificado. 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.
- GET: É o método mais comum: solicita algum recurso como um arquivo ou um script CGI (qualquer dado que estiver identificado pelo URI) por meio do protocolo HTTP. O método GET é reconhecido por todos os servidores.
Um sistema de comunicação em rede possui diversos protocolos que trabalham em conjunto 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, Protocolo de Internet) tornem possível a conexão 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-lhe uma requisição, contendo a URI, 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 o envio da resposta pelo servidor, 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, opcional em determinados casos. Nesta seção serão apresentados os campos que compõem uma mensagem mais detalhadamente; ou seja, o HTTP apresenta o sítio ou local onde está a página da Internet.
Cabeçalho da mensagem
O cabeçalho da mensagem (header) é utilizado para transmitir informações adicionais entre o cliente e o servidor. O cabeçalho é 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.
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 ainda 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 [2]
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
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.) Request-URI é um identificador uniforme de recurso (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), o qual é composto pela identificação do protocolo, pelo endereço do computador servidor e pelo documento requisitado (cf. Embratel, 2002).
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(conexão não-persistente). 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 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). Pode também dar-se o caso de ser estabelecida uma conexão sem pipelining, em que o cliente só faz nova requisição quando o servidor lhe envia a resposta, ou seja, o servidor fica inactivo até o objecto (.html, .gif, .css, etc) atingir o seu destino no cliente. 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.
Outros protocolos
Existem outros tipos de protocolos como o FTP (File Tranfer Protocol, ou Protocolo de Transferência de Arquivos), usado para envio de arquivos do computador para um servidor na Web, o SMTP (Simple Mail Transfer Protocol, ou Protocolo de Transferência de Correio Simples), protocolo usado para correio eletrônico (e-mail), entre outros protocolos.
Métodos
O protocolo HTTP define oito métodos que indicam a ação a ser realizada no recurso especificado. 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.
- GET: É o método mais comum: solicita algum recurso como um arquivo ou um script CGI (qualquer dado que estiver identificado pelo URI) por meio do protocolo HTTP. O método GET é reconhecido por todos os servidores.
Nenhum comentário:
Postar um comentário