Nesse capítulo, vamos dar uma olhada na próxima linha no output do cURL
:
> Accept: */*
Nessa linha, está especificado um cabeçalho chamado Accept
, que tem o valor */*
. Isso é crucial. Vamos tirar um momento para ententer o porque.
O cabeçalho Accept
é importante em uma requisição HTTP, especialmente quando seu cliente (nesse caso o cURL
) deseja dizer ao servidor quais tipos de mídia ele pode lidar. Esse cabeçalho diz ao servidor quais tipos de mídia ou MIME types o cliente deseja no corpo de resposta. Essencialmente, é como uma maneira do cliente dizer, "Estou aberto para receber conteúdo desses formatos."
Na saída do cURL, a linha > Accept: */*
pode parecer confusa, mas significa algo simples. Vamos analisar:
>
: Esse símbolo mostra que a linha é parte dos cabeçalhos de requisição enviados pelo cliente (você, via cURL) ao servidor.Accept: */*
: Esse é o valor do cabeçalhoAccept
de fato. A parte da*/*
significa "qualquer coisa e todas as coisas." Mostra que o cliente deseja aceitar qualquer tipo de mídia ou MIME type na resposta. Em outras palavras, o servidor tem a liberdade de escolher o formato mais adequado para enviar de volta.
Você pode se perguntar o porque o cliente usaria uma abordagem tão generalista. A razão é flexibilidade. Ao usar */*
, o cliente está mostrando que pode lidar com muitos tipos de conteúdo. Isso pode ser útil quando o cliente não se importa com o formato específico ou quando está okay em relação a múltiplos formatos. O servidor pode então escolher a representação mais apropriada do recurso com base em fatores como, suas capacidades e tipos de conteúdo disponíveis.
Com base no cabeçalho Accept: */*
, o servidor deve criar uma resposta que corresponde a disponibilidade do cliente em aceitar qualquer tipo de mídia. O servidor escolhe o Content-Type mais adequado das opções disponíveis e inclui nos cabeçalhos de resposta.
Você provavelmente já está familiarizado com MIME types se você se envolveu com o desenvolvimento web, particularmente ao incluir arquivos JavaScript em documentos HTML. Por exemplo, a linha a seguir pode lhe parecer familiar:
<script type="text/javascript"></script>
O atributo type
na tag script acima também é um MIME type. Consiste de duas partes - um type
, como text, e um subtype
, como javascript.
MIME type(s) são uma parte crítica de como a web funciona. Significa Multipurpose Internet Mail Extensions (Extensões Multiuso de Correio da Internet), e são geralmente chamadas de "media types". Elas funcionam como etiquetas que são fixadas ao conteúdo que é compartilhado através da internet, para fornecer informações sobre o tipo de dado contido nele. Essas informações permitem que navegadores e aplicações processem e exibam o conteúdo ao usuário de maneira apropriada.
Por exemplo, um documento de texto plano pode ter um MIME type diferente de uma imagem ou um arquivo de áudio. Além disso, mesmo dentro da mesma categoria, como imagens ou arquivos de áudio, podem haver formatos diferentes que exigem MIME types diferentes. Isso porque cada formato de arquivo tem características únicas que precisam ser consideradas para garantir funcionalidade e exibição apropriadas.
Por exemplo, o MIME type image/jpeg
significa que o arquivo contém uma imagem JPEG e o audio/mp3
que o arquivo contém um áudio MP3. Esses rótulos são importantes para que os navegadores possam exibir o conteúdo corretamente, e para que players multimídia possam tocar o tipo correto de arquivo de mídia.
Sem eles, páginas web seriam confusas e arquivos multimídia não funcionariam direito. Para ter certeza que arquivos vão funcionar corretamente, incluímos o rótulo MIME type correto ao realizar o upload para um site ou ao enviá-los por email.
Você pode encontrar uma lista exaustiva de todos os MIME types em Media container formats (file types)
Um MIME type possui duas partes: um "type" e um "subtype". Essas partes são separadas por uma barra ("/") e não possuem espaços. O "type" te diz à qual categoria o dado pertence, como "video" ou "text". O "subtype" te diz exatamente qual tipo de dado é, como "plain" para texto plano ou "html" para código-fonte HTML. Por exemplo:
text/plain
image/png
image/webp
application/javascript
application/json
Cada "type" tem seu próprio conjunto de "subtypes". Todos os MIME types possuem um "type" e um "subtype".
Você pode adicionar mais informações com um "parameter" opcional. Seria algo como "type/subtype;parameter=value". Por exemplo, você pode adicionar o parâmetro "charset" para dizer ao computador qual conjunto de caracteres usar para texto. Se você não especificar um "charset", o padrão é ASCII. Para especificar um arquivo de texto UTF-8, o MIME type "text/plain;charset=UTF-8" seria utilizado.
MIME types podem ser escritos em maiúsculo ou minúsculo, mas em minúsculo é mais comum. Os valores de parâmetro podem ser case-sensitive.
Não vamos mergulhar muito nos MIME types ainda, vamos voltar a eles quando começarmos a trabalhar na nossa biblioteca backend.
A abordagem com o coringa */*
é uma estratégia versátil. É como dizer ao servidor, "Sou flexível. Me mostre o que você tem e vou me adaptar." Isso pode ser útil ao navegar em páginas web que misturam imagens, vídeos, texto e muito mais. Em vez de especificar um conjunto restrito de MIME types, você deixa espaço para surpresas.
Então, quando você vê > Accept: */*
em sua saída cURL ou em qualquer cabeçalho de requisição, lembre-se que é a maneira do seu navegador (ou do cliente) abraçar a diversidade do mercado digital. É uma referência amigável aos MIME types, indicando que você está pronto para explorar qualquer conteúdo que o servidor tenha a oferecer.
O cabeçalho Content-Type
diz qual é o tipo e como os dados são enviados na requisição ou no corpo da resposta. Ajuda o recebedor a entender e lidar com o conteúdo corretamente. O Cabeçalho Content-Type
pode ser definido nos cabeçalhos da resposta, assim como nos cabeçalhos da requisição.
Nota: O valor do cabeçalho
Content-Type
deve ser um MIME type válido.
Quando um cliente envia uma resquisição HTTP para um servidor, o cabeçalho Content-Type
pode ser incluído para informar ao servidor sobre o tipo de dado que está sendo enviado no corpo da requisição. Por exemplo, se você está submetendo um formulário que inclui upload de arquivos, você deveria especificar o cabeçalho Content-Type
para corresponder ao formato do arquivo enviado. Isso ajuda o servidor a entender como processar os dados que estão chegando.
Não alcançamos a parte da resposta na requisição
cURL
ainda, mas por enquanto, apenas me acompanhe.
Aqui está um exemplo da inclusão do Content-Type
em um cabeçalho de requisição:
POST /accounts HTTP/1.1
Host: github.com
Content-Type: application/json
Em uma resposta de um servidor, o cabeçalho Content-Type
informa ao cliente sobre o formato do conteúdo no corpo da resposta. Isso ajuda o cliente, como um navegador, a interpretar e renderizar os dados recebidos apropriadamente. Por exemplo, quando um servidor envia uma página HTML para um navegador, especifica o Content-Type
como text/html
.
Aqui está um exemplo da inclusão do Content-Type
em um cabeçalho de resposta:
HTTP/1.1 201 CREATED
Content-Type: text/html; charset=UTF-8
Content-Length: 10
O parâmetro charset
no cabeçalho Content-Type
diz qual codificação de caracteres é usada para conteúdo baseado em texto. A codificação de caracteres especifica como caracteres são representados como dados binários (bytes). Cada codificação de caractere suporta diferentes conjuntos de caracteres e linguagens.
O UTF-8
defende uma codificação de caracteres que possa representar quase todos os caracteres no padrão Unicode. O Unicode contém muitos caracteres em diferentes linguagens e scripts por todo mundo.
Significado no Conteúdo HTML:
Quando você utiliza o charset=UTF-8
no HTML, significa que o conteúdo está usando a codificação de caracteres UTF-8. Isso é importante, porque garante que caracteres de diferentes linguagens e scripts serão exibidos corretamente nos navegadores e outras aplicações.
Por exemplo:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>UTF-8 Example</title>
</head>
<body>
<h1>Hello, 你好, こんにちは</h1>
</body>
</html>
Nessa marcação HTML, a tag <meta charset="UTF-8">
dentro da tag <head>
especifica que o documento é codificado usando UTF-8. Isso permite o navegador renderizar caracteres de múltiplas linguagens, como Inglês, Chinês, Tamil e Japonês, todos no mesmo documento.
Compatibilidade Universal:
Utilizar o UTF-8 como codificação de caracteres garante compatibilidade universal, já que ele pode representar caracteres de várias linguagens sem nenhum problema. É uma escolha popular para conteúdo web devido a sua versatilidade e suporte à uma ampla gama de caracteres.
Isso deve ser o suficiente para um entendimento básico do cabeçalho Content-Type
e do MIME type. Vamos começar a falar sobre a parte da resposta na saída do cURL
no próximo capítulo.