O que status = cancelado para um recurso significa nas Ferramentas do desenvolvedor do Chrome?


402

O que faria com que uma página fosse cancelada? Tenho uma captura de tela das Ferramentas do desenvolvedor do Chrome.

Recurso cancelado

Isso acontece frequentemente, mas não sempre. Parece que depois que outros recursos são armazenados em cache, uma atualização de página carregará o LeftPane.aspx. E o que é realmente estranho é que isso acontece apenas no Google Chrome, não no Internet Explorer 8. Alguma idéia de por que o Chrome cancelaria uma solicitação?


13
Você poderá obter mais detalhes de um rastreamento net-internals . Eu tive um problema semelhante e, no meu caso, descobri que o cancelamento estava net::ERR_ABORTEDoculto. Se for esse o caso, esta postagem explica que "net :: ERR_ABORTED deve ser gerado apenas quando uma ação do usuário faz com que uma carga seja interrompida. Isso pode acontecer quando uma nova navegação interrompe uma já existente ou quando o usuário clica em STOP botão."
22412 John McCarthy

Obrigado. No meu caso, não é o usuário, porque eu sou o usuário. A página possui (demais) muitos quadros. Talvez o quadro src seja alterado? É estranho que eu nunca tenha visto isso acontecer no IE. Vou dar uma olhada em net-internals.
Styfle

@ nondescript1 Fiz a captura enquanto reproduzia o bug e despejava em um arquivo. Agora eu tenho um arquivo json de 18.000 linhas. O que estou procurando?
Styfle

3
Sinceramente, não sei. Na verdade, deparei com sua pergunta quando eu estava procurando mais informações sobre status = cancelado, que é a razão pela qual estou apenas adicionando comentários e não uma resposta;). Não tenho motivos para pensar que esteja relacionado ao cache. Suspeito que outra navegação tenha iniciado alguém na página. Quando vi isso, estava tentando iniciar um download com window.open () que causou o cancelamento de outra solicitação do servidor. No meu caso, o Firefox não teve esse problema, mas o Chrome.
22412 John McCarthy

11
Para que isso não seja preciso dizer, uma causa possível de "(cancelado)" na coluna de status - embora definitivamente não seja a única causa possível - é que o URL fornecido retornou um erro 404 ou outro erro. Atualize à força o URL em outra guia algumas vezes para garantir que ele esteja carregando de forma consistente.
rakslice

Respostas:


592

Lutamos contra um problema semelhante em que o Chrome estava cancelando solicitações para carregar coisas dentro de quadros ou iframes, mas apenas de forma intermitente e parecia dependente do computador e / ou da velocidade da conexão com a Internet.

Essas informações estão desatualizadas há alguns meses, mas eu construí o Chromium do zero, procurei na fonte todos os locais onde as solicitações podiam ser canceladas e coloquei pontos de interrupção em todos eles para depuração. De memória, os únicos lugares onde o Chrome cancelará uma solicitação:

  • O elemento DOM que causou a solicitação foi excluído (ou seja, um IMG está sendo carregado, mas antes que o carregamento acontecesse, você excluiu o nó IMG)
  • Você fez algo que tornou desnecessário o carregamento dos dados. (ou seja, você começou a carregar um iframe e depois mudou o src ou substituiu o conteúdo)
  • Existem muitas solicitações indo para o mesmo servidor, e um problema de rede em solicitações anteriores mostrou que solicitações subsequentes não estavam funcionando (erro de pesquisa de DNS, solicitação anterior (mesma) resultou, por exemplo, código de erro HTTP 400, etc.)

No nosso caso, finalmente o rastreamos até um quadro, tentando anexar HTML a outro quadro, o que às vezes acontecia antes do carregamento do quadro de destino. Depois que você toca no conteúdo de um iframe, ele não pode mais carregar o recurso nele (como saberia onde colocá-lo?) E cancela a solicitação.


2
Muito informativo, obrigado. Tenho dificuldade em reproduzir esse bug porque, uma vez que as coisas ficam armazenadas em cache, isso não acontece. Se definir um ponto de interrupção no meu javascript, isso não acontece. Seu primeiro marcador provavelmente não é o problema, porque não vejo um elemento sendo excluído. Eu sei que não é o ponto 3. O que você quer dizer com "Depois de tocar no conteúdo de um iframe, ele não pode mais carregar o recurso nele"? Você pode dar um exemplo?
Styfle 19/11/2012

11
Interessante. Então, preciso encontrar todos os document.writes nesse quadro e garantir que eles escrevam apenas quando o quadro estiver carregado. Marcarei isso como a resposta correta, pois você respondeu ao significado desse status.
styfle

3
@styfle Sim, mas também pode ser outra coisa que document.write. Qualquer coisa que tente gravar no quadro como appendChild ou similar provavelmente causaria isso. Você pode criar um manipulador onLoad em cada quadro que grava trueem alguma variável, depois outros quadros o procuram antes de tocar em qualquer coisa.
Whamma 19/11/2012

14
Eu também tive problemas horríveis com isso. Descobri uma coisa que sempre aciona isso se a resposta AJAX tiver um código de status 301/302 e a URL de redirecionamento estiver em outro domínio. Esta é uma reprodução consistente do problema para mim.
Eb80

11
Para mim, foi iframe anexado ao corpo e imediatamente removido do corpo. Eu coloquei uma quebra de linha e problema não estava lá. Então, ponha um tempo limite (15 ms) e supere-o. @whamma está realmente motivando a maneira como você lidou com o problema. Obrigado por ótimos detalhes. :-)
muhammed basil

53

status = cancelado também pode ocorrer em solicitações de ajax em eventos JavaScript:

<script>
  $("#call_ajax").on("click", function(event){
     $.ajax({
        ...    
     });
  });
</script>

<button id="call_ajax">call</button> 

O evento envia a solicitação com êxito, mas é cancelado (mas processado pelo servidor). O motivo é que os elementos enviam formulários nos eventos de clique, independentemente de você fazer alguma solicitação de ajax no mesmo evento de clique.

Para impedir que a solicitação seja cancelada, JavaScript event.preventDefault (); tem que ser chamado:

<script>
  $("#call_ajax").on("click", function(event){
     event.preventDefault();
     $.ajax({
        ...    
     });
  });
</script>

3
Isso me salvou, foi o problema no meu caso em que usei angulares ng-clickem um botão type="submit"e depois fiz algumas redes na função chamada. Chrome manteve cancelar esse pedido ...
Robin

11
Infelizmente, isso não funciona para mim. Alguma outra dica?
Krzysztof Madej

Vaov me salvou também! Para um evento ng-click angular, aninhei solicitações $ http e a segunda estava sendo cancelada. Depois de definir a linha de prevenção padrão, ela voltou a funcionar, obrigado.
Bahadir Tasdemir 20/09/16

Obrigado por isso. Eu sabia que não era um problema de CORS ou DOM. Talvez @whamma poderia atualizar sua resposta para incluir isso como possível causa para a integralidade :)
glidester

Salve o senhor !! Senhor, você é um gênio absoluto !! Eu fui salvo !!
Dilnoor Singh

25

NB: Verifique se você não possui nenhum elemento de formulário de quebra automática .

Eu tive um problema semelhante em que meu botão com onclick = {} estava envolvido em um elemento de formulário. Ao clicar no botão, o formulário também é enviado e isso estragou tudo ...

Essa resposta provavelmente nunca será lida por ninguém, mas eu pensei por que não escrever :)


Esta foi a causa raiz para mim - um botão acionou o POST duas vezes. Eu não queria para mover o botão para fora do elemento de formulário causa de coisas CSS assim que esta foi a solução: stackoverflow.com/questions/932653/...
Nikolai Koudelia

Mesmo problema. Para esclarecer, eu tinha um botão contido em um formulário com um tipo de envio, mas tinha um onclick que fazia um envio de formulário jquery, envio de ajax. Funcionou em FF, mas falhou no chome e no IE, e me deixou louco até encontrá-lo.
ChrisThompson

Isso corrige um problema que aconteceu comigo em um aplicativo Vue.js. em que um @clickevento foi vinculado a um <button>elemento dentro de um invólucro de formulário. Evite fazer isso, a menos que você esteja usando o @submit.preventmodificador de eventos do Vue .
Paul Wenzel

Esse foi o meu caso. Ao adicionar uma type="button"tag ao meu botão, o formulário não foi enviado e o evento cancelado foi evitado.
Brandon Medenwald

12

Outro aspecto a ser observado pode ser a extensão do AdBlock, ou extensões em geral.

Mas "muitas" pessoas têm o AdBlock ...

Para descartar extensões, abra uma nova guia no modo anônimo, certificando-se de que "permitir o modo anônimo esteja desativado" para as extensões que você deseja testar.


Exatamente o que aconteceu. Ativado o plugin noscript e de repente o iFrame não estava mais carregando.
Margus Pala

Para mim, foi o plugin Hola. Após a desativação, as solicitações não são mais canceladas.
Lenin Raj Rajasekaran

11
No meu caso, era a extensão do cromo "JavaScript Error Notifier"
Alex

Tentei analisar tudo e ainda não tive sorte com o Angular 8, desabilitei todos os ramais e ainda na rede 3G lenta as chamadas anteriores são canceladas. :(
born2net 11/01

10

Convém verificar a tag de cabeçalho "X-Frame-Options". Se estiver definido como SAMEORIGIN ou DENY, a inserção do iFrame será cancelada pelo Chrome (e outros navegadores) de acordo com as especificações .

Além disso, observe que alguns navegadores suportam a configuração ALLOW-FROM, mas o Chrome não.

Para resolver isso, você precisará remover a tag de cabeçalho "X-Frame-Options". Isso pode deixá-lo aberto a ataques de clickjacking, para que você decida quais são os riscos e como mitigá-los.


Este foi exatamente o meu problema. Esta discussão tem boas respostas sobre como corrigi-lo: stackoverflow.com/questions/6666423/...
ToniTornado

8

No meu caso, descobri que são as configurações de tempo limite global do jquery, um plug-in do jquery configura o tempo limite global de 500 ms, para que quando a solicitação exceda 500 ms, o chrome cancelará a solicitação.


Correndo para o mesmo problema. No meu caso, é um desenvolvimento local do WordPress / WooCommerce com o servidor convidado do VirtualBox, e algumas solicitações do WooCommerce AJAX têm um tempo limite predefinido de 5000ms para o AJAX. Se alguém tiver o mesmo problema, esse tempo limite será definido no includes/class-wc-frontend-scripts.phparquivo.
Ivan Shatsky 6/03

7

Aqui está o que aconteceu comigo: o servidor estava retornando um cabeçalho "Local" malformado para um redirecionamento 302. O Chrome falhou em me dizer isso, é claro. Abri a página no firefox e descobri imediatamente o problema. É bom ter várias ferramentas :)


Embora muito óbvio quanto ao motivo, mas ainda assim, essa é realmente uma resposta muito útil. Eu estava editando um código antigo de café e tinha esquecido completamente que aspas simples não faziam a #{}interpolação, portanto o URL resultante estava malformado. Mas o Chrome não me disse nada sobre isso.
kumarharsh

4

Outro local em que encontramos o (canceled)status está em uma configuração incorreta de certificado TLS específica. Se um site como este https://www.example.comestiver configurado incorretamente, de forma que o certificado não inclua o www.mas seja válido https://example.com, o chrome cancelará esta solicitação e será automaticamente redirecionado para o último site. Este não é o caso do Firefox.

Exemplo atualmente válido: https://www.pthree.org/


você pode basicamente redirecionar do domínio sem certificado para o certificado? de nu para www? ou você sempre vê erros de certificado ou cancelados?
Konstantin Vahrushev

3

Ocorreu uma solicitação cancelada ao redirecionar entre páginas seguras e não seguras em domínios separados dentro de um iframe. A solicitação redirecionada mostrou nas ferramentas de desenvolvimento como uma solicitação "cancelada".

Eu tenho uma página com um iframe contendo um formulário hospedado pelo meu gateway de pagamento. Quando o formulário no iframe era enviado, o gateway de pagamento era redirecionado para um URL no meu servidor. O redirecionamento recentemente parou de funcionar e acabou como uma solicitação "cancelada".

Parece que o Chrome (eu estava usando o Windows 7 Chrome 30.0.1599.101) não permitia mais que um redirecionamento dentro do iframe fosse para uma página não segura em um domínio separado. Para corrigi-lo, verifiquei se as solicitações redirecionadas no iframe sempre eram enviadas para URLs seguros.

Quando criei uma página de teste mais simples com apenas um iframe, havia um aviso no console (que eu havia perdido anteriormente ou talvez não aparecesse):

[Blocked] The page at https://mydomain.com/Payment/EnterDetails ran insecure content from http://mydomain.com/Payment/Success

O redirecionamento se transformou em uma solicitação cancelada no Chrome no PC, Mac e Android. Não sei se é específico da configuração do meu site (SagePay Low Profile) ou se algo mudou no Chrome.


Estou vendo um comportamento quase idêntico no Chrome 30 ao usar serviços de pagamento hospedados pelo Datacash, mas, no meu caso, o POST do site 3dsecure para o site do Datacash é cancelado, apesar de ambos serem https. Está provando ser um mistério.
23413 Jason

2

A versão 33.0.1750.154 do Chrome cancela consistentemente as cargas de imagem se eu estiver usando a emulação móvel apontada no meu host local; especificamente com o User Agent spoofing em (vs. apenas configurações de tela).

Quando desligo a falsificação do User Agent; solicitações de imagem não são canceladas, eu vejo as imagens.

Eu ainda não entendo o porquê; no primeiro caso, em que a solicitação é cancelada, os cabeçalhos da solicitação (CUIDADO: os cabeçalhos provisórios são mostrados) têm apenas

  • Aceitar
  • Controle de cache
  • Pragma
  • Referer
  • Agente de usuário

No último caso, todos esses e outros como:

  • Bolacha
  • Conexão
  • Hospedeiro
  • Accept-Encoding
  • Accept-Language

Dar de ombros


2

Eu recebi esse erro no Chrome quando redirecionei via JavaScript:

<script>
    window.location.href = "devhost:88/somepage";
</script>

Como você vê, eu esqueci o 'http: //' . Depois que eu adicionei, funcionou.


2

No meu caso, eu tinha uma âncora com o evento click como

<a href="" onclick="somemethod($index, hour, $event)">

Evento de clique interno Recebi uma ligação de rede, o Chrome cancelou a solicitação. A âncora tem hrefcom ""os meios, ele recarrega a página e ao mesmo tempo ele tem clique evento com chamada de rede que é cancelado. Sempre que eu substituir o hrefpor vazio como

<a href="javascript:void(0)" onclick="somemethod($index, hour, $event)">

O problema foi embora!


2

Aqui está outro caso de solicitação cancelada pelo chrome, que acabei de encontrar, que não é abordada por nenhuma das respostas lá em cima.

Em poucas palavras
Certificado autoassinado não confiável no meu telefone Android.

Detalhes
Estamos em fase de desenvolvimento / depuração. O URL está apontando para um host autoassinado. O código é como:

location.href = 'https://some.host.com/some/path'

O Chrome cancelou a solicitação silenciosamente, sem deixar pistas para o novato no desenvolvimento da web como eu para corrigir o problema. Depois que eu baixei e instalei o certificado usando o telefone Android, o problema desapareceu.


2

Se você usar algumas solicitações HTTP baseadas em Observable, como as incorporadas em Angular (2+), a solicitação HTTP poderá ser cancelada quando a observável for cancelada (coisa comum quando você está usando o switchMapoperador RxJS 6 para combinar os fluxos) . Na maioria dos casos, basta usar o mergeMapoperador, se você deseja que a solicitação seja concluída.


1

Eu tinha exatamente a mesma coisa com dois arquivos CSS que foram armazenados em outra pasta fora da minha pasta css principal. Estou usando o Expression Engine e descobri que o problema estava nas regras do meu arquivo htaccess. Acabei de adicionar a pasta a uma das minhas condições e ela foi corrigida. Aqui está um exemplo:

RewriteCond %{REQUEST_URI} !(images|css|js|new_folder|favicon.ico)

Portanto, pode valer a pena verificar seu arquivo htaccess quanto a possíveis conflitos


1

Eu incorporei todos os tipos de fonte, bem como woff , woff2 , ttf quando incorporar uma fonte da Web na folha de estilos. Recentemente, notei que o Chrome cancela a solicitação de ttf e woff quando woff2 está presente. Eu uso a versão 66.0.3359.181 do Chrome no momento, mas não tenho certeza quando o Chrome começou a cancelar tipos de fonte extras.


1

Tivemos esse problema com a tag <button>no formulário, que deveria enviar uma solicitação ajax de js. Mas essa solicitação foi cancelada, devido ao navegador, que envia o formulário automaticamente a qualquer clique embutton dentro do formulário.

Portanto, se você realmente deseja usar em button vez de regular divou spanna página e deseja enviar o formulário throw js - você deve configurar um ouvinte compreventDefault função

por exemplo

$('button').on('click', function(e){

    e.preventDefault();

    //do ajax
    $.ajax({

     ...
    });

})

0

aconteceu comigo o mesmo ao chamar um. arquivo js com $. ajax e faça uma solicitação de ajax, o que eu fiz foi chamar normalmente.


0

No meu caso, o código para mostrar a janela do cliente de email fez com que o Chrome parasse de carregar imagens:

document.location.href = mailToLink;

movê-lo para $ (window) .load (function () {...}) em vez de $ (function () {...}) ajudou.


0

Isso pode ajudar alguém que me deparei com o status cancelado quando deixei de fora o retorno false; no formulário enviar. Isso fez com que o envio do ajax fosse imediatamente seguido pela ação de envio, que substituiu a página atual. O código é mostrado abaixo, com o importante retorno false no final.

$('form').submit(function() {

    $.validator.unobtrusive.parse($('form'));
    var data = $('form').serialize();
    data.__RequestVerificationToken = $('input[name=__RequestVerificationToken]').val();

    if ($('form').valid()) {
        $.ajax({
            url: this.action,
            type: 'POST',
            data: data,
            success: submitSuccess,
            fail: submitFailed
        });
    }
    return false;       //needed to stop default form submit action
});

Espero que ajude alguém.


0

Para quem vem do LoopbackJS e tenta usar o método de fluxo personalizado, como fornecido no exemplo de gráfico. Eu estava recebendo esse erro usando um PersistedModel, alternando para um problema básico Modelcorrigidoeventsource cancelamento status.

Novamente, isso é especificamente para a API de loopback. E como essa é uma das principais respostas e as principais do google, achei que jogaria isso na mistura de respostas.


0

Eu havia enfrentado o mesmo problema; em algum lugar profundo do nosso código, tínhamos esse pseudocódigo:

  • crie um iframe
  • carga de iframe enviar um formulário

  • Após 2 segundos, remova o iframe

portanto, quando o servidor leva mais de 2 segundos para responder o iframe no qual o servidor estava gravando a resposta, foi removido, mas a resposta ainda estava para ser gravada, mas não havia iframe para gravar, portanto, o chrome cancelou a solicitação, portanto, para evitar isso, certifiquei-me de que o iframe seja removido somente depois que a resposta terminar, ou você pode alterar o destino para "_blank". Portanto, um dos motivos é: quando o recurso (iframe no meu caso) em que você está escrevendo algo é removido ou excluído antes de parar de escrever, a solicitação será cancelada


0

Para mim, o status 'cancelado' era porque o arquivo não existia. Estranho porque o cromo não aparece 404.


0

Era tão simples quanto um caminho incorreto para mim. Eu sugeriria que o primeiro passo na depuração seria verificar se você pode carregar o arquivo independentemente do ajax etc.


0

As solicitações podem ter sido bloqueadas por um plug-in de proteção de rastreamento.


0

Aconteceu comigo ao carregar 300 imagens como imagens de fundo. Acho que assim que o primeiro tempo expirou, cancelou todo o resto ou atingiu o máximo de solicitação simultânea. precisa implementar um 5 de cada vez



0

No meu caso, ele começou a vir após a atualização do Chrome 76.

Devido a algum problema no meu código JS, window.location foi atualizado várias vezes, o que resultou no cancelamento de uma solicitação anterior. Embora o problema estivesse presente antes, o chrome começou a cancelar a solicitação após a atualização para a versão 76.


0

Eu tive o mesmo problema ao atualizar um registro. Dentro do save (), eu estava preparando os dados brutos retirados do formulário para corresponder ao formato do banco de dados (fazendo muito mapeamento de valores de enumerações, etc.), e isso cancela intermitentemente a solicitação de colocação. Eu resolvi retirando a preparação de dados do save () e criando um método dataPrep () dedicado. Transformei este dataPrep em assíncrono e aguardo toda a conversão de dados com uso intensivo de memória. Em seguida, retorno os dados preparados para o método save () que eu poderia usar no cliente http put. Certifiquei-me de aguardar dataPrep () antes de chamar o método put:

aguardar dataToUpdate = aguardar dataPrep (); http.put (apiUrl, dataToUpdate);

Isso resolveu o cancelamento intermitente da solicitação.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.