Diretório de artigos
Prefácio
Pelo estudo anterior, já sabemos que um acordo é na verdade um acordo, que exige que ambas as partes compreendam a mensagem da outra parte. O protocolo na camada de aplicação não pertence ao sistema operacional. Ele é personalizado por nós mesmos. Contanto que ambas as partes possam entendê-lo, vamos aprender sobre o protocolo HTTP hoje.
URL
O que é url:
urlencode e urldecode
O URL não foi projetado apenas para http. Espera-se que o URL seja usado por todos os protocolos de rede. No entanto, o protocolo estipula que caracteres não-ASCII não podem aparecer, portanto, caracteres não-ASCII devem ser escapados. Por exemplo, na imagem, /?: e assim por diante foram tratados como caracteres especiais. Se quiser representar esses caracteres separadamente, você deve primeiro escapar dos caracteres especiais.
Regras:
Converta os caracteres que precisam ser transcodificados em hexadecimal.
Faça um dígito para cada dois dígitos, adicione% na frente e codifique como% XY
Por exemplo:
seu hexadecimal é 0xE4BDA0 (utf-8)
%E4%BD%A0
Formato HTTP
-
perguntar
-
Primeira linha: método + url + versão
-
Cabeçalho: atributos solicitados, pares de valores-chave separados por dois pontos; cada grupo é separado por \n; uma linha em branco indica o final
- Conexão: conexões longas e curtas. Conexões longas permitem o recebimento de múltiplas solicitações; conexões curtas são desconectadas após a resposta.
-
Corpo: A linha em branco é seguida pelo conteúdo do corpo. O Corpo pode ser definido como uma string vazia; se o corpo existir, haverá um Content-Length no Cabeçalho para identificar o comprimento do corpo.
-
resposta
- Primeira linha: número da versão + código de status + explicação do código de status
- Cabeçalho: o atributo da resposta, que também é um par chave-valor. As regras são as mesmas acima.
- Corpo: Abaixo da linha em branco está o corpo. Se o servidor retornar uma interface, a página html estará no corpo.
método
GET e POST são os mais comuns, entre os quais GET obtém recursos e POST transmite entidades de recursos.
<form action = "a/c.exe",method="GET">
姓名:<input type="text" name="myname" value="输入姓名"><br/>
密码:<input type="text" name="mypass" value=""><br/>
<input type="submit" value="submit"><br/>
</form>
A diferença entre os métodos GET e POST:
A diferença entre GET e POST:
- Dados: GET coloca os dados na URL e POST os coloca diretamente no texto.
- Tamanho: GET é limitado pelo tamanho da URL e não pode ser muito longo. POST pode ser maior.
- Segurança: GET é exposto diretamente na URL e não é adequado para transmissão de dados confidenciais, enquanto POST é relativamente mais seguro.
Código de status HTTP
- 1XX: Código de status da informação, a solicitação recebida está sendo processada
- 2XX: Código de status de sucesso, a solicitação é processada normalmente.
- 3XX: Código de status de redirecionamento: ação adicional necessária para concluir a solicitação
- 4XX: Código de erro do cliente: O servidor não pode processar a solicitação
- 5XX: Código de erro do servidor: O servidor encontrou um erro ao processar a solicitação.
Redirecionar
Redirecionamento temporário: Não altera nenhuma informação de endereço do navegador.
Redirecionamento permanente: Um redirecionamento permanente alterará os favoritos locais do navegador.
Redirecionar para a página inicial do qq:
std::string response;
response += "HTTP/1.0 302 Found" + SEP;
response += "Location: https://www.qq.com/" + SEP;
response += SEP;
Os principais cenários de uso do redirecionamento temporário incluem: manutenção de sites antigos, saltos de publicidade ativa, etc. O
redirecionamento permanente não é comum em nosso uso. Os mecanismos de pesquisa precisam rastrear periodicamente os dados de toda a rede. Se um site redirecionado permanentemente for rastreado, ele modificará o salto correspondente diretamente.
Cabeçalhos comuns HTTP
- Tipo de conteúdo: tipo de solicitação
- Comprimento do conteúdo: comprimento do corpo.
- Host: O cliente informa ao servidor em qual host e porta o recurso solicitado está.
- User-Agent: declara o sistema operacional e a versão do navegador do usuário (informações forjadas pelo anti-crawler)
- referer: de qual página a página atual é redirecionada
- location: usado com 3 para escrever um código de status de redirecionamento
- Cookie: armazena uma pequena quantidade de informações sobre o cliente para implementar funções de sessão
Persistência de sessão
O próprio HTTP não tem estado - os acessos não podem ser lembrados. http não está diretamente envolvido, mas o usuário precisa manter a sessão, portanto, se o usuário está online deve ser registrado.
Cookies são uma tecnologia usada para armazenar em cache as informações do nosso usuário. O navegador trará automaticamente as informações dos cookies que salvamos e as enviará para o site correspondente. No entanto, fazer isso é arriscado: expomos diretamente as informações do usuário ao mundo exterior. Se isso as informações do cookie forem obtidas por um intermediário, não apenas a conta do site será roubada, mas também será extremamente provável que as informações pessoais sejam roubadas.
A prática comum atual é que o servidor mantenha suas informações de maneira uniforme. Depois de fazer login e verificar, o servidor formará um objeto de sessão e retornará o sessionid (exclusivo) ao nosso cliente. O arquivo cookie do cliente armazena apenas esse sessionid. Neste Dessa forma, mesmo que você seja interceptado no meio, você não precisa se preocupar com o vazamento de informações do usuário.
Ao mesmo tempo, o servidor também fará alguns trabalhos de identificação, como detectar se o seu IP está anormal, se os dados estão anormais, etc... Com base nessas anormalidades, sua sessão será inválida.
Conclusão
Apesar disso, o protocolo HTTP ainda é inseguro. Embora a solicitação de postagem evite o cache do navegador e não possa ser compartilhada e marcada diretamente, cookies e sessões também tentam garantir a segurança das informações do usuário, mas ainda existem muitos problemas de segurança: a solicitação de postagem é capturado pela rede, ao efetuar login, foi interceptado por um intermediário ao efetuar login. Para resolver esses problemas de segurança, precisamos introduzir um novo protocolo: HTTPS.