Cliente e servidor se comunicam com mensagens que podem ser entendidas por humanos. Estas mensagens são do tipo requisição ou resposta, tendo cada uma delas um formato.
Guia do artigo:
Embora o HTTP seja extensível, ou seja, não há limite para informações contidas nesses mensagens, ele possui um formato padrão.
Requisição
A primeira linha de uma requisição contém três de seus elementos:
GET / HTTP/1.1
GET significa o método HTTP utilizado, algumas vezes também chamado de verbo HTTP. Ele diz que ação o cliente espera que seja executada pelo servidor. Neste caso, que lhe traga algo.
Após GET vemos um que é o caminho para o recurso que estamos buscando no servidor. Por exemplo, se desejamos acessar a página de contatos de um site esse caminho poderia se parecer com algo como /contatos.html.
Logo após o caminho temos a versão do protocolo HTTP utilizada. Nesse caso estamos utilizando a versão 1.1, a mais comum atualmente.
Uma requisição também pode conter cabeçalhos, que representam informações adicionais.
Abaixo, tanto Host quanto User-Agent são exemplos de headers, ou cabeçalhos. Falaremos sobre eles em detalhes adiante:
Host: devmedia.com.br
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36...
Dependendo do método HTTP utilizado a requisição também pode possuir um corpo.
O corpo de uma mensagem nos permite enviar dados para o servidor. Quando usamos o método HTTP GET, por exemplo, a mensagem não necessita de um corpo, pois os dados estão contidos na URL. Já no POST, dizemos que os dados preenchidos em um formulário são passados no corpo da requisição.
Resposta
Uma resposta contém a seguinte estrutura:
HTTP/1.1 200 OK
Cache-Control: no-cache, must-revalidate
Content-Type: text/html; charset=ISO-8859-1
...
A primeira informação que identificamos na linha 1 contém a versão do protocolo HTTP, HTTP/1.1.
Após isso vemos seguido do código de retorno e seu significado. 200 significa que a requisição foi recebida e processada pelo servidor com sucesso.
Temos abaixo desta linha os headers da resposta, a exemplo de Cache-Control e Content-Type.
A resposta também pode conter um corpo contendo o recurso acessado no servidor.