Resposta do servidor 416 Range Not Satisfiable
Status HTTP 416: Range Not Satisfiable
O código de status HTTP 416 indica que o servidor não pode satisfazer o intervalo de dados solicitado pelo cliente. Esse problema pode surgir quando o cliente tenta acessar uma parte específica de um recurso, mas o intervalo solicitado está fora dos dados disponíveis. Nesta seção, discutiremos as principais causas do código de status 416, exemplos práticos de sua ocorrência e maneiras de corrigir esses erros em diferentes linguagens de programação.
Causas do Código de Status 416
- Intervalo incorretamente especificado
Um cliente pode cometer um erro ao definir o intervalo, como solicitar um intervalo que excede o tamanho do arquivo. Por exemplo, se um arquivo tem 500 bytes e o cliente solicita um intervalo de 0-600, o servidor retornará o código 416.
- Dados ausentes no servidor
Isso pode ocorrer quando um recurso foi removido ou alterado, e o intervalo solicitado é maior do que os dados disponíveis. Se um arquivo foi excluído ou seu tamanho alterado, o cliente pode não estar ciente dessas mudanças.
- Headers inadequados
Headers Range mal configurados podem resultar no erro 416. Um exemplo é quando o cliente não fornece os limites adequados ou os formata incorretamente.
Exemplos Práticos
- Exemplo com arquivo de áudio
Um cliente solicita um intervalo de 0-1000 bytes de um arquivo de áudio que possui apenas 800 bytes. O servidor responderá com o código 416.
- Exemplo com imagem
Se um cliente tentar solicitar uma parte de uma imagem que foi alterada, e não conhecer as novas dimensões, o servidor pode retornar 416. O cliente pode solicitar um intervalo que não existe mais.
- Exemplo com arquivo de texto
Um cliente tenta acessar um intervalo de um arquivo de texto que foi reduzido em tamanho, como solicitar um intervalo de 0-500 bytes de um arquivo que agora tem apenas 300 bytes. O servidor, novamente, retornará 416.
Correção do Erro 416 em Diferentes Linguagens de Programação
Python (usando a biblioteca requests)
import requests
url = "http://exemplo.com/arquivo.mp3"
headers = {'Range': 'bytes=0-1000'}
response = requests.get(url, headers=headers)
if response.status_code == 416:
print("Erro: Intervalo não satisfatório")
else:
print("Dados recebidos com sucesso")
JavaScript (usando Fetch API)
fetch("http://exemplo.com/imagem.jpg", {
headers: {
'Range': 'bytes=0-500'
}
})
.then(response => {
if (response.status === 416) {
console.error("Erro: Intervalo não satisfatório");
} else {
console.log("Dados recebidos com sucesso");
}
});
PHP (usando cURL)
$ch = curl_init("http://exemplo.com/texto.txt");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Range: bytes=0-500'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == 416) {
echo "Erro: Intervalo não satisfatório";
} else {
echo "Dados recebidos com sucesso";
}
curl_close($ch);
Tabela Resumo das Causas do Erro 416
Causa | Descrição |
---|---|
Intervalo incorreto | O cliente solicita um intervalo fora do tamanho do arquivo. |
Dados ausentes | O recurso foi removido ou alterado e o intervalo é maior que os dados disponíveis. |
Headers inadequados | Headers de intervalo mal configurados que não correspondem ao conteúdo. |
O código de status 416 é um indicativo de problemas na disponibilidade do intervalo de dados solicitado. Para evitar esse status, é crucial especificar corretamente os intervalos e implementar tratamentos adequados para possíveis erros no lado do cliente.