{"id":19521,"date":"2026-05-30T15:02:41","date_gmt":"2026-05-30T13:02:41","guid":{"rendered":"https:\/\/webhosting.de\/http-conditional-requests-cache-validierung-optimierung-paket\/"},"modified":"2026-05-30T15:02:41","modified_gmt":"2026-05-30T13:02:41","slug":"pacote-de-otimizacao-da-validacao-da-cache-de-pedidos-condicionais-http","status":"publish","type":"post","link":"https:\/\/webhosting.de\/pt\/http-conditional-requests-cache-validierung-optimierung-paket\/","title":{"rendered":"Compreender os pedidos condicionais HTTP e a valida\u00e7\u00e3o da cache"},"content":{"rendered":"<p><strong>HTTP condicional<\/strong> Os pedidos reduzem os custos de transmiss\u00e3o, garantindo que o cliente s\u00f3 carrega um recurso completamente se este tiver sido efetivamente alterado desde o \u00faltimo pedido. Vou mostrar como <strong>Valida\u00e7\u00e3o da cache<\/strong> com ETag, Last-Modified, If-None-Match, If-Modified-Since e 304 Not Modified funciona de forma fi\u00e1vel e os tempos de carregamento s\u00e3o visivelmente reduzidos.<\/p>\n\n<h2>Pontos centrais<\/h2>\n\n<ul>\n  <li><strong>Valida\u00e7\u00e3o<\/strong> em vez do download completo: 304 poupa largura de banda e tempo.<\/li>\n  <li><strong>ETag<\/strong> e Last-Modified trabalham em conjunto para um controlo limpo.<\/li>\n  <li><strong>Controlo da cache<\/strong> define a frescura, expira apenas os suplementos.<\/li>\n  <li><strong>Condi\u00e7\u00f5es pr\u00e9vias<\/strong> como os processos de escrita seguros If-Match.<\/li>\n  <li><strong>Seguran\u00e7a<\/strong> requer privado\/n\u00e3o armazenar para conte\u00fados sens\u00edveis.<\/li>\n<\/ul>\n\n<h2>O que fazem os pedidos condicionais na vida quotidiana<\/h2>\n\n<p>Eu fixo <strong>Condicional<\/strong> para fazer uma pergunta clara ao servidor: Preciso mesmo de transferir novos dados ou a minha cache \u00e9 suficiente? O browser ou um proxy envia condi\u00e7\u00f5es, o servidor verifica se um ficheiro foi alterado e responde com 304 Not Modified sem corpo. Este padr\u00e3o mant\u00e9m HTML, CSS, JavaScript, imagens e respostas de API actualizadas e reduz significativamente a carga na infraestrutura. Para activos v\u00e1lidos mais longos, utilizo valores longos de max-age e asseguro que est\u00e3o actualizados atrav\u00e9s de valida\u00e7\u00e3o. Se voc\u00ea tiver o <a href=\"https:\/\/webhosting.de\/pt\/http-cache-control-strategies-hosting-cachemaster\/\">Estrat\u00e9gias de controlo da cache<\/a> tira o m\u00e1ximo partido das caches sem correr o risco de ficar com conte\u00fados desactualizados.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/05\/httpcache-0614.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Cabe\u00e7alhos que permitem a valida\u00e7\u00e3o da cache<\/h2>\n\n<p>Para uma fiabilidade <strong>Cache<\/strong>-O cliente precisa de sinais claros da resposta para tomar decis\u00f5es. Utilizo o Cache-Control para a frescura e as regras, o Expires ocasionalmente como suplemento e o Last-Modified e o ETag para a valida\u00e7\u00e3o efectiva. Last-Modified fornece um tempo de modifica\u00e7\u00e3o que pode ser verificado rapidamente, enquanto ETag fornece um identificador de vers\u00e3o que tamb\u00e9m \u00e9 usado para conte\u00fado din\u00e2mico. Continua a ser importante: no-cache significa validar antes de utilizar, n\u00e3o eliminar. Se aplicar estas sem\u00e2nticas corretamente, conseguir\u00e1 reduzir significativamente o tr\u00e1fego de dados, mantendo o conte\u00fado atualizado. <strong>Conte\u00fado<\/strong>.<\/p>\n\n<h2>Sequ\u00eancia de um pedido condicional sem desvios<\/h2>\n\n<p>Na primeira chamada, o cliente guarda o ficheiro e os valores de valida\u00e7\u00e3o, tais como <strong>ETag<\/strong> ou Last-Modified na cache. Mais tarde, o recurso expira ou requer uma nova verifica\u00e7\u00e3o antes de ser utilizado, e o cliente envia If-None-Match ou If-Modified-Since. O servidor compara as informa\u00e7\u00f5es com o estado atual e devolve 200 OK com um novo corpo ou 304 Not Modified sem carga \u00fatil. O cliente continua ent\u00e3o a utilizar a c\u00f3pia existente e poupa a transmiss\u00e3o, a carga de trabalho TLS e o tempo. Este ping-pong parece discreto, mas o <strong>Efeito<\/strong> sobre a sensa\u00e7\u00e3o de carga e a carga do servidor \u00e9 clara.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/05\/http_requests_besprechung_4827.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>ETag vs. Last-Modified em compara\u00e7\u00e3o direta<\/h2>\n\n<p>Eu uso <strong>\u00daltima modifica\u00e7\u00e3o<\/strong> Gosto de utilizar os carimbos de data\/hora como refer\u00eancia r\u00e1pida e simples, mas utilizo ETags para um controlo mais preciso. Os carimbos temporais podem atingir os seus limites com intervalos de altera\u00e7\u00e3o muito curtos ou falsificar resultados din\u00e2micos. Eu crio ETags a partir de hashes de ficheiros, vers\u00f5es de bases de dados ou variantes de renderiza\u00e7\u00e3o, pelo que cada altera\u00e7\u00e3o no conte\u00fado gera um novo identificador. Ambos os mecanismos podem ser combinados: O cliente pode enviar If-None-Match e If-Modified-Since em paralelo, e o servidor seleciona a verifica\u00e7\u00e3o apropriada. Como garantir uma verifica\u00e7\u00e3o fi\u00e1vel <strong>Valida\u00e7\u00e3o<\/strong>, que se aplica igualmente aos recursos est\u00e1ticos e din\u00e2micos.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Crit\u00e9rio<\/th>\n      <th>\u00daltima modifica\u00e7\u00e3o<\/th>\n      <th>ETag<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td><strong>Exatid\u00e3o<\/strong><\/td>\n      <td>Segunda resolu\u00e7\u00e3o, adequada para ficheiros<\/td>\n      <td>Identificador de vers\u00e3o para cada altera\u00e7\u00e3o de conte\u00fado<\/td>\n    <\/tr>\n    <tr>\n      <td><strong>Din\u00e2mica<\/strong><\/td>\n      <td>Fraco com altera\u00e7\u00f5es frequentes e n\u00e3o baseadas em ficheiros<\/td>\n      <td>Forte para APIs e conte\u00fado renderizado<\/td>\n    <\/tr>\n    <tr>\n      <td><strong>Despesas<\/strong><\/td>\n      <td>Baixo, dispon\u00edvel a partir do sistema de ficheiros<\/td>\n      <td>Baixa a moderada, gera\u00e7\u00e3o na aplica\u00e7\u00e3o\/proxy<\/td>\n    <\/tr>\n    <tr>\n      <td><strong>Conflitos<\/strong><\/td>\n      <td>Possibilidade de desvios do rel\u00f3gio<\/td>\n      <td>Possibilidade de configura\u00e7\u00e3o incorrecta de etiquetas fracas\/fortes<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<h2>Defini\u00e7\u00f5es corretas para o caching do browser e APIs<\/h2>\n\n<p>Para activos est\u00e1ticos, utilizo o longo <strong>idade m\u00e1xima<\/strong> e guardar atrav\u00e9s de ETag ou hash de nome de ficheiro, para que as actualiza\u00e7\u00f5es sejam reconhecidas imediatamente. Costumo marcar as respostas HTML e API com no-cache para que o cliente as valide antes de as utilizar sem ter de recarregar tudo de cada vez. Marco as p\u00e1ginas personalizadas com private para que as caches partilhadas n\u00e3o mostrem nada que tenha sido retido a outros. Os erros s\u00e3o frequentemente causados por diretivas contradit\u00f3rias ou cabe\u00e7alhos de valida\u00e7\u00e3o em falta, que evito com regras claras. Se conhecer os obst\u00e1culos t\u00edpicos, pode facilmente evit\u00e1-los; bons exemplos disto podem ser encontrados no artigo sobre <a href=\"https:\/\/webhosting.de\/pt\/http-cache-headers-sabotam-o-cache-cachefix\/\">Armadilhas de cabe\u00e7alho no caching<\/a>, que gosto de me orientar.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/05\/http-conditional-cache-validation-3847.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Utilizar c\u00f3digos de estado e condi\u00e7\u00f5es de forma eficaz<\/h2>\n\n<p>Eu organizo <strong>C\u00f3digos de estado<\/strong> claramente: 200 OK entrega o conte\u00fado, 304 Not Modified confirma a utiliza\u00e7\u00e3o da cache e 412 Precondition Failed cancela se uma condi\u00e7\u00e3o n\u00e3o for satisfeita. Para opera\u00e7\u00f5es de escrita seguras, utilizo If-Match para que as actualiza\u00e7\u00f5es s\u00f3 tenham efeito se o ETag corresponder \u00e0 vers\u00e3o esperada. Ler com If-None-Match ou If-Modified-Since evita cargas sup\u00e9rfluas e mant\u00e9m os clientes sincronizados. O comportamento consistente \u00e9 importante: O mesmo ponto final deve responder de forma id\u00eantica para condi\u00e7\u00f5es pr\u00e9vias id\u00eanticas. Para SEO e bots, presto aten\u00e7\u00e3o \u00e0 forma como as caches e os crawlers interpretam as mensagens de estado; uma boa vis\u00e3o geral de <a href=\"https:\/\/webhosting.de\/pt\/codigos-de-estado-http-rastreamento-otimizacao-de-alojamento-crawlboost\/\">C\u00f3digos de estado HTTP e rastreio<\/a> ajuda a tomar decis\u00f5es limpas.<\/p>\n\n<h2>Seguran\u00e7a e prote\u00e7\u00e3o de dados para caching<\/h2>\n\n<p>Trato os conte\u00fados sens\u00edveis com <strong>n\u00e3o armazenar<\/strong> e, assim, n\u00e3o lhes d\u00e1 qualquer hip\u00f3tese de acabarem na cache do browser ou do proxy. Marco as p\u00e1ginas personalizadas com Cache-Control: private e verifico que n\u00e3o aparecem dados pessoais em URLs armazenados em cache a longo prazo. Concebo os ETags de forma neutra, sem permitir que se tirem conclus\u00f5es sobre contas de utilizador ou IDs internos. Desactivo sistematicamente todo o armazenamento em cache para visualiza\u00e7\u00f5es de in\u00edcio de sess\u00e3o e fluxos banc\u00e1rios. Se combinar minimiza\u00e7\u00e3o de dados, diretivas adequadas e cabe\u00e7alhos limpos, reduz o risco e protege os seus dados. <strong>Confidencialidade<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/05\/http_cache_validierung_6789.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Implementa\u00e7\u00e3o: Passos para o servidor e a aplica\u00e7\u00e3o<\/h2>\n\n<p>No in\u00edcio, separo <strong>est\u00e1tico<\/strong> de recursos din\u00e2micos e decidir onde os prazos longos fazem sentido e onde a valida\u00e7\u00e3o tem prioridade. No Nginx, no Apache ou num servidor de aplica\u00e7\u00f5es, configuro o controlo da cache e ativo last-modified e ETags, colocando a gera\u00e7\u00e3o de ETags na aplica\u00e7\u00e3o para pontos finais din\u00e2micos. Ao processar pedidos de entrada, avalio If-None-Match e If-Modified-Since e respondo com 304 se a condi\u00e7\u00e3o corresponder. Para opera\u00e7\u00f5es de escrita, utilizo If-Match e devolvo 412 em caso de desvios para evitar a substitui\u00e7\u00e3o. Isto cria um comportamento consistente que utiliza as caches de forma eficiente e ao mesmo tempo <strong>Corre\u00e7\u00e3o<\/strong> garante.<\/p>\n\n<h2>Utilizar de forma sensata as m\u00e9tricas, os testes e o controlo<\/h2>\n\n<p>Verifico o <strong>Rede<\/strong>-tab do DevTools para verificar se os recursos est\u00e3o a vir da cache, se est\u00e3o a ser validados ou se foram carregados recentemente. Monitorizo o estado, os valores de idade, as ETags e o tamanho da resposta transferida. Sob carga, me\u00e7o a lat\u00eancia, o volume de transfer\u00eancia e a CPU do servidor para ver o efeito real das 304 respostas. Os registos do proxy inverso mostram se as caches partilhadas est\u00e3o a fazer o seu trabalho e quantas valida\u00e7\u00f5es s\u00e3o bem sucedidas. Utilizo estes dados para ajustar a idade m\u00e1xima, as diretivas de controlo da cache e as estrat\u00e9gias ETag at\u00e9 que os tempos de resposta e <strong>Taxa de acerto<\/strong> votar.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/05\/EntwicklerdeskCache3178.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Desempenho do alojamento: Porque \u00e9 que os pedidos condicionais poupam dinheiro<\/h2>\n\n<p>Qualquer <strong>304<\/strong>-A resposta da cache partilhada poupa largura de banda, reduz a sobrecarga de TLS e encurta o tempo de resposta, o que \u00e9 particularmente importante para muitos pedidos semelhantes. Nas configura\u00e7\u00f5es de alojamento com proxies inversos, equilibradores de carga e CDN, obtenho o maior efeito quando permito ou excluo especificamente as caches partilhadas. Menos transfer\u00eancias significam tamb\u00e9m, muitas vezes, custos de tr\u00e1fego mais baixos em euros e mais reservas para picos de carga reais. A experi\u00eancia do utilizador tamb\u00e9m \u00e9 melhorada porque as visualiza\u00e7\u00f5es de p\u00e1gina repetidas e as pesquisas de API respondem mais rapidamente. Desta forma, realizo o potencial de desempenho que as actualiza\u00e7\u00f5es de hardware por si s\u00f3 n\u00e3o podem proporcionar e utilizo os <strong>Infra-estruturas<\/strong> melhor.<\/p>\n\n<h2>Erros comuns e solu\u00e7\u00f5es pragm\u00e1ticas<\/h2>\n\n<p>Contradit\u00f3rio <strong>Cabe\u00e7alho<\/strong> como \"no-cache\" emparelhado com \"expires far in the future\" confundem as caches; estabele\u00e7o regras claras sem duplica\u00e7\u00e3o. A falta de ETags para endpoints din\u00e2micos leva a descarregamentos completos desnecess\u00e1rios; adiciono um identificador fi\u00e1vel e avalio se n\u00e3o houver correspond\u00eancia. Valores de max-age demasiado curtos desperdi\u00e7am potencial com ficheiros raramente alterados; estico os prazos e ainda os protejo com valida\u00e7\u00e3o. O caching agressivo de HTML atrasa as altera\u00e7\u00f5es vis\u00edveis; combino o no-cache com o ETag e mantenho o conte\u00fado atualizado. Com decis\u00f5es claras sobre atualidade, valida\u00e7\u00e3o e validade, resolvo estes obst\u00e1culos e refor\u00e7o a <strong>Planeamento<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/05\/cache-validierung-5836.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Utilizar o Vary de forma limpa e controlar as representa\u00e7\u00f5es<\/h2>\n\n<p>Para garantir que os pedidos condicionais funcionam de forma segura em caches partilhados, certifico-me de que utilizo o <strong>Variar<\/strong>. O cabe\u00e7alho define quais os cabe\u00e7alhos do pedido que influenciam a representa\u00e7\u00e3o. Exemplos t\u00edpicos s\u00e3o <em>Aceitar codifica\u00e7\u00e3o<\/em> (gzip, br), <em>Aceitar idioma<\/em> e <em>Aceitar<\/em>. Se forne\u00e7o conte\u00fados por l\u00edngua, defino Vary: Accept-Language para que um proxy n\u00e3o partilhe a vers\u00e3o alem\u00e3 em resposta a um pedido franc\u00eas. Para conte\u00fados personalizados, dispenso deliberadamente o Vary: Cookie e, em vez disso, utilizo <em>Controlo da cache: privado<\/em>, para evitar uma explos\u00e3o incontrol\u00e1vel de chaves de cache. Para os recursos que s\u00f3 s\u00e3o entregues com autoriza\u00e7\u00e3o v\u00e1lida, utilizo private ou asseguro uma separa\u00e7\u00e3o clara com Vary: Authorisation ou Vary nos cabe\u00e7alhos relevantes. A consist\u00eancia \u00e9 importante: o conjunto selecionado de dimens\u00f5es Vary tem de permanecer est\u00e1vel, caso contr\u00e1rio, a taxa de acerto da cache e os benef\u00edcios da valida\u00e7\u00e3o entrar\u00e3o em colapso porque est\u00e3o constantemente a ser criadas novas variantes.<\/p>\n\n<h2>ETags fortes vs. fracos, compress\u00e3o e igualdade de bytes<\/h2>\n\n<p><strong>ETags fortes<\/strong> caracterizam representa\u00e7\u00f5es id\u00eanticas byte a byte e permitem uma valida\u00e7\u00e3o exacta, tamb\u00e9m em combina\u00e7\u00e3o com pedidos de alcance. <strong>ETags fracos<\/strong> (W\/...) apenas indicam igualdade de conte\u00fado, n\u00e3o necessariamente bytes id\u00eanticos. Na pr\u00e1tica, utilizo ETags fortes se puder gerar um identificador \u00fanico para cada representa\u00e7\u00e3o (incluindo a compress\u00e3o). Assim que um proxy inverso utiliza gzip ou brotli em tempo real, adapto a gera\u00e7\u00e3o de ETags ou mudo para ETags fracos, para que o servidor e o cliente n\u00e3o reconhe\u00e7am erradamente bytes diferentes como id\u00eanticos. Uma variante robusta consiste em criar o ETag a partir dos bytes finais da resposta entregue e, ao mesmo tempo, utilizar <em>Vary: Aceitar-Codifica\u00e7\u00e3o<\/em> a ser definido. Isto garante que \u201egzip\u201c e \u201ebr\u201c recebem cada um os seus pr\u00f3prios ETags v\u00e1lidos. Nos casos em que n\u00e3o posso garantir a igualdade de bytes (por exemplo, carimbos de data\/hora diferentes em HTML), escolho ETags fracos que ainda permitem respostas 304 fi\u00e1veis, desde que o significado da p\u00e1gina n\u00e3o tenha mudado.<\/p>\n\n<h2>Controlo da cache na afina\u00e7\u00e3o fina: s-maxage, must-revalidate, stale-while-revalidate<\/h2>\n\n<p>Al\u00e9m de <em>idade m\u00e1xima<\/em> Utilizo especificamente diretivas mais finas. <strong>s-maxagem<\/strong> dirige-se exclusivamente <em>Caches partilhadas<\/em> (CDNs, proxies) e permite-me fazer cache de forma mais agressiva do que no browser. <strong>deve revalidar<\/strong> obriga os clientes a n\u00e3o utilizarem conte\u00fados expirados de forma heur\u00edstica, mas a validarem-nos sempre - \u00fatil para dados cr\u00edticos. <strong>revalidar proxy<\/strong> aborda esta obriga\u00e7\u00e3o especificamente para as caches partilhadas. Com <strong>obsoleto-enquanto-revalidado<\/strong> Permito que uma c\u00f3pia ligeiramente desactualizada seja entregue temporariamente enquanto a valida\u00e7\u00e3o \u00e9 executada em segundo plano; os utilizadores v\u00eaem algo imediatamente e o pedido seguinte beneficia de metadados frescos. <strong>estagna\u00e7\u00e3o em caso de erro<\/strong> como uma rede de seguran\u00e7a: Se a Origem falhar ou retornar erros, o cache pode entregar a \u00faltima c\u00f3pia conhecida por um tempo definido. Para ativos com hash de compila\u00e7\u00e3o, eu combino max-age longo com <em>imut\u00e1vel<\/em>, uma vez que o nome do ficheiro muda com o conte\u00fado e as valida\u00e7\u00f5es interm\u00e9dias s\u00e3o desnecess\u00e1rias. Para HTML e APIs, a valida\u00e7\u00e3o sem cache mais validador continua a ser o padr\u00e3o de ouro para garantir a atualidade e ainda poupar largura de banda.<\/p>\n\n<h2>Outras condi\u00e7\u00f5es e m\u00e9todos: HEAD, gama e conflitos de escrita<\/h2>\n\n<p>Os pedidos condicionais n\u00e3o se limitam a GET. A <strong>HEAD<\/strong>-request apenas fornece cabe\u00e7alhos e \u00e9 ideal para valida\u00e7\u00f5es r\u00e1pidas sem um corpo. Para arquivos grandes eu uso <strong>Gama<\/strong>-pedidos; com <strong>Se-Faixa<\/strong> Certifico-me de que as \u00e1reas parciais s\u00f3 s\u00e3o enviadas se o recurso ainda corresponder \u00e0 vers\u00e3o esperada - caso contr\u00e1rio, respondo com 200 e um corpo completo. Para opera\u00e7\u00f5es de escrita, asseguro a consist\u00eancia com <strong>Se-correspond\u00eancia<\/strong> ab: PUT, PATCH ou DELETE s\u00f3 funcionam se o ETag do cliente corresponder \u00e0 vers\u00e3o atual; caso contr\u00e1rio, respondo com 412 Precondition Failed. Quando quero impor condi\u00e7\u00f5es pr\u00e9vias, por exemplo com recursos propensos a conflitos, uso 428 Precondition Required para fazer com que os clientes usem If-Match. Escolho deliberadamente entre o 409 Conflito e o 412: o 412 assinala a viola\u00e7\u00e3o de condi\u00e7\u00f5es pr\u00e9vias, o 409 real\u00e7a os conflitos de conte\u00fado (por exemplo, regras de l\u00f3gica empresarial). Esta clareza facilita as implementa\u00e7\u00f5es dos clientes e evita sobreposi\u00e7\u00f5es cegas.<\/p>\n\n<h2>Personaliza\u00e7\u00e3o, cookies e prote\u00e7\u00e3o de dados na pr\u00e1tica<\/h2>\n\n<p>Nas p\u00e1ginas personalizadas, assinalo as respostas com <strong>privado<\/strong> ou <strong>n\u00e3o armazenar<\/strong>. Evito codificar os estados dos utilizadores em etiquetas electr\u00f3nicas porque essas etiquetas electr\u00f3nicas \u201epor utilizador\u201c podem involuntariamente tornar-se marcadores de localiza\u00e7\u00e3o. Em vez disso, fa\u00e7o uma distin\u00e7\u00e3o rigorosa entre representa\u00e7\u00f5es p\u00fablicas e privadas. S\u00f3 coloco cookies na chave da cache (Vary: Cookie) se for absolutamente necess\u00e1rio, porque aumentam o n\u00famero de variantes e reduzem drasticamente a taxa de acerto. Para as respostas autorizadas da API, limito-me a <em>Controlo da cache: privado<\/em> e, se necess\u00e1rio, para Vary no formato do cabe\u00e7alho de autoriza\u00e7\u00e3o. \u00c9 assim que asseguro que as caches partilhadas n\u00e3o partilham inadvertidamente respostas confidenciais. Em aplica\u00e7\u00f5es com conte\u00fado misto (estrutura b\u00e1sica p\u00fablica, sub\u00e1reas personalizadas), confio no cache fragmentado ou no ESI\/SSI de borda, enquanto as partes cr\u00edticas permanecem privadas. O resultado \u00e9 a prote\u00e7\u00e3o dos dados sem uma queda no desempenho.<\/p>\n\n<h2>Funcionamento: CDNs, substitutos e invalida\u00e7\u00f5es<\/h2>\n\n<p>Nas configura\u00e7\u00f5es CDN, combino <strong>s-maxagem<\/strong> com validadores claros e - se dispon\u00edveis - utilizar diretivas espec\u00edficas de substitutos para controlar as caches de borda separadamente do navegador. A revalida\u00e7\u00e3o reduz a carga na Origin, mas, ocasionalmente, \u00e9 necess\u00e1ria uma invalida\u00e7\u00e3o definitiva (por exemplo, uma corre\u00e7\u00e3o de seguran\u00e7a). Ent\u00e3o, eu planeio duas maneiras: <em>Quebra de cache<\/em> atrav\u00e9s de hashes de nomes de ficheiros para activos est\u00e1ticos e <em>Purga<\/em>\/Invalida\u00e7\u00e3o para HTML e APIs. Isso evita \u201etempestades de purga\u201c e ainda mant\u00e9m um tempo curto para atualiza\u00e7\u00e3o. Tamb\u00e9m \u00e9 importante ter uma chave de cache consistente na CDN (incluindo host, caminho, par\u00e2metros de consulta e cabe\u00e7alhos Vary relevantes). Para os par\u00e2metros de consulta, diferencio conscientemente entre par\u00e2metros sem\u00e2nticos (por exemplo, ?lang=) e par\u00e2metros puramente relacionados com o rastreio; ignoro estes \u00faltimos na chave da cache para evitar a fragmenta\u00e7\u00e3o. Isso mant\u00e9m a cadeia de cache do navegador, proxy intermedi\u00e1rio e CDN transparente e previs\u00edvel.<\/p>\n\n<h2>304 em pormenor: Atualizar corretamente o cabe\u00e7alho e os metadados<\/h2>\n\n<p>Tamb\u00e9m um <strong>304<\/strong>-A resposta cont\u00e9m metadados importantes. Entrego novamente Date, Cache-Control, ETag\/Last-Modified e - se relevante - Expires e Vary para que o cliente possa atualizar as suas entradas na cache. Content-Type e Content-Encoding n\u00e3o t\u00eam necessariamente de ser repetidos, mas podem contribuir para a clareza. \u00c9 importante que o 304 n\u00e3o contenha uma carga \u00fatil de corpo e que eu envie validadores consistentes: Alterar o ETag no 304 sem alterar a representa\u00e7\u00e3o gera confus\u00e3o. Se as diretrizes forem ajustadas (por exemplo, max-age mais longo), o cliente pode adotar os metadados sem ter de recarregar o corpo - uma pequena alavanca com um grande impacto no desempenho percebido.<\/p>\n\n<h2>Estrat\u00e9gias de teste e depura\u00e7\u00e3o para uma valida\u00e7\u00e3o limpa<\/h2>\n\n<p>Verifico especificamente os seguintes pontos no DevTools: <em>da cache do disco<\/em> vs. <em>da mem\u00f3ria cache<\/em> vs. <em>revalidado<\/em>; Status 200\/304; cabe\u00e7alho Age em respostas de caches compartilhadas; consist\u00eancia ETag\/Last-Modified e o efeito de Vary. Para testes reproduz\u00edveis, desactivei temporariamente a cache do browser ou utilizei um modo privado. No lado do servidor, avalio os registos no r\u00e1cio 200\/304, o tamanho m\u00e9dio da resposta e a utiliza\u00e7\u00e3o da CPU. Os sinais de aviso s\u00e3o, por exemplo, muitas respostas 200 a recursos com intervalos de altera\u00e7\u00e3o curtos (falta de validadores), loops de revalida\u00e7\u00e3o (tempos divergentes\/desvio do rel\u00f3gio) ou um n\u00famero invulgarmente elevado de variantes por URL (Vary excessivo). Utilizo testes de carga para verificar como s-maxage, stale-while-revalidate e if-none-match se comportam sob press\u00e3o - e ajusto as diretivas at\u00e9 que o d\u00e9bito e a lat\u00eancia coincidam.<\/p>\n\n<h2>Casos extremos e predefini\u00e7\u00f5es robustas<\/h2>\n\n<p>Nem todos os recursos t\u00eam regras de altera\u00e7\u00e3o claras. Defino padr\u00f5es cuidadosos para sitemaps, feeds ou pain\u00e9is gerados: <em>sem cache<\/em> mais ETag\/Last-Modified. Com rel\u00f3gios inst\u00e1veis entre sistemas a montante, evito compara\u00e7\u00f5es r\u00edgidas de segundos e prefiro ETags que sejam independentes de carimbos de data\/hora. Se a compress\u00e3o for vari\u00e1vel (diferentes n\u00edveis de gzip), incluo o resultado da compress\u00e3o na gera\u00e7\u00e3o do ETag ou mudo para ETags fracos. E se os clientes pedirem sem validadores, envio sinais claros: Ou uma frescura clara (max-age\/immutable) ou uma valida\u00e7\u00e3o clara (no-cache + ETag). Estes <em>predefini\u00e7\u00f5es robustas<\/em> garantir que mesmo os clientes incompletos ou defeituosos n\u00e3o desencadeiem picos de carga indesejados.<\/p>\n\n<h2>Breve resumo<\/h2>\n\n<p>Ligar pedidos condicionais <strong>Velocidade<\/strong> e atualidade, fazendo com que os clientes s\u00f3 recuperem recursos completos quando o conte\u00fado tiver sido alterado. Utilizo o controlo de cache para garantir a atualidade, combino last-modified e ETag para verifica\u00e7\u00f5es fi\u00e1veis e respondo consistentemente com 304 se as condi\u00e7\u00f5es forem cumpridas. Isolo os conte\u00fados personalizados e confidenciais com private ou no-store para que nenhum dado acabe em caches partilhadas. As medi\u00e7\u00f5es no DevTools, os registos e as m\u00e9tricas mostram-me onde posso esticar os prazos ou apertar a l\u00f3gica de valida\u00e7\u00e3o. Se pensar nestes blocos de constru\u00e7\u00e3o em conjunto, conseguir\u00e1 p\u00e1ginas mais r\u00e1pidas, uma carga reduzida no servidor e um <strong>mais redondo<\/strong> Experi\u00eancia do utilizador sem desperd\u00edcio de dados.<\/p>","protected":false},"excerpt":{"rendered":"<p>Saiba como os pedidos condicionais HTTP e a valida\u00e7\u00e3o da cache com ETag, Last-Modified e Cache-Control optimizam a cache do seu browser e aumentam o desempenho.<\/p>","protected":false},"author":1,"featured_media":19514,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[834],"tags":[],"class_list":["post-19521","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-plesk-webserver-plesk-administration-anleitungen"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"89","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"HTTP Conditional","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"19514","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/posts\/19521","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/comments?post=19521"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/posts\/19521\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/media\/19514"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/media?parent=19521"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/categories?post=19521"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/tags?post=19521"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}