Existem razões para não usar JSONP
para requisições AJA~X?
Como desenvolvedores web, um dos nossos principais objetivos é garantir que as aplicações que criamos sejam funcionais, eficientes e seguras. Ao lidar com requisições AJAX, uma técnica comum que frequentemente surge é o JSONP
(JSON com Padding). Predominantemente usado para fazer requisições entre domínios, o JSONP
explora o fato de que as tags <script>
podem carregar conteúdo de qualquer domínio. No entanto, há uma justificativa para evitar o JSONP
, especialmente quando você nem está lidando com situações interdomínios?
Neste post, vamos nos aprofundar nas razões pelas quais você pode querer pensar duas vezes antes de incorporar JSONP
na sua aplicação AJA~X.
O que é JSONP
?
JSONP
significa JSON com Padding. É um método que permite aos desenvolvedores solicitar dados de um servidor que reside em um domínio diferente do da sua aplicação. Esse método contorna a política de mesma origem inerente aos navegadores web, que, de outra forma, bloquearia tal requisição.
Aqui está um exemplo rápido de como uma requisição JSONP
pode parecer:
function handleResponse(data) {
console.log(data);
}
let script = document.createElement('script');
script.src = 'https://example.com/data?callback=handleResponse';
document.body.appendChild(script);
Desvantagens de Usar JSONP
Apesar da sua facilidade de uso e da forma inteligente como contorna problemas entre domínios, o JSONP
não está isento de desvantagens. Aqui estão vários fatores importantes a serem considerados:
1. Falta de Tratamento de Erros
- Uma preocupação significativa com o
JSONP
é a ausência de tratamento de erros. - Se um erro ocorrer ao fazer uma requisição, não há uma maneira embutida de capturá-lo em nosso código JavaScript. Em vez de uma resposta de erro bem definida, você simplesmente recebe uma injeção de script que pode funcionar ou não.
- Para administrar isso, você precisaria garantir que seu servidor sempre retorne uma resposta JSON devidamente formatada.
2. Vulnerabilidades de Segurança
- Assim como qualquer método que envolve a execução dinâmica de scripts de fontes externas, o
JSONP
deixa espaço para preocupações de segurança potenciais. - Um atacante poderia potencialmente enviar scripts maliciosos se tiver controle sobre o serviço que você está chamando.
- Para mitigar o risco, você pode verificar o referenciador no script do lado do servidor, mas isso não é à prova de falhas.
3. Variabilidade no Comportamento do Navegador
- O comportamento das tags
<script>
geradas dinamicamente pode diferir entre vários navegadores. Você pode encontrar resultados inesperados simplesmente com base na escolha do navegador do usuário.
4. Flexibilidade Limitada
- Com
JSONP
, você não pode cancelar ou tentar novamente requisições facilmente, como poderia com outros métodos, comoXMLHttpRequest
oufetch
. - Essa inflexibilidade pode levar a situações em que você precisa gerenciar requisições em andamento de forma graciosa, o que pode complicar a lógica na sua aplicação.
5. Dificuldades de Depuração
- Depurar problemas que surgem do
JSONP
pode ser mais desafiador, já que os erros não são retornados como em requisições AJAX tradicionais.
Conclusão
Usar JSONP
pode às vezes parecer uma solução rápida, especialmente quando você está trabalhando em requisições entre domínios. No entanto, ao avaliar os potenciais riscos de segurança, a falta de tratamento de erros e outras limitações mencionadas acima, fica claro que essa abordagem pode não ser a mais adequada para todas as aplicações—especialmente quando você não precisa nem mesmo da funcionalidade entre domínios.
Explore outras técnicas como CORS ou requisições AJAX padrão, pois elas podem oferecer uma alternativa mais robusta e segura. Lembre-se, é sempre melhor pesar os prós e contras com base nas necessidades do seu projeto específico antes de decidir a abordagem certa.
Ao se manter informado sobre as potenciais desvantagens de ferramentas como JSONP
, você pode tomar decisões mais informadas que priorizam tanto a funcionalidade quanto a segurança de suas aplicações.