Executando verificação de segurança...
5

Como funciona o status code 304?

Aqui é um lugar de conhecimento concreto, de pessoas que buscam e incentivam o aprendizado. Acho que vai ser o melhor lugar para falar sobre isso.

Recentemente, percebi que algumas requisições da API do nosso produto retornavam o status code 304, que nada mais é do que informar ao cliente que o recurso solicitado não teve alterações e, por isso, não precisa ser buscado novamente. O cliente pode usar o que já tem armazenado no cache. Fiquei muito intrigado com isso, pois só recebi o status 200 quando fui na base de dados e alterei um recurso relacionado àquilo. Até onde sei, não implementamos nada tão sofisticado, como cache, para melhoria de desempenho. Fiquei me perguntando se isso foi algo que o Render fez por baixo dos panos para nós ou se é uma funcionalidade natural da web. Para entender melhor, vou tentar expor minhas dúvidas:

Gostaria de entender duas coisas sobre isso:

  • Esse status code já é configurado automaticamente nas nossas APIs por padrão?
    • Para deixar a pergunta mais clara: o status 304 será retornado por padrão, sem nenhuma configuração, caso o sistema perceba que o recurso solicitado permanece o mesmo?
  • Isso diminui o processamento da CPU?
    • Explicando melhor: imagine que o cliente fez a solicitação pela segunda vez e nada mudou. Nessa situação, o sistema realiza todo o processamento novamente ou detecta de alguma forma que está tudo igual e simplesmente retorna o 304?

Bem, já fiz perguntas ao GPT e também pesquisei no Stack Overflow, mas as respostas para essas questões não ficaram muito claras para mim.

Edit:
Fazendo testes conectados à API local, recebo sempre o status code 200. Logo, acho que, de fato, é algo que o Render faz por debaixo dos panos e não algo que acontece de fábrica. Agora, a pergunta que fica é: como ele faz isso de forma tão minuciosa?

Carregando publicação patrocinada...
2

A resposta à pergunta 1 é: não. o sistema faz o que voc programa. não existe nada padrão da própria web que é retornado automaticamente.
pergunta 2: considerando que você não fez, provavelmente é cache do render, então. a vercel tem um esquema parecido. ela armazena o cache em algum servidor perto do cliente. quando alguém requisita, ela devolve o cache e tenta atualizar por baixo dos panos. se estiver igual, ela mantém como está. mas isso depende dos cabeçalhos que você informa. não é automático.

1

@klawdyo mas então como funciona isso por baixo dos panos? Eles ficam monitorando a minha base de dados para ver se algo mudou relacionado aquele recurso específico para informar no cabeçalho se teve mudança ou não?

2

Olha na prática é você que devine esse status code, para definir ele é bem simples.

Vamos supor que você tenha uma api que gera imagens com base em certos parâmetros, ok, quando o usuário fizer a primeira requisição para a o endpoint, dentro dos headers da resposta você vai dizer para o navegador ou o que ele estiver usando que essa imagem só vai sair de cache (ser invalida), daqui a por exemplo 24hs.

ai quando o user tentar fazer novamente a requisição dentro das 24hs, o próprio navegador vai "lembrar" que você tinha dito que só vai sair de cache dps de 24hs

ai no navegador apena repete a resposta para você dizendo que ainda tá em cache usando o status code 304 not modified.

eu tenho esse repo que tá parado a bastante tempo onde eu configurei isso:
https://github.com/HarukaYamamoto0/locart/blob/f18042965f60a8d7bc2126eb5c2fdb66926b688e/src/controllers/image.controller.js#L36