"CUIDADO: os cabeçalhos provisórios são mostrados" no depurador do Chrome

399

Percebi uma mensagem estranha de cuidado ao analisar os recursos baixados usando o Google chrome inspector ( F12):

Os cabeçalhos provisórios do cuidado são mostrados

insira a descrição da imagem aqui

Encontrei algo possivelmente relevante, Painel de Rede: adicione cuidado com os cabeçalhos de solicitação provisórios , mas não consegui entendê-lo completamente. Podem ser encontradas perguntas relacionadas às solicitações de bloco do Chrome e ao XMLHttpRequest não pode carregar. Os recursos descarregados mostram cautela: os cabeçalhos provisórios são mostrados .

Semelhante à primeira pergunta , meu recurso foi bloqueado, mas posteriormente carregado automaticamente o mesmo recurso. Diferente da segunda pergunta , não quero consertar nada; Quero saber o que essa mensagem significa e por que a recebi.

Salvador Dalí
fonte
3
Esse problema também pode aparecer se a solicitação não foi enviada devido à troca de domínio, por exemplo, envio de dados via ajax de www.domain.tld para domain.tld ou vice-versa.
Andre Baumeier
@wvega Há um problema semelhante publicado nesta pergunta do SO, mas não parece haver nenhuma explicação possível para esse problema dos cabeçalhos provisórios enviados . Alguma solução concreta para isso? realmente chato! Eu postei essa pergunta algum tempo antes.
Webblover 12/03
11
@webblover Há uma boa explicação por wvega. E, na verdade, eu não estava procurando uma solução. Eu estava curioso sobre um motivo.
Salvador Dali
Isso me ajudou quando eu desliguei:chrome://flags/#site-isolation-trial-opt-out
--лья Зеленько
Leia a minha resposta, não é tão complicado quanto parece: stackoverflow.com/questions/21177387/…
csandreas1

Respostas:

353

O recurso pode estar sendo bloqueado por uma extensão (AdBlock no meu caso).

A mensagem está lá porque a solicitação para recuperar esse recurso nunca foi feita, portanto os cabeçalhos mostrados não são reais. Conforme explicado no problema que você referenciou, os cabeçalhos reais são atualizados quando o servidor responde, mas não há resposta se a solicitação foi bloqueada.


A maneira como descobri a extensão que estava bloqueando meu recurso foi através da ferramenta net-internals no Chrome:

Para as versões mais recentes do chrome

  • Digite chrome://net-export/na barra de endereço e pressione Enter.
  • Comece a gravar. E salve o arquivo de gravação em local.
  • Abra a página que está mostrando problemas.
  • Voltar para net-internals
  • Você pode visualizar o arquivo de registro gravado aqui https://netlog-viewer.appspot.com/#import
  • clique em eventos (###) e use o campo de texto para encontrar o evento relacionado ao seu recurso (use partes da URL).
  • Por fim, clique no evento e veja se as informações mostradas dizem alguma coisa.

Para versões anteriores do chrome

  • Digite chrome://net-internalsna barra de endereço e pressione Enter.
  • Abra a página que está mostrando problemas.
  • Volte para net-internals, clique em eventos (###) e use o campo de texto para encontrar o evento relacionado ao seu recurso (use partes da URL).
  • Por fim, clique no evento e veja se as informações mostradas dizem alguma coisa.
Willington Vega
fonte
7
A resposta de Shazz é melhor. Você vê esta mensagem no depurador sempre que o recurso foi recuperado do cache do navegador sem perguntar ao servidor se o conteúdo foi alterado.
Maor
4
Eu acho que as duas respostas estão certas, elas contam dois lados da mesma história. A mensagem é mostrada quando uma solicitação é bloqueada ou os recursos são carregados do cache, mas também após cada solicitação ser iniciada e enquanto o navegador aguarda uma resposta do servidor. Assim que a resposta chega, a mensagem desaparece e os cabeçalhos reais são mostrados.
precisa
2
Se uma página analisada principalmente for redirecionada, por exemplo, example.com/a -> 301-> example.com/b, e a página de destino responder com 200, e você clicar em um inspetor na página de destino / b para ver os dados do cabeçalho , você os receberá, rotulados com "Cabeçalhos provisórios são exibidos". Está correto, porque você não analisou a página de destino diretamente. Se você fizer isso, obtém os dados do cabeçalho sem o rótulo.
Evgeniy
11
Pude determinar que esse era o meu problema porque quando fiz o acima. Meu site https chamava um arquivo https css que estava fazendo um redirecionamento 302 para uma página http. A segurança não permitiria o carregamento do arquivo e mostrava apenas os cabeçalhos provisórios.
Steropes
11
Há uma explicação muito boa de múltiplas razões pelas quais isso pode acontecer: stackoverflow.com/questions/12009423/...
boldnik
112

Eu acredito que isso acontece quando a solicitação real não é enviada. Geralmente acontece quando você está carregando um recurso em cache.

Shazz
fonte
61
Não, 304 não modificado vem do servidor em resposta a uma solicitação condicional. Se você estiver carregando um recurso em cache e seu navegador não precisar entrar em contato com o servidor, você não receberá 304 nem um status HTTP, pois nenhum pedido HTTP será feito.
thomasrutter
7
Isso funciona para mim, quando vi "Cabeçalhos provisórios são mostrados" no painel do depurador, o código de status da solicitação era "200 OK (do cache)"
richie
3
Vi isso com uma resposta do trabalhador do serviço, então acho que, pelo menos em alguns casos, você está certo sobre a resposta do cache :)
jacoballenwood
4
Eu desligo o cache nas ferramentas de desenvolvimento e ainda recebo esta mensagem. O status para todos os arquivos é 200, não "(do cache)". Por isso, às vezes pode ser devido ao cache, mas certamente nem sempre.
Ralf
Está carregando dados do cache no meu caso.
Aviv Lo
40

Para o chrome v72 +, o que resolveu para mim foi apenas isso:

chrome://flags/e desative essas 3 bandeiras

  • Desativar isolamento do site
  • Ativar serviço de rede
  • Executa o serviço de rede em processo

insira a descrição da imagem aqui

ou você pode fazer isso na linha de comando:

chrome --disable-site-isolation-trials --disable-features=NetworkService,NetworkServiceInProcess

por que isso aconteceu?

Parece que o Google está refatorando seu mecanismo Chromium em estrutura modular, onde diferentes serviços serão separados em módulos e processos independentes. Eles chamam esse processo de manutenção. O serviço de rede é o primeiro passo, o serviço de interface do usuário, o serviço de identidade e o serviço de dispositivos estão chegando. O Google fornece as informações oficiais no site do projeto Chromium .

é perigoso mudar isso?

Um exemplo é o trabalho em rede: uma vez que tenhamos um serviço de rede, podemos optar por executá-lo fora do processo para obter melhor estabilidade / segurança ou em processo se estiver com recursos limitados . fonte

Badr Elmers
fonte
4
Consegui fazer isso funcionar apenas com "Ativar serviço de rede" e "Executa o serviço de rede em processo".
Smalone
Acabei de desativar o isolamento do site e isso funcionou para mim.
Ashrith 23/05/19
3
Isso funcionou no Chrome normal (v74), no entanto, a versão mais recente do Chrome Canary (v76) agora está sem o sinalizador "# network-service" ... Não é possível fazer isso funcionar no Canary sem ele.
rico
Eu vi esse problema em ambos localhost:8080e google.com(!?). A desativação do isolamento do site corrigiu google.com, mas não o host local. Desabilitar apenas as outras duas opções o corrigia para todos os casos.
BlueRaja - Danny Pflughoeft
Eu só tive que desligar isto: chrome: // flags / # local-isolamento-trial-opt out
Илья Зеленько
25

Encontrei esse problema e consegui identificar uma causa específica, que não é mencionada acima nas respostas ou na pergunta.

Estou executando uma pilha js completa, front-end angular e back-end de nó no SSL, e a API está em um domínio diferente em execução na porta 8081, por isso estou fazendo solicitações CORS e withCredentials enquanto estou removendo um cookie de sessão da API

Tão especificamente meu cenário foi: solicitação POST, com credenciais para a porta 8081, causou a mensagem "CUIDADO: cabeçalhos provisórios são mostrados" no inspetor e, é claro, também bloqueou a solicitação.

Minha solução foi configurar o apache para proxy transmitir a solicitação da porta SSL usual de 443 para a porta SSL do nó 8081 (o nó deve estar em uma porta superior, pois não pode ser executado como raiz no prod). Acho que o Chrome não gosta de solicitações SSL para portas SSL não convencionais, mas talvez sua mensagem de erro possa ser mais específica.

Senhor P
fonte
2
Essa é a política de mesma origem do navegador - sua página da web e os recursos que você está lendo devem estar na mesma porta. developer.mozilla.org/pt-BR/docs/Web/Security/…
r3m0t 01/10/14
11
Agradecimentos impressionantes pela ajuda. Estou usando o servidor de desenvolvimento webpacks e consegui adicionar uma regra de reescrita. '/graphql': { target: 'http://10.10.1.38:4000', changeOrigin: true }
James Harrington
Da mesma forma, resolvi esse problema adicionando "proxy": "http://192.168.98.110:1234"ao meu package.jsonem um projeto create-react-app. Diferentemente da resposta, não estou usando HTTPS em nenhum lugar do desenvolvedor, mas isso foi necessário porque meu aplicativo e API estão em IPs diferentes.
chrishiestand
16

Isso também pode acontecer (apenas para solicitações de origem cruzada) devido a um novo recurso chamado isolamento do site.

Esta página detalha o problema e uma solução alternativa . Qual é ir parachrome://flags/#site-isolation-trial-opt-out chrome e alterar essa configuração para "Opt-out" e recarregar o chrome.

É um problema conhecido . No entanto, essa página diz que foi corrigido no chrome 68, mas estou executando o chrome 68 e ainda tenho o problema.

onlynone
fonte
11
Se suas solicitações não estiverem bloqueadas (200 OK), isso só acontecerá com solicitações CORS e o cabeçalho ausente será Cookie , você deseja verificar esta resposta. Obrigado, @onlynone
semako
@semako, você pode explicar isso com mais detalhes? Estou com um problema semelhante, mas não entendo completamente o porquê. para mais informações, consulte minha postagem mais recente. obrigado.
ADN bps
12

Os recursos HTTP / 2 Pushed produzirão Provisional headers are shownno inspetor a mesma teoria que @wvega postada em sua resposta acima .

por exemplo: Como o servidor enviou os recursos ao cliente ( antes que o cliente os solicitasse ), o navegador mantém os recursos em cache e, portanto, o cliente nunca faz / precisa de solicitações; Então porque...

... os cabeçalhos reais são atualizados quando o servidor responde, mas não há resposta se a solicitação foi bloqueada.

Comunidade
fonte
12

Minha situação está relacionada à origem .
Situação: o navegador envia a OPTIONSsolicitação antes de enviar a solicitação real, como GETou POST. O desenvolvedor de back-end esquece de lidar com a OPTIONSsolicitação, deixando passar pelo código de serviço, tornando o tempo de processamento muito longo. Mais do que a configuração de tempo limite que escrevi na axiosinicialização, que é de 5000 milissegundos. Portanto, a solicitação real não pôde ser enviada e, em seguida, encontrei o provisional headers are shownproblema.
Solução: quando se trata de OPTIONSsolicitar, a API de back-end retorna o resultado, agiliza a solicitação e a solicitação real pode ser enviada antes do tempo limite.

Alexee
fonte
6

Duvido que minha resposta chegue a tempo de ajudá-lo, mas outros podem achar útil. Eu experimentei um problema semelhante com um script jQuery Ajax Post que eu criei.

Aconteceu que eu tinha um erro de digitação no atributo href da tag A que eu estava usando para disparar a postagem. Eu digitei href = " javacsript:; " (revertendo os 's' e os 'c') .. isso fez com que o script tentasse atualizar a página enquanto a postagem estava tentando disparar. corrigido o erro de digitação e funcionou perfeitamente bem para mim.

Selvagem
fonte
Corri para o mesmo tipo de problema, não houve erro de digitação, mas eu tinha um script recarregando a página antes que o POST fosse acionado / concluído.
Raindal
4

Esta mensagem pode ocorrer quando o site está protegido usando o HSTS . Em seguida, quando alguém vincula à versão HTTP da URL, o navegador, conforme instruído pelo HSTS, não emite uma solicitação HTTP, mas redireciona internamente para o recurso HTTPS com segurança. Isso evita ataques de downgrade HTTPS, como sslstrip .

dionyziz
fonte
Desativei o HSTS e os cabeçalhos originais apareceram novamente. Obrigado!
Kenberkeley
3

Talvez porque você tenha enviado uma solicitação do Ajax, ao mesmo tempo em que você pula sua página para outra usando location.href ou algo parecido. Portanto, a solicitação anterior falhou.

Frankjs
fonte
2

Essa mensagem de cuidado também ocorre se a resposta for inválida e, portanto, descartada pelo navegador.

No meu caso, a solicitação foi enviada corretamente ao servidor, o código do servidor produziu um erro e meu tratamento de erro personalizado retornou a mensagem de erro no campo Mensagem de status HTTP. Mas esse erro não foi recebido no lado do cliente, devido a caracteres inválidos na mensagem de erro (descrita aqui http://aspnetwebstack.codeplex.com/workitem/1386 ) que resultaram em cabeçalhos de resposta corrompidos.

Florian Haider
fonte
2

Corri para esse problema com uma chamada AJAX que nunca seria concluída. Eu segui o conselho da wvega e dica sobre depuração chrome://net-internalspara, eventualmente, determinar outraclick manipulador de eventos na página, ouvindo em um nó pai, estava fazendo com que o navegador navegasse para a mesma URL (por isso não era facilmente perceptível).

A solução foi adicionar event.stopPropagation()um clickmanipulador no botão de envio do formulário para impedir que o clique borbulhasse no DOM e cancelasse a solicitação AJAX em andamento (iniciada por um submitmanipulador no form).

jimp
fonte
2

Recordei disso recentemente (hoje, de fato), em que uma chamada AJAX foi enviada ao servidor e o Chrome dispara o "Cuidado: os cabeçalhos provisórios são mostrados". No script PHP do lado do servidor, existem consultas MySQL que podem ser praticamente instantâneas ou levar alguns segundos, dependendo do cenário especificado. A resposta do meu servidor não é enviada de volta ao navegador até que as consultas sejam concluídas. Descobri que esse erro ocorre somente quando consultas demoradas (até alguns segundos no total) estão sendo feitas e impedem que a resposta seja enviada de volta.

Meu cenário envolve a possibilidade muito rara de alterar uma tabela adicionando / removendo centenas de colunas para a saída do modelo climático ... portanto, o atraso da resposta é repetido através de um loop de consultas ALTER TABLE.

Gwi7d31
fonte
PHP Trabalhadores seria talvez algo para você
Bartłomiej Zalewski
2

Um motivo comum para isso acontecer é se você está acompanhando um evento e não impede a ação padrão. Por exemplo, se você tiver um evento de clique, convém incluir:

e.preventDefault();

ou

return false;

Caso contrário, você verá os avisos provisórios dos cabeçalhos e o status "cancelado" na guia Rede do seu console da web.

bigtex777
fonte
2

No meu caso, era apenas um caminho de conjunto falso para um recurso (svg / img)

tipocoder
fonte
Sim - para mim, falta de permissões ao usar uma entrada de arquivo para a solicitação.
21418 philip4
2

Esse problema ocorreu quando eu estava enviando um cabeçalho de autorização HTTP inválido. Eu esqueci de codificar base64.

Robert Christopher
fonte
11
Meu caso foi o cabeçalho da autorização muito longo
Agorilla 25/02
1

Me deparei com isso e ele desapareceu quando mudei de https para http. Os certificados SSL que usamos no dev não são verificados por terceiros. Eles são apenas certificados de desenvolvimento gerados localmente.

As mesmas chamadas funcionam bem no Chrome Canary e no Firefox. Esses navegadores não parecem ser tão rigorosos quanto ao certificado SSL como o Chrome. As chamadas falhariam no Chrome com a mensagem "CUIDADO: cabeçalhos provisórios ...".

Penso / espero que, quando usarmos um certificado SSL legítimo no palco e no produto, não veremos mais esse comportamento no Chrome.

CodeWarrior
fonte
Eu tentei enrolar e receber 60. desta resposta, descubra a cadeia ausente na instalação do SSL. adicione corrente e problema se foi. valeu cara! use isso para verificar: curl -s -D- https: // <yourcomain.com>
apis17
1

Apenas jogando meus dois centavos. Estou escrevendo um aplicativo Web usando solicitações CORS e um serviço Web RESTful completo. Eu descobri que o chrome lançará esse erro quando eu tiver uma exceção não entregue ou um erro do PHP lançado. Apenas coloque alguém que tenha problemas. Descobri que, quando isso acontece, posso iniciar o aplicativo "Postman - Rest Client" do aplicativo Chrome e executar exatamente a mesma solicitação, mas no aplicativo Chrome, na verdade, receberei o erro PHP que está sendo lançado, em vez desse erro não descritivo.

JDubDev
fonte
1

Eu corri esse problema ao tentar carregar o main.js para exigir js pela segunda vez depois de fazer alterações como resultado de um erro. Acabei de ativar as Configurações das Ferramentas do Desenvolvedor "Desativar cache (quando o DevTools está aberto)". e isso fez o charme.

Ohad Sadan
fonte
Acabei de ter um problema semelhante em que um vídeo html5 não carregava quando as ferramentas de desenvolvimento do Chrome estavam abertas enquanto eu mantinha 'Desativar cache (enquanto o DevTools está aberto)' ativado. Desativar a configuração resolveu o problema.
Anth12
1

Outro cenário possível que eu já vi - a mesma solicitação exata está sendo enviada novamente após alguns milissegundos (provavelmente devido a um bug no lado do cliente).
Nesse caso, você também verá que o status da primeira solicitação é "cancelado" e que a latência é de apenas alguns milissegundos.

Erez Cohen
fonte
1

Isso estava acontecendo para mim, quando eu tinha um link para download e, depois de clicar nele, estava tentando também capturar o clique com jquery e enviar uma solicitação ajax. O problema ocorreu porque, quando você clica no link de download, sai da página, mesmo que não pareça. Se não houver transferência de arquivos, você verá a página solicitada. Por isso, defina um target = "_ blank" para evitar esse problema.

Hayk Aghabekyan
fonte
1

Eu recebi esse erro quando tentei imprimir uma página em um pop-up. A caixa de diálogo de impressão foi exibida e ela ainda aguarda minha aceitação ou cancelamento da impressão no pop-up enquanto a página mestra também estava aguardando em segundo plano, mostrando a mensagem CUIDADO quando tentei clicar em outro link.

No meu caso, a solução foi remover o window.print ();script que estava sendo executado na <body>janela pop-up para impedir o diálogo de impressão.

Arnau Galofré
fonte
1

Vi isso acontecer quando o número de conexões com o meu servidor excedeu o limite máximo de 6 conexões por servidor do Chrome.

mab
fonte
1

Use este código punho do seu código:

header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');

Isso funciona para mim.

Nabi KAZ
fonte
0

Aqui está outra solução.

Se você encontrar esse problema com a chamada $ ajax (), adicione http://antes que o serverhost resolva o seu problema.

var requestURL = "http://" + serverHost;
$.ajax({
    dataType: "json",
    url: requestURL,
    data: data,
    success: success    
});
KTU
fonte
0

Se você estiver desenvolvendo um aplicativo Asp.Net Mvc e estiver tentando retornar um JsonResultem seu controlador, adicione JsonRequestBehavior.AllowGet-o ao Jsonmétodo. Isso consertou para mim.

public JsonResult GetTaskSubCategories(int id)
{
    var subcategs = FindSubCategories(id);

    return Json(subcategs, JsonRequestBehavior.AllowGet);  //<-- Notice it has two parameters
}
codingbiz
fonte
0

A mensagem "Cuidado: os cabeçalhos provisórios são mostrados" pode ser exibida quando o site hospedado em HTTPS chama chamadas para o WebApi hospedado em HTTP. Você pode verificar tudo se todas as suas APIs são HTTPS. O navegador impede fazer uma chamada para recursos não seguros. Você pode ver uma mensagem semelhante no seu código ao usar a API FETCH para dominar com HTTP.

Conteúdo misto: a página em ' https://website.com ' foi carregada por HTTPS, mas solicitou um recurso não seguro ' http://webapi.com '. Esta solicitação foi bloqueada; o conteúdo deve ser veiculado por HTTPS.

Rafal Cypcer
fonte
0

Eu tive um problema semelhante com meu aplicativo MEAN. No meu caso, o problema estava ocorrendo em apenas uma solicitação de obtenção. Eu tentei remover o adblock, tentei limpar o cache e tentei com diferentes navegadores. Nada ajudou.

finalmente, descobri que a API estava tentando retornar um grande objeto JSON. Quando tentei enviar um objeto pequeno, ele estava funcionando bem. Finalmente, mudei minha implementação para retornar um buffer em vez de um JSON.

Desejo expressJS para lançar um erro neste caso.

Chandru
fonte
0

Esse problema também ocorrerá ao usar alguns pacotes como webpack-hot-middlewaree abrir várias páginas ao mesmo tempo. webpack-hot-middlewarecriará uma conexão para cada página para ouvir as alterações de código e depois atualizar a página. Cada navegador possui uma max-connections-per-serverlimitação de 6 para o Chrome; portanto, se você já abriu mais de 6 páginas no Chrome, a nova solicitação será suspensa até você fechar algumas páginas.

LCB
fonte
0

No meu caso, a causa foi a extensão do AdBlock.

A solicitação ao servidor foi concluída e eu recebi a resposta, mas não consegui ver os cookies de solicitação devido a "Cabeçalhos provisórios .." sendo mostrados nas ferramentas de desenvolvimento. Depois de desativar o AdBlock para o site, o aviso foi embora e as ferramentas de desenvolvimento começaram a mostrar os cookies novamente.

Para que a alteração tenha efeito, também foi necessário fechar as ferramentas de desenvolvimento e atualizar a página

Tarmo
fonte