Sobre o protocolo HTTP

Introdução ao HTTP

O protocolo HTTP é uma abreviação de Hyper Text Transfer Protocol (Protocolo de transferência de hipertexto) e é um protocolo de transferência usado para transferir hipertexto de um servidor da World Wide Web (WWW: World Wide Web) para um navegador local.

HTTP é um protocolo de comunicação TCP / IP para transferir dados (arquivos HTML, arquivos de imagem, resultados de consultas etc.).

O HTTP é um protocolo orientado a objetos pertencente à camada de aplicação e, devido ao seu método simples e rápido, é adequado para sistemas de informação hipermídia distribuídos. Foi proposto em 1990. Após vários anos de uso e desenvolvimento, foi continuamente aprimorado e expandido. Atualmente, a sexta edição do HTTP / 1.0 é usada na WWW. A padronização do HTTP / 1.1 está em andamento e a proposta do HTTP-NG (Next Generation of HTTP) foi apresentada.

O protocolo HTTP funciona na arquitetura cliente-servidor. Como um cliente HTTP, o navegador envia todas as solicitações ao servidor HTTP, ou seja, o servidor WEB, através da URL. Após receber a solicitação, o servidor da Web envia uma mensagem de resposta ao cliente.


http request-response model.jpg

Principais características

1. Simples e rápido: quando um cliente solicita um serviço de um servidor, somente o método e o caminho da solicitação precisam ser transmitidos. Os métodos de solicitação comuns incluem GET, HEAD e POST. Cada método especifica um tipo diferente de contato cliente-servidor. Como o protocolo HTTP é simples, o tamanho do programa do servidor HTTP é pequeno, portanto a velocidade da comunicação é rápida.

2. Flexível: HTTP permite a transmissão de qualquer tipo de objeto de dados. O tipo que está sendo transmitido é marcado por Tipo de conteúdo.

3. Sem conexão: o significado de sem conexão é limitar o processamento de apenas uma solicitação por conexão. Depois que o servidor processa a solicitação do cliente e recebe a resposta do cliente, ele se desconecta. O uso desse método pode economizar tempo de transmissão.

4. Sem estado: o protocolo HTTP é um protocolo sem estado. Sem estado significa que o protocolo não possui memória para processamento de transações. A falta de estado significa que, se o processamento subsequente exigir as informações anteriores, ele deverá ser retransmitido, o que pode resultar em um aumento na quantidade de dados transferidos por conexão. Por outro lado, quando o servidor não precisa de informações anteriores, sua resposta é mais rápida.
5. Suporte modos B / S e C / S.

URL HTTP

O HTTP usa URI (Uniform Resource Identifiers) para transmitir dados e estabelecer conexões. Um URL é um tipo especial de URI que contém informações suficientes para encontrar um recurso

URL, o nome completo é UniformResourceLocator, o nome em chinês é o localizador uniforme de recursos, é o endereço usado para identificar um recurso na Internet. Tome o seguinte URL como exemplo para apresentar os componentes de um URL comum:

http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name

Como pode ser visto na URL acima, uma URL completa inclui as seguintes partes:
1. Parte do protocolo: a parte do protocolo da URL é "http:", o que significa que a página da Web usa o protocolo HTTP. Vários protocolos podem ser usados ​​na Internet, como HTTP, FTP, etc. Neste exemplo, o protocolo HTTP é usado. "//" depois de "HTTP" é o separador

2. Parte do nome de domínio: a parte do nome de domínio da URL é "www.aspxfans.com". Em uma URL, você também pode usar o endereço IP como um nome de domínio

3. Parte da porta: a porta que segue o nome do domínio é a porta.Use ":" como o delimitador entre o nome do domínio e a porta. A porta não é uma parte necessária de um URL; se você omitir a parte da porta, a porta padrão será usada

4. Parte do diretório virtual: do primeiro "/" após o nome do domínio até o último "/", é a parte do diretório virtual. Diretórios virtuais não são uma parte necessária de uma URL. O diretório virtual neste exemplo é "/ news /"

5. Parte do nome do arquivo: do último "/" após o nome do domínio para "?", É a parte do nome do arquivo. Se não houver "?", Inicia do último "/" após o nome do domínio para "#" , É a parte do arquivo. Se não houver "?" E "#", do último "/" após o nome do domínio até o final, é a parte do nome do arquivo. O nome do arquivo neste exemplo é "index.asp". A parte do nome do arquivo não é uma parte necessária de uma URL. Se essa parte for omitida, o nome do arquivo padrão será usado.

6. Peça de ancoragem: de "#" até o fim, todas são partes de ancoragem. A parte da âncora neste exemplo é "nome". A parte da âncora não faz parte de um URL

7. Parte do parâmetro: a parte de "?" Para "#" é a parte do parâmetro, também denominada parte de pesquisa e parte de consulta. A parte do parâmetro neste exemplo é "boardID = 5 & ID = 24618 & page = 1". Os parâmetros podem permitir vários parâmetros e usar "&" como delimitador entre os parâmetros.

(Original: http://blog.csdn.net/ergouge/article/details/8185219  )

A diferença entre URI e URL

O URI é um identificador uniforme de recursos, um identificador uniforme de recursos usado para identificar exclusivamente um recurso.

Todo recurso disponível na Web, como documentos HTML, imagens, videoclipes, programas etc., é um URI a ser localizado,
geralmente composto de três partes:
mechanism Mecanismo de nomeação para acessar recursos
name Nome do host para armazenamento de recursos
③ Nome dos próprios recursos , Representado pelo caminho, com ênfase em recursos.

O URL é um localizador uniforme de recursos, é um URI específico, ou seja, o URL pode ser usado para identificar um recurso e também indica como localizá-lo.

O URL é uma cadeia de caracteres usada para descrever recursos de informação na Internet e é usada principalmente em vários programas clientes e servidores da WWW, especialmente o famoso Mosaic.
O uso da URL pode descrever uma variedade de recursos de informações em um formato unificado, incluindo arquivos, endereços e diretórios de servidor. A URL geralmente consiste em três partes:
Protocolo (ou chamado modo de serviço)
Endereço IP do host (às vezes também incluindo o número da porta) onde o recurso está armazenado Endereço específico do
recurso de host. Como diretório e nome de arquivo

URN, nome uniforme do recurso, nome uniforme do recurso, é identificar recursos por nome, como mailto: [email protected].

URI é um conceito abstrato de alto nível que define um identificador uniforme de recursos, enquanto URL e URN são identificadores de recursos específicos. URL e URN são um tipo de URI. Em termos gerais, todo URL é um URI, mas nem todo URI é um URL. Isso ocorre porque o URI também inclui uma subclasse, URN (Nome Uniforme do Recurso), que nomeia o recurso, mas não especifica como localizá-lo. Os mailto, notícias e URIs de bilhões de itens acima são todos exemplos de URNs.

No URI do Java, uma instância do URI pode representar absoluto ou relativo, desde que esteja em conformidade com as regras gramaticais do URI. A classe URL não apenas está em conformidade com a semântica, mas também contém informações para localizar o recurso, portanto, não pode ser relativo.
Na biblioteca de classes Java, a classe URI não contém nenhum método para acessar recursos, sua única função é analisar.
Pelo contrário, a classe de URL pode abrir um fluxo para o recurso.

Mensagem de solicitação HTTP

A mensagem de solicitação de que o cliente envia uma solicitação de HTTP ao servidor inclui o seguinte formato:

A linha de solicitação (linha de solicitação), cabeçalho da solicitação (cabeçalho), linha em branco e dados da solicitação são compostos por quatro partes.




Mensagem de solicitação Http structure.png
  • A linha de solicitação começa com um símbolo de método, separado por um espaço, seguido pelo URI e pela versão do protocolo solicitados.
Obtenha um exemplo de solicitação, usando Charles para obter a solicitação:
GET /562f25980001b1b106000338.jpg HTTP/1.1
Host    img.mukewang.com
User-Agent    Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36 Accept image/webp,image/*,*/*;q=0.8 Referer http://www.imooc.com/ Accept-Encoding gzip, deflate, sdch Accept-Language zh-CN,zh;q=0.8
A primeira parte: a linha de solicitação, usada para indicar o tipo de solicitação, o recurso a ser acessado e a versão HTTP usada.

GET indica que o tipo de solicitação é GET, [/562f25980001b1b106000338.jpg] é o recurso a ser acessado e a última parte da linha indica que a versão HTTP 1.1 é usada.

A segunda parte: o cabeçalho da solicitação, a parte imediatamente após a linha de solicitação (ou seja, a primeira linha) é usada para explicar as informações adicionais a serem usadas pelo servidor

A partir da segunda linha, o cabeçalho da solicitação, o HOST indicará o destino da solicitação.Os scripts do agente do usuário, do servidor e do cliente podem acessá-lo, é uma base importante para a lógica de detecção do tipo de navegador. Essas informações são determinadas pelo seu navegador Definir e enviar automaticamente cada solicitação, etc.

A terceira parte: linha em branco, a linha em branco após o cabeçalho da solicitação é necessária

Mesmo que os dados da solicitação na quarta parte estejam vazios, deve haver uma linha em branco.

Parte 4: Os dados da solicitação também são chamados de assunto e quaisquer outros dados podem ser adicionados.

Os dados da solicitação para este exemplo estão vazios.

Exemplo de solicitação POST, usando Charles para capturar a solicitação:
POST / HTTP1.1
Host:www.wrox.com
User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022) Content-Type:application/x-www-form-urlencoded Content-Length:40 Connection: Keep-Alive name=Professional%20Ajax&publisher=Wiley

A primeira parte: a linha de solicitação, a primeira linha é a solicitação de postagem e a versão http1.1.
A segunda parte: cabeçalho da solicitação, a segunda linha para a sexta linha.
A terceira parte: linha em branco, linha em branco da sétima linha.
Parte IV: Solicitar dados, linha oito.

Mensagem de resposta HTTP Response

Geralmente, o servidor retornará uma mensagem de resposta HTTP após receber e processar a solicitação do cliente.

A resposta HTTP também consiste em quatro partes, a saber: linha de status, cabeçalho da mensagem, linha em branco e corpo da resposta.

 


mensagem de resposta http format.jpg

Exemplos

HTTP/1.1 200 OK
Date: Fri, 22 May 2009 06:07:21 GMT
Content-Type: text/html; charset=UTF-8

<html>
      <head></head> <body> <!--body goes here--> </body> </html>
A primeira parte: a linha de status, que consiste no número da versão do protocolo HTTP, código de status e mensagem de status.

A primeira linha é a linha de status, (HTTP / 1.1) indica que a versão HTTP é a versão 1.1, o código de status é 200 e a mensagem de status é (ok)

A segunda parte: o cabeçalho da mensagem, usado para explicar algumas informações adicionais a serem usadas pelo cliente

As segunda e terceira linhas são o cabeçalho da mensagem,
Data: a data e hora em que a resposta foi gerada; Tipo de Conteúdo: HTML (text / html) que especifica o tipo MIME, e o tipo de codificação é UTF-8

Parte 3: Linhas em branco, linhas em branco após o cabeçalho da mensagem são necessárias
A quarta parte: o texto do corpo da resposta, o servidor retorna ao cliente.

A parte html após a linha em branco é o corpo da resposta.

Código de status HTTP

O código de status consiste em três dígitos.O primeiro dígito define a categoria de resposta, dividida em cinco categorias:

1xx: mensagem de indicação - indica que a solicitação foi recebida, continue processando
2xx: Success - indica que a solicitação foi recebida, entendida e aceita com êxito
3xx: Redirecionamento - outras operações devem ser executadas para concluir a solicitação
4xx: Erro do cliente - a solicitação possui um erro de sintaxe ou a solicitação não pode ser atendida
5xx: Erro no lado do servidor - o servidor falhou ao atender uma solicitação legítima

Códigos de status comuns:

200 OK                        //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解 401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 403 Forbidden //服务器收到请求,但是拒绝提供服务 404 Not Found //请求资源不存在,eg:输入了错误的URL 500 Internal Server Error //服务器发生不可预期的错误 503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

Mais códigos de status http://www.runoob.com/http/http-status-codes.html

Método de solicitação HTTP

De acordo com o padrão HTTP, as solicitações HTTP podem usar vários métodos de solicitação.
O HTTP 1.0 define três métodos de solicitação: métodos GET, POST e HEAD.
O HTTP1.1 inclui cinco novos métodos de solicitação: métodos OPTIONS, PUT, DELETE, TRACE e CONNECT.

GET     请求指定的页面信息,并返回实体主体。
HEAD     类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
POST     向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
PUT     从客户端向服务器传送的数据取代指定的文档的内容。
DELETE      请求服务器删除指定的页面。
CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 OPTIONS 允许客户端查看服务器的性能。 TRACE 回显服务器收到的请求,主要用于测试或诊断。

Como o HTTP funciona

O protocolo HTTP define como um cliente da Web solicita páginas da Web de um servidor da Web e como o servidor transmite páginas da Web para o cliente. O protocolo HTTP usa um modelo de solicitação / resposta. O cliente envia uma mensagem de solicitação ao servidor e contém o método, URL, versão do protocolo, cabeçalho da solicitação e dados da solicitação. O servidor responde com uma linha de status.O conteúdo da resposta inclui a versão do protocolo, códigos de sucesso ou erro, informações do servidor, cabeçalhos de resposta e dados de resposta.

A seguir estão as etapas da solicitação / resposta HTTP:

1. O cliente se conecta ao servidor da web

Um cliente HTTP, geralmente um navegador, estabelece uma conexão de soquete TCP com a porta HTTP do servidor da Web (80 por padrão). Por exemplo, http://www.oakcms.cn.

2. Envie uma solicitação HTTP

Por meio do soquete TCP, o cliente envia uma mensagem de solicitação de texto para o servidor Web. Uma mensagem de solicitação consiste em uma linha de solicitação, um cabeçalho de solicitação, uma linha em branco e dados de solicitação.

3. O servidor aceita a solicitação e retorna uma resposta HTTP

O servidor da Web analisa a solicitação e localiza o recurso solicitado. O servidor grava uma cópia do recurso no soquete TCP, que é lido pelo cliente. Uma resposta consiste em 4 partes: linha de status, cabeçalho da resposta, linha em branco e dados da resposta.

4. Libere a conexão TCP

Se o modo de conexão estiver fechado, o servidor fechará ativamente a conexão TCP e o cliente passivamente fechará a conexão para liberar a conexão TCP ; se o modo de conexão permanecer ativo, a conexão permanecerá por um período de tempo e poderá continuar recebendo solicitações durante esse período;

5. O navegador do cliente analisa o conteúdo HTML

O navegador do cliente analisa primeiro a linha de status e analisa o código de status indicando se a solicitação foi bem-sucedida. Cada cabeçalho de resposta é analisado e o cabeçalho de resposta informa o seguinte sobre alguns bytes de documento HTML e o conjunto de caracteres do documento. O navegador do cliente lê os dados de resposta em HTML, os formata de acordo com a sintaxe do HTML e os exibe na janela do navegador.

Por exemplo: digite o URL na barra de endereços do navegador e pressione Enter para passar pelo seguinte processo:

1. O navegador solicita ao servidor DNS que resolva o endereço IP correspondente ao nome de domínio no URL;

2. Após resolver o endereço IP, estabeleça uma conexão TCP com o servidor com base no endereço IP e na porta padrão 80 ;

3. O navegador envia uma solicitação HTTP para ler o arquivo (o arquivo correspondente ao nome de domínio na URL) e a mensagem de solicitação é  enviada ao servidor como dados da terceira mensagem do handshake de três vias TCP ;

4. O servidor responde à solicitação do navegador e envia o texto html correspondente ao navegador;

5. Libere a  conexão TCP ;

6. O navegador exibe o texto html e o conteúdo;   

A diferença entre solicitações GET e POST

Solicitação GET
GET /books/?sex=man&name=Professional HTTP/1.1
Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6) Gecko/20050225 Firefox/1.0.1 Connection: Keep-Alive

Observe que a última linha é uma linha em branco

Pedido POST
POST / HTTP/1.1
Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6) Gecko/20050225 Firefox/1.0.1 Content-Type: application/x-www-form-urlencoded Content-Length: 40 Connection: Keep-Alive name=Professional%20Ajax&publisher=Wiley

1. Submetidos pelo GET, os dados solicitados serão anexados ao URL (ou seja, os dados são colocados no cabeçalho do protocolo HTTP), use? Para dividir o URL e transmitir os dados, e vários parâmetros estão conectados com &; por exemplo: login.action? Name = hyddd & password = idontknow & check =% E4% BD% A0% E5% A5% BD. Se os dados forem letras / números em inglês, envie-os como estão, se for um espaço, converta-os para +, se forem caracteres chineses / outros, em seguida, criptografe diretamente a string com BASE64, resultando em:% E4% BD% A0% E5% A5% BD, onde XX em% XX é a representação ASCII do símbolo em hexadecimal.

Envio do POST: Coloque os dados enviados no corpo do pacote HTTP. A fonte vermelha no exemplo acima indica os dados de transmissão reais

Portanto, os dados enviados por GET serão exibidos na barra de endereços e a barra de endereços não será alterada após o envio do POST

2. O tamanho dos dados transmitidos: Antes de tudo, afirma-se que o protocolo HTTP não limita o tamanho dos dados transmitidos e a especificação do protocolo HTTP não limita o comprimento da URL.

As principais limitações no desenvolvimento real são:

GET : Certos navegadores e servidores têm restrições no comprimento dos URLs. Por exemplo, o IE tem um limite de 2083 bytes (2K + 35). Para outros navegadores, como Netscape, FireFox, etc., não há limite de tamanho teórico, e esse limite depende do suporte do sistema operacional.

Portanto, para envio GET, os dados de transmissão serão limitados pelo comprimento do URL.

POST : Como o valor não é passado pela URL, os dados não são teoricamente limitados. Mas, de fato, cada servidor WEB estipulará o limite para o tamanho dos dados pós-envio.O Apache e o IIS6 têm suas próprias configurações.

3. Segurança

A segurança do POST é maior que a do GET. Por exemplo: envie dados via GET, o nome de usuário e a senha aparecerão em texto sem formatação no URL, porque (1) a página de login pode ser armazenada em cache pelo navegador; (2) outros visualizam o histórico do navegador e outros podem obter seu Além disso, conta e senha, usando GET para enviar dados, também podem causar ataques de falsificação de solicitação entre sites

4. Os protocolos HTTP get, post e soap são executados em http

(1) get: O parâmetro request é uma sequência de pares de chave / valor (string de consulta) anexada ao URL. O comprimento da
string de consulta é limitado pelo navegador e servidor da web (por exemplo, o IE suporta até 2048 caracteres) Não é adequado para transmitir grandes conjuntos de dados ao mesmo tempo, é muito inseguro

(2) post: os parâmetros de solicitação são transmitidos em uma parte diferente do cabeçalho http (denominado corpo da entidade) .Esta parte é usada para transmitir informações de formulário, portanto o tipo de conteúdo deve ser definido como: application / x-www-form-urlencoded . O Post foi projetado para oferecer suporte a campos do usuário em formulários da Web, e seus parâmetros também são transmitidos como pares de chave / valor.
Mas: ele não suporta tipos de dados complexos, porque o post não define a semântica e as regras da estrutura de dados de transmissão.

(3) soap: é uma versão especial do http post, seguindo um formato de mensagem xml especial
Tipo de conteúdo definido como: text / xml Qualquer dado pode ser xmlized.

O protocolo Http define muitos métodos para interagir com o servidor, dos quais os mais básicos são quatro tipos: GET, POST, PUT e DELETE. Um endereço URL é usado para descrever um recurso na rede e HTTP GET, POST, PUT, DELETE corresponde às quatro operações de verificação, modificação, adição e exclusão deste recurso. Os mais comuns são GET e POST. GET geralmente é usado para obter / consultar informações de recursos, enquanto POST geralmente é usado para atualizar informações de recursos.

Vamos ver a diferença entre GET e POST

    1. Os dados enviados por GET serão colocados após a URL, e os dados de URL e transmissão serão separados por ?, E os parâmetros serão conectados por &, como EditPosts.aspx? Name = test1 & id = 123456. O método POST é colocar os dados enviados no corpo do pacote HTTP .

    2. O tamanho dos dados enviados pelo GET é limitado (porque o navegador tem um limite no comprimento da URL), enquanto os dados enviados pelo método POST não são limitados.

    3. O método GET precisa usar Request.QueryString para obter o valor da variável, enquanto o método POST usa Request.Form para obter o valor da variável.

    4. O envio de dados pelo GET trará problemas de segurança, como uma página de login, ao enviar dados pelo GET, o nome de usuário e a senha aparecerão no URL, se a página puder ser armazenada em cache ou outras pessoas puderem acessar esta máquina, você poderá iniciar a partir de Registre a conta e a senha do usuário.

Publicado 7 artigos originais · 69 elogios · mais de 200.000 visualizações

Acho que você gosta

Origin blog.csdn.net/u014320421/article/details/79641480
Recomendado
Clasificación