Che cosa significa status = cancellato per una risorsa in Strumenti per gli sviluppatori di Chrome?


402

Cosa causerebbe la cancellazione di una pagina? Ho uno screenshot di Chrome Developer Tools.

Risorsa annullata

Questo succede spesso ma non ogni volta. Sembra che una volta memorizzate nella cache alcune altre risorse, un aggiornamento della pagina caricherà il LeftPane.aspx. E ciò che è davvero strano è che ciò accade solo in Google Chrome, non in Internet Explorer 8. Qualche idea sul perché Chrome annulli una richiesta?


13
Potresti essere in grado di ottenere maggiori dettagli da una traccia di net-internals . Ho avuto un problema simile e nel mio caso ho scoperto che la cancellazione era net::ERR_ABORTEDsotto le coperte. In tal caso, questo post spiega che "net :: ERR_ABORTED è destinato a essere generato solo quando un'azione di un utente provoca l'interruzione di un carico. Ciò può accadere quando una nuova navigazione ne interrompe una esistente o quando l'utente fa clic su STOP pulsante."
John McCarthy,

Grazie. Nel mio caso non è l'utente perché io sono l'utente. La pagina ha (anche) molti frame. Forse il frame src viene cambiato? È strano che non abbia mai visto accadere in IE. Esaminerò i net-internals.
Styfle

@ nondescript1 Ho fatto la cattura durante la riproduzione del bug e scaricato in un file. Ora ho un file json di 18.000 righe. Cosa sto cercando?
Styfle

3
Onestamente non lo so. In realtà mi sono imbattuto nella tua domanda quando stavo cercando ulteriori informazioni su status = cancellato me stesso, motivo per cui sto solo aggiungendo commenti e non una risposta;). Non ho motivo di pensare che sia legato alla memorizzazione nella cache. Sono più sospettoso di un'altra navigazione avviata qualcuno nella pagina. Quando l'ho visto, stavo cercando di avviare un download con window.open () che ha causato l'annullamento di un'altra richiesta del server. Nel mio caso, Firefox non aveva questo problema, ma Chrome sì.
John McCarthy,

1
Proprio così non è ovvio, una possibile causa di "(annullato)" nella colonna dello stato - sebbene sicuramente non sia l'unica possibile causa - è che l'URL fornito abbia restituito un errore 404 o altro. Forzare l'aggiornamento dell'URL in un'altra scheda alcune volte per assicurarsi che si stia caricando in modo coerente.
rakslice,

Risposte:


592

Abbiamo combattuto un problema simile in cui Chrome stava annullando le richieste di caricamento di oggetti all'interno di frame o iframe, ma solo in modo intermittente e sembrava dipendere dal computer e / o dalla velocità della connessione Internet.

Questa informazione è obsoleta di alcuni mesi, ma ho creato Chromium da zero, ho scavato nella fonte per trovare tutti i luoghi in cui le richieste potevano essere cancellate e ho schiaffeggiato punti di interruzione su tutti loro per eseguire il debug. Dalla memoria, gli unici posti in cui Chrome annullerà una richiesta:

  • L'elemento DOM che ha causato la richiesta è stato cancellato (ovvero viene caricato un IMG, ma prima che avvenisse il caricamento, è stato eliminato il nodo IMG)
  • Hai fatto qualcosa che ha reso superfluo il caricamento dei dati. (vale a dire che hai iniziato a caricare un iframe, quindi hai cambiato l'src o sovrascrivi il contenuto)
  • Esistono molte richieste che vanno allo stesso server e un problema di rete su richieste precedenti ha mostrato che le richieste successive non funzionavano (errore di ricerca DNS, richiesta precedente (stessa) risultata, ad esempio codice di errore HTTP 400, ecc.)

Nel nostro caso, l'abbiamo finalmente rintracciato in un frame cercando di aggiungere HTML a un altro frame, cosa che a volte accadeva prima che il frame di destinazione venisse caricato. Una volta toccato il contenuto di un iframe, non può più caricare la risorsa al suo interno (come farebbe a sapere dove inserirlo?) In modo da annullare la richiesta.


2
Molto informativo, grazie. Ho difficoltà a riprodurre questo bug perché una volta che le cose vengono memorizzate nella cache, non succede. Se imposta un punto di interruzione nel mio javascript, non succede. Il tuo primo punto elenco non è probabilmente il problema perché non vedo un elemento che viene eliminato. So per certo che non si tratta del punto 3. Cosa intendi con "Una volta toccato il contenuto di un iframe, non può più caricare la risorsa al suo interno"? Puoi fare un esempio?
Styfle

1
Interessante. Quindi devo trovare tutti document.writei messaggi in quel frame e assicurarmi che scrivano solo quando il frame è caricato. Lo segnerò come la risposta corretta poiché hai risposto al significato di quello stato.
styfle

3
@styfle Sì, ma può anche essere qualcosa di diverso da document.write. Qualunque cosa che provi a scrivere sul frame come appendChild o simili probabilmente lo causerebbe. Potresti voler creare un gestore onLoad in ogni frame che scriva truein una variabile, quindi altri frame lo cercano prima di toccare qualsiasi cosa.
Whamma,

14
Ho anche avuto problemi orribili con questo. Una cosa che ho scoperto che innesca costantemente questo se la risposta AJAX ha un codice di stato 301/302 e l'URL di reindirizzamento si trova su un altro dominio. Questa è una riproduzione coerente del problema per me.
eb80,

1
Per me è stato l'iframe aggiunto al corpo, quindi immediatamente rimosso dal corpo. Ho messo una pausa e il problema non c'era. Quindi metti un po 'di timeout (15 ms) e superalo. @whamma è davvero motivante il modo in cui hai affrontato il problema. Grazie per i dettagli così dettagliati. :-)
muhammed basil

53

status = cancellato può accadere anche su richieste Ajax su eventi JavaScript:

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

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

L'evento invia correttamente la richiesta, ma viene annullato (ma elaborato dal server). Il motivo è che gli elementi inviano moduli su eventi click, indipendentemente dal fatto che tu faccia richieste ajax sullo stesso evento click.

Per impedire la cancellazione della richiesta, JavaScript event.preventDefault (); deve essere chiamato:

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

3
Questo mi ha salvato, è stato il problema nel mio caso in cui ho usato angolari ng-clicksu un pulsante type="submit"e poi ho fatto un po 'di rete nella funzione chiamata. Chrome continuava a cancellare quella richiesta ...
Robin

1
Sfortunatamente non funziona per me. Qualche altro suggerimento?
Krzysztof Madej,

Anche Vaov mi ha salvato! Per un evento angolare ng-click avevo annidato richieste $ http e il secondo veniva annullato. Dopo aver impostato la linea predefinita di prevenzione, ha ripreso a funzionare, grazie.
Bahadir Tasdemir,

Grazie per questo. Sapevo che non si trattava di CORS o di DOM. Forse @whamma potrebbe aggiornare la loro risposta per includere questa come possibile causa di completezza :)
glidester,

Salve il signore !! Signore, sei un genio assoluto !! Sono stato salvato !!
Dilnoor Singh,

25

NB: assicurarsi di non disporre di alcun elemento del modulo di avvolgimento .

Ho avuto un problema simile in cui il mio pulsante con onclick = {} è stato racchiuso in un elemento del modulo. Quando si fa clic sul pulsante viene inviato anche il modulo, che ha rovinato tutto ...

Questa risposta non sarà probabilmente mai letta da nessuno, ma ho pensato perché non scriverla :)


Questa è stata la causa principale per me: un pulsante ha attivato POST due volte. Non volevo spostare il pulsante di fuori del elemento di modulo a causa della roba CSS quindi questa era la soluzione: stackoverflow.com/questions/932653/...
Nikolai Koudelia

Stesso problema. Per chiarire, avevo un pulsante contenuto in un modulo con un tipo di invio, ma avevo un onclick che stava facendo un modulo jquery, ajax submit. Ha funzionato in FF, ma ha fallito in Chome e IE e mi ha fatto impazzire fino a quando non l'ho trovato.
ChrisThompson,

Questo risolve un problema che mi era successo in un'app Vue.js in cui un @clickevento era associato a un <button>elemento all'interno di un wrapper di moduli. Evita di farlo a meno che tu non stia utilizzando il @submit.preventmodificatore di eventi di Vue .
Paul Wenzel,

Questo è stato il caso per me. Aggiungendo un type="button"tag al mio pulsante, il modulo non è stato inviato e l'evento annullato è stato evitato.
Brandon Medenwald

12

Un'altra cosa da cercare potrebbe essere l'estensione AdBlock, o estensioni in generale.

Ma "molte" persone hanno AdBlock ....

Per escludere le estensioni, apri una nuova scheda in incognito assicurandoti che "consenti in incognito sia disattivato" per le estensioni che desideri testare.


Esattamente quello che è successo. Attivato il plugin noscript e improvvisamente iFrame non si caricava più.
Margus Pala,

Per me, era il plugin Hola. Dopo la disabilitazione, le richieste non vengono più annullate.
Lenin Raj Rajasekaran,

1
Nel mio caso era l'estensione di Chrome "Notifiche errori JavaScript"
Alex

Ho provato a esaminare tutto e non ho ancora avuto fortuna con Angular 8, disabilitato tutti gli interni e ancora su una rete 3G lenta le chiamate precedenti vengono annullate. :(
born2net

10

Potresti voler controllare il tag di intestazione "X-Frame-Options". Se impostato su SAMEORIGIN o DENY, l'inserimento di iFrame verrà annullato da Chrome (e altri browser) in base alle specifiche .

Inoltre, tieni presente che alcuni browser supportano l'impostazione ALLOW-FROM, ma Chrome no.

Per risolvere questo problema, dovrai rimuovere il tag di intestazione "X-Frame-Options". Questo potrebbe lasciarti aperto agli attacchi clickjacking, quindi dovrai decidere quali sono i rischi e come mitigarli.


Questo era esattamente il mio problema. Questo thread ha buone risposte su come risolvere il problema: stackoverflow.com/questions/6666423/...
ToniTornado

8

Nel mio caso, ho scoperto che si tratta di impostazioni di timeout globali jquery, un timeout globale di installazione plug-in jquery a 500ms, in modo che quando la richiesta supera 500ms, Chrome annullerà la richiesta.


Incontrando lo stesso problema. Nel mio caso si tratta di uno sviluppo locale di WordPress / WooCommerce con server guest VirtualBox e alcune richieste AJAX di WooCommerce hanno un timeout AJAX predefinito di 5000 ms. Se qualcuno ha riscontrato lo stesso problema, questo timeout è stato definito nel includes/class-wc-frontend-scripts.phpfile.
Ivan Shatsky,

7

Ecco cosa mi è successo: il server stava restituendo un'intestazione "Posizione" non corretta per un reindirizzamento 302. Chrome non è riuscito a dirmi questo, ovviamente. Ho aperto la pagina in Firefox e ho immediatamente scoperto il problema. Bello avere più strumenti :)


Anche se molto ovvio sul motivo, ma comunque, questa è in realtà una risposta molto utile. Stavo modificando un vecchio codice di caffè e avevo completamente dimenticato che le virgolette singole non facevano l' #{}interpolazione, quindi l'URL risultante era malformato. Ma Chrome non mi ha detto nulla al riguardo.
Kumarharsh,

4

Un altro posto in cui abbiamo riscontrato lo (canceled)stato è in una particolare configurazione errata del certificato TLS. Se un sito come https://www.example.comconfigurato in modo errato in modo tale che il certificato non includa il www.ma è valido per https://example.com, Chrome annullerà questa richiesta e reindirizzerà automaticamente a quest'ultimo sito. Questo non è il caso di Firefox.

Esempio attualmente valido: https://www.pthree.org/


puoi semplicemente reindirizzare da un dominio non certificato a uno certificato? da nudo a www? o vedi sempre errori di annullamento o certificati?
Konstantin Vahrushev,

3

Una richiesta annullata mi è capitata durante il reindirizzamento tra pagine protette e non protette su domini separati all'interno di un iframe. La richiesta reindirizzata mostrata negli strumenti di sviluppo come una richiesta "annullata".

Ho una pagina con un iframe contenente un modulo ospitato dal mio gateway di pagamento. Quando è stato inviato il modulo nell'iframe, il gateway di pagamento reindirizzava a un URL sul mio server. Il reindirizzamento ha recentemente smesso di funzionare e alla fine è diventato una richiesta "annullata".

Sembra che Chrome (stavo usando Windows 7 Chrome 30.0.1599.101) non consentisse più a un reindirizzamento all'interno dell'iframe di passare a una pagina non sicura su un dominio separato. Per risolvere il problema, ho appena fatto in modo che tutte le richieste reindirizzate nell'iframe fossero sempre inviate a URL sicuri.

Quando ho creato una pagina di test più semplice con solo un iframe, c'era un avviso nella console (che in precedenza avevo perso o forse non avevo mostrato):

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

Il reindirizzamento si è trasformato in una richiesta annullata in Chrome su PC, Mac e Android. Non so se è specifico per la configurazione del mio sito Web (SagePay Low Profile) o se qualcosa è cambiato in Chrome.


Visualizzo un comportamento quasi identico in Chrome 30 quando utilizzo i servizi di pagamento ospitati da Datacash, ma nel mio caso il POST dal sito 3dsecure al sito Datacash viene annullato, nonostante entrambi siano https. Si sta rivelando qualcosa di misterioso.
Jason,

2

La versione di Chrome 33.0.1750.154 m annulla costantemente i carichi di immagine se sto usando l' emulazione mobile puntata sul mio host locale; in particolare con User Agent spoofing su (vs solo le impostazioni dello schermo).

Quando disattivo lo spoofing dell'agente utente; le richieste di immagini non vengono cancellate, vedo le immagini.

Ancora non capisco perché; nel primo caso, in cui la richiesta viene annullata, le intestazioni di richiesta (ATTENZIONE: vengono visualizzate le intestazioni provvisorie)

  • Accettare
  • Cache-Control
  • Pragma
  • Referente
  • User-Agent

In quest'ultimo caso, tutti quelli più altri come:

  • biscotto
  • Connessione
  • Ospite
  • Accept-Encoding
  • Accept-Language

alzata di spalle


2

Ho ricevuto questo errore in Chrome quando ho reindirizzato tramite JavaScript:

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

Come vedi ho dimenticato "http: //" . Dopo averlo aggiunto, ha funzionato.


2

Per il mio caso, ho avuto un'ancora con evento click come

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

Nell'evento click interno ho ricevuto alcune chiamate di rete, Chrome ha annullato la richiesta. L'ancoraggio ha hrefcon ""mezzi, ricarica la pagina e allo stesso tempo ha l'evento click con chiamata di rete che viene annullata. Ogni volta che lo sostituisco hrefcon vuoto come

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

Il problema è andato via!


2

Ecco un altro caso di richiesta annullata da Chrome, che ho appena riscontrato, che non è coperto da nessuna delle risposte lassù.

In breve
Certificato autofirmato non attendibile sul mio telefono Android.

Dettagli
Siamo in fase di sviluppo / debug. L'URL punta a un host autofirmato. Il codice è come:

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

Chrome ha appena annullato la richiesta in silenzio, senza lasciare indizi per i principianti allo sviluppo web come me per risolvere il problema. Una volta scaricato e installato il certificato utilizzando il telefono Android, il problema è scomparso.


2

Se si utilizzano alcune richieste HTTP basate su Observable come quelle incorporate in Angular (2+), la richiesta HTTP può essere annullata quando viene osservato l'osservable (cosa comune quando si utilizza l' switchMapoperatore RxJS 6 per combinare i flussi) . Nella maggior parte dei casi è sufficiente mergeMapinvece utilizzare l' operatore, se si desidera completare la richiesta.


1

Ho avuto la stessa identica cosa con due file CSS che erano memorizzati in un'altra cartella fuori dalla mia cartella css principale. Sto usando Expression Engine e ho scoperto che il problema era nelle regole nel mio file htaccess. Ho appena aggiunto la cartella a una delle mie condizioni e l'ha riparata. Ecco un esempio:

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

Quindi potrebbe valere la pena controllare il file htaccess per eventuali conflitti


1

Ho incorporato tutti i tipi di font, nonché woff , woff2 , ttf quando ho incorporato un font web nel foglio di stile. Di recente ho notato che Chrome annulla la richiesta di ttf e woff quando è presente woff2 . Al momento utilizzo la versione 66.0.3359.181 di Chrome, ma non sono sicuro quando Chrome abbia iniziato a cancellare tipi di carattere aggiuntivi.


1

Abbiamo avuto questo problema con il tag <button>nel modulo, che avrebbe dovuto inviare una richiesta Ajax da js. Ma questa richiesta è stata annullata, a causa del browser, che invia automaticamente il modulo su qualsiasi clic buttonall'interno del modulo.

Quindi, se vuoi davvero usare al button posto del normale divo spansulla pagina e vuoi inviare un modulo lanciando js, ​​dovresti impostare un ascoltatore con la preventDefaultfunzione.

per esempio

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

    e.preventDefault();

    //do ajax
    $.ajax({

     ...
    });

})

0

mi è successo lo stesso quando ho chiamato a. file js con $. ajax, e fai una richiesta ajax, quello che ho fatto è stato chiamare normalmente.


0

Nel mio caso il codice per mostrare la finestra del client di posta elettronica ha causato l'interruzione del caricamento delle immagini da parte di Chrome:

document.location.href = mailToLink;

spostandolo in $ (window) .load (function () {...}) invece di $ (function () {...}) ha aiutato.


0

In questo può aiutare chiunque mi sia imbattuto nello stato cancellato quando ho lasciato il ritorno falso; nel modulo invia. Ciò ha fatto sì che l'invio ajax fosse immediatamente seguito dall'azione di invio, che ha sovrascritto la pagina corrente. Il codice è mostrato sotto, con l'importante ritorno false alla fine.

$('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
});

Spero che aiuti qualcuno.


0

Per chiunque provenga da LoopbackJS e tenti di utilizzare il metodo di flusso personalizzato come indicato nell'esempio del grafico. Stavo ottenendo questo errore utilizzando un PersistedModel, passando a un Modelproblema di base risolto il mio problema di eventsourceannullamento dello stato.

Ancora una volta, questo è specificamente per l'API di loopback. E dal momento che questa è una risposta in alto e in alto su google ho pensato che avrei buttato questo nel mix di risposte.


0

Avevo affrontato lo stesso problema, da qualche parte nel profondo del nostro codice avevamo questo pseudocodice:

  • crea un iframe
  • caricamento di iframe inviare un modulo

  • Dopo 2 secondi, rimuovere l'iframe

pertanto, quando il server impiega più di 2 secondi per rispondere all'iframe sul quale stava scrivendo la risposta, il server è stato rimosso, ma la risposta doveva ancora essere scritta, ma non vi era alcun iframe da scrivere, quindi Chrome ha annullato la richiesta, quindi, per evitare ciò, mi sono assicurato che l'iframe fosse rimosso solo dopo che la risposta fosse finita, oppure puoi cambiare la destinazione in "_blank". Quindi uno dei motivi è: quando la risorsa (nel mio caso iframe) in cui stai scrivendo qualcosa, viene rimossa o eliminata prima di interrompere la scrittura, la richiesta verrà annullata


0

Per me lo stato "cancellato" era perché il file non esisteva. Strano il motivo per cui Chrome non viene visualizzato 404.


0

Per me è stato semplice come un percorso sbagliato. Vorrei suggerire che il primo passo nel debug sarebbe vedere se è possibile caricare il file indipendentemente da Ajax ecc.


0

Le richieste potrebbero essere state bloccate da un plug-in di protezione del monitoraggio.


0

Mi è successo quando ho caricato 300 immagini come immagini di sfondo. Immagino che una volta scaduto il primo, abbia annullato tutto il resto o raggiunto la massima richiesta simultanea. necessità di implementare un 5 alla volta



0

Nel mio caso, ha iniziato a venire dopo l'aggiornamento di Chrome 76.

A causa di qualche problema nel mio codice JS, window.location veniva aggiornato più volte e ciò ha comportato l'annullamento della richiesta precedente. Sebbene il problema fosse presente da prima, Chrome ha iniziato a cancellare la richiesta dopo l'aggiornamento alla versione 76.


0

Ho avuto lo stesso problema durante l'aggiornamento di un record. All'interno di save () stavo preparando i dati grezzi presi dal modulo per abbinare il formato del database (facendo un sacco di mappatura dei valori degli enum, ecc.), E questo a intermittenza annullava la richiesta put. l'ho risolto estraendo i dati preimpostati da save () e creando un metodo dataPrep () dedicato da esso. Ho trasformato questi datiPrep in asincrono e attendo tutta la conversione dei dati ad alta intensità di memoria. Quindi restituisco i dati preparati al metodo save () che potrei usare nel client http put. Mi sono assicurato di attendere su dataPrep () prima di chiamare il metodo put:

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

Ciò ha risolto l'annullamento intermittente della richiesta.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.