Chromeデベロッパーツールでリソースのstatus = canceledとはどういう意味ですか?


402

ページがキャンセルされる原因は何ですか?Chromeデベロッパーツールのスクリーンショットを持っています。

キャンセルされたリソース

これは頻繁に発生しますが、毎回ではありません。他のリソースがキャッシュされると、ページを更新するとLeftPane.aspxが読み込まれるようです。そして、本当に奇妙なのは、これがInternet Explorer 8ではなく、Google Chromeでのみ発生することです。Chromeがリクエストをキャンセルする理由は何ですか?


13
net-internalsトレースから詳細を取得できる場合があります。私は同様の問題を抱えており、私のケースではキャンセルさnet::ERR_ABORTEDれたことがカバーされていました。その場合、この投稿では、「net :: ERR_ABORTEDは、ユーザーアクションによって負荷が中断された場合にのみ生成されることを意図しています。これは、新しいナビゲーションが既存のナビゲーションを中断したとき、またはユーザーがSTOPをクリックしたときに発生する可能性があります。ボタン。"
ジョンマッカーシー、

ありがとう。私の場合はユーザーなので、ユーザーではありません。ページのフレームが多すぎます。フレームsrcが変更されたのでしょうか?IEで発生するのを見たことがないのは奇妙なことです。ネット内部について調べます。
スタイル

@ nondescript1バグを再現しながらキャプチャを行い、ファイルにダンプしました。これで18,000行のjsonファイルができました。何を探していますか?
スタイフル

3
正直わからない。自分でstatus = canceledの詳細情報を探していたときに、実際に質問に出くわしました。これが、コメントではなく回答のみを追加する理由です;)私はそれがキャッシュに関連していると考える理由はありません。別のナビゲーションがページ内の誰かを開始したことに私はもっと疑いがあります。これを見たとき、window.open()でダウンロードを開始しようとしていたため、別のサーバー要求がキャンセルされました。私の場合、Firefoxにはこの問題はありませんでしたが、Chromeにはありました。
ジョンマッカーシー

1
言うまでもなく、ステータス列の「(cancelled)」の考えられる原因の1つは、間違いなく唯一の原因ではありませんが、指定されたURLが404またはその他のエラーを返したことです。別のタブでURLを数回強制的に更新して、URLが常に読み込まれていることを確認します。
rakslice 2013

回答:


592

Chromeがフレームまたはiframe内にあるものをロードするリクエストをキャンセルするという同様の問題と闘いましたが、断続的にしか発生せず、コンピューターやインターネット接続の速度に依存しているように見えました。

この情報は数か月前のものですが、Chromiumを最初から作成し、ソースを掘り下げて、リクエストがキャンセルされる可能性のあるすべての場所を見つけ、それらすべてにブレークポイントを設定してデバッグしました。メモリから、Chromeがリクエストをキャンセルする唯一の場所:

  • 要求が行われる原因となったDOM要素が削除されました(つまり、IMGがロードされていますが、ロードが発生する前にIMGノードが削除されました)
  • データのロードが不要になるような処理を行いました。(つまり、iframeのロードを開始し、srcを変更するか、内容を上書きします)
  • 同じサーバーに送信されるリクエストが多数あり、以前のリクエストのネットワークの問題により、後続のリクエストが機能しないことが示されました(DNSルックアップエラー、以前の(同じ)リクエストの結果、たとえばHTTP 400エラーコードなど)

私たちのケースでは、最終的に、HTMLを別のフレームに追加しようとする1つのフレームまで追跡しました。これは、宛先フレームがロードされる前に発生することもありました。iframeのコンテンツに触れると、iframeにリソースを読み込むことができなくなり(どこに配置するかをどのように判断するのでしょうか)、要求をキャンセルします。


2
とても参考になります、ありがとう。いったんキャッシュされるとそれが起こらないので、私はこのバグを再現するのに苦労しています。私のJavaScriptにブレークポイントを設定した場合、それは起こりません。要素が削除されていないので、最初の箇条書きはおそらく問題ではありません。私はそれが箇条書き3ではないという事実を知っています。「iframeのコンテンツに触れると、リソースをロードできなくなります」とはどういう意味ですか?例を挙げていただけますか?
スタイフル

1
面白い。そのdocument.writeため、そのフレームのすべてのを検索し、フレームが読み込まれたときにのみ書き込むようにする必要があります。あなたがそのステータスの意味に答えたので、これを正しい答えとしてマークします。
スタイフル

3
@styfleはい。ただし、document.write以外の場合もあります。appendChildなどのフレームに書き込もうとすると、これが発生する可能性があります。true変数に書き込むフレームごとにonLoadハンドラを作成し、他のフレームが最初にそれを検索してから、何かに触れることができます。
whamma '19年

14
私もこれに関して恐ろしい問題を抱えていました。AJAX応答にステータスコード301/302があり、リダイレクトURLが別のドメインにある場合に、これが常にトリガーされることがわかりました。これは私にとって問題の一貫した再現です。
eb80 2013年

1
私にとっては、iframeが本文に追加され、すぐに本文から削除されました。改行を入れても問題はありませんでした。したがって、タイムアウト(15ミリ秒)を入れて、それを克服します。@whammaそれはあなたが問題に取り組む方法を本当に動機づけています。このような非常に詳細な詳細をありがとう。:-)
ムハンマドバジル

53

status = canceledは、JavaScriptイベントのajaxリクエストでも発生する可能性があります。

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

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

イベントはリクエストを正常に送信しますが、その後キャンセルされます(サーバーによって処理されます)。その理由は、同じクリックイベントでajaxリクエストを行っても、要素がクリックイベントでフォームを送信するためです。

リクエストがキャンセルされないようにするには、JavaScript event.preventDefault(); 呼び出す必要があります:

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

3
これは私を救いました、私がng-clickボタンでangularを使用type="submit"して、呼び出された関数でいくつかのネットワーキングを行った場合の問題でした。Chromeはそのリクエストをキャンセルし続けました...
Robin

1
残念ながら私にはうまくいきません。他に何かヒントはありますか?
Krzysztof Madej

Vaovも私を救った!角度のあるng-clickイベントでは、$ httpリクエストをネストしていて、2番目のリクエストがキャンセルされていました。防止デフォルト行を設定した後、ありがとうございます。
バハディールTasdemir 2016

これをありがとう。CORSでもDOMの問題でもないことはわかっていました。おそらく、@ whammaは回答を更新して、これを完全性の考えられる原因として含めることができます:)
glidester '20年

主よろしく!! サー、あなたは絶対的な天才です!! 助かった!!
Dilnoor Singh

25

注意:ラッピングフォーム要素がないことを確認してください

onclick = {}が設定されたボタンがフォーム要素でラップされるという同様の問題がありました。ボタンをクリックするとフォームも送信され、それがすべてを台無しにしてしまいます...

この答えはおそらく誰にも読まれないでしょうが、私はそれを書いてみませんか:)


これが私にとって根本的な原因でした-ボタンがPOSTを2回トリガーしました。これは解決策だったので、私はので、CSSのもののフォーム要素のボタンを移動したくなかった:stackoverflow.com/questions/932653/...
ニコライKoudelia

同じ問題。明確にするために、送信タイプのフォームにボタンが含まれていましたが、jqueryフォーム送信、ajax送信を実行するonclickがありました。それはFFで機能しましたが、chomeとIEで失敗しました。
ChrisThompson

これにより、フォームラッパー内の要素に@clickイベントがバインドされたVue.jsアプリで発生した問題が修正され<button>ます。Vueの@submit.preventイベント修飾子を使用している場合を除き、これを行わないでください。
ポール

これは私にとって事実でした。type="button"ボタンタグにを追加することにより、フォームは送信されず、キャンセルされたイベントは回避されました。
ブランドンメデンヴァルト

12

もう1つの注意点は、AdBlock拡張機能、または一般的な拡張機能です。

しかし、「たくさんの」人々がAdBlockを持っています...

拡張機能を除外するには、シークレットモードで新しいタブを開き、テストする拡張機能に対して「シークレットモードを許可」がオフになっていることを確認します。


正確に何が起こったのか。noscriptプラグインをオンにすると、突然iFrameが読み込まれなくなりました。
Margus Pala 2017

私にとっては、それはHolaプラグインでした。無効にした後、リクエストはキャンセルされなくなりました。
Lenin Raj Rajasekaran 2017

1
私の場合、それは「JavaScript Errors Notifier」クローム拡張でした
Alex

私はすべてを調べてみましたが、まだAngular 8でうまくいかなかったため、すべての拡張機能を無効にしましたが、遅い3Gネットワ​​ークでは以前の呼び出しはキャンセルされました。:(
born2net

10

「X-Frame-Options」ヘッダータグを確認することをお勧めします。SAMEORIGINまたはDENYに設定されている場合、iFrameの挿入は仕様に従ってChrome(およびその他のブラウザー)によってキャンセルされます

また、一部のブラウザーはALLOW-FROM設定をサポートしていますが、Chromeはサポートしていません。

これを解決するには、「X-Frame-Options」ヘッダータグを削除する必要があります。これにより、クリックジャッキング攻撃未然に防ぐことができるため、リスクとは何か、およびリスクを軽減する方法を決定する必要があります。


これはまさに私の問題でした。このスレッドはそれを修正する方法についての良い答えを持っていますstackoverflow.com/questions/6666423/...
ToniTornado

8

私の場合、jqueryのグローバルタイムアウト設定であり、jqueryプラグインがグローバルタイムアウトを500ミリ秒に設定しているため、リクエストが500ミリ秒を超えると、Chromeがリクエストをキャンセルします。


同じ問題が発生しています。私の場合、これはVirtualBoxゲストサーバーを使用したローカルのWordPress / WooCommerce開発であり、一部のWooCommerce AJAXリクエストには、5000ミリ秒の事前定義されたAJAXタイムアウトがあります。誰かが同じ問題に遭遇した場合、このタイムアウトはincludes/class-wc-frontend-scripts.phpファイルに定義されています。
Ivan Shatsky

7

これが私に起こったことです:サーバーが302リダイレクトの不正な「Location」ヘッダーを返していました。もちろん、Chromeはこれを教えてくれませんでした。このページをFirefoxで開いたところ、すぐに問題が見つかりました。複数のツールがあるのは素晴らしい:)


その理由については非常に明白ですが、それでも、これは実際には非常に役立つ回答です。私はいくつかの古いcoffeescriptコードを編集していて、一重引用符が#{}補間を行わないことを完全に忘れていたので、結果のURLは不正な形式でした。しかし、Chromeはそれについて何も教えてくれませんでした。
kumarharsh 2016年

4

この(canceled)ステータスに遭遇したもう1つの場所は、特定のTLS証明書の設定ミスです。などのサイトのhttps://www.example.com設定が誤っており、証明書にが含まれていないwww.がに対して有効である場合https://example.com、Chromeはこのリクエストをキャンセルし、自動的に後者のサイトにリダイレクトします。これはFirefoxには当てはまりません

現在有効な例:https : //www.pthree.org/


基本的に、証明書以外のドメインから証明書のあるドメインにリダイレクトできますか?全裸からwwwへ?または、キャンセルまたは証明書エラーが常に表示されますか?
Konstantin Vahrushev 2018

3

iframe内の個別のドメインにあるセキュアページと非セキュアページの間でリダイレクトするときに、キャンセルされたリクエストが発生しました。リダイレクトされたリクエストは、「キャンセルされた」リクエストとして開発ツールに表示されました。

支払いゲートウェイでホストされているフォームを含むiframeのあるページがあります。iframe内のフォームが送信されると、支払いゲートウェイは私のサーバーのURLにリダイレクトされます。リダイレクトは最近動作を停止し、代わりに「キャンセルされた」リクエストとして終了しました。

Chrome(Windows 7 Chrome 30.0.1599.101を使用していた)では、iframe内のリダイレクトが別のドメインの安全でないページに移動することを許可しないようです。これを修正するために、iframe内のリダイレクトされたリクエストが常に安全なURLに送信されるようにしました。

iframeのみのより簡単なテストページを作成すると、コンソールに警告が表示されました(以前に見逃していたか、表示されなかった可能性があります)。

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

PC、Mac、AndroidのChromeでは、リダイレクトがキャンセルされたリクエストになりました。それが私のウェブサイトのセットアップ(SagePay Low Profile)に固有のものか、Chromeで何かが変更されたかはわかりません。


Chrome 30でDatacashのホストされた支払いサービスを使用するとほぼ同じ動作が見られますが、私の場合、3dsecureサイトからDatacashサイトへのPOSTが両方ともhttpsであるにもかかわらずキャンセルされます。それは謎の何かであることが証明されています。
Jason

2

Chromeのバージョン33.0.1750.154 m では、ローカルホストをポイントしたモバイルエミュレーションを使用している場合、画像のロードが常にキャンセルされます。特にユーザーエージェントのスプーフィングがオンの場合(画面の設定のみ)。

ユーザーエージェントのなりすましをオフにすると、画像リクエストはキャンセルされません、画像が表示されます。

理由はまだわかりません。前者の場合、要求がキャンセルされると、要求ヘッダー(注意:暫定ヘッダーが表示されます)には

  • 受け入れる
  • キャッシュ制御
  • プラグマ
  • リファラー
  • ユーザーエージェント

後者の場合、それらすべてに加えて、次のような他の

  • クッキー
  • 接続
  • ホスト
  • Accept-Encoding
  • 受け入れ言語

肩をすくめる


2

JavaScript経由でリダイレクトすると、Chromeでこのエラーが発生しました。

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

ご覧のとおり、「http://」を忘れました。追加した後、うまくいきました。


2

私の場合、クリックイベントのようなアンカーがありました

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

クリックイベント内で、ネットワークコールがあり、Chromeがリクエストをキャンセルしました。アンカーはしているhref""手段、それはページをリロードし、同じ時間は、それが取り消されますネットワークコールでイベントをクリックします。のhrefようにvoidで置き換えるたび

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

問題は解消しました!


2

リクエストがchromeによってキャンセルされた別の例を示します。これはちょうど今遭遇したもので、これまでの回答のいずれにもカバーされていません。

一言で言えば
、自分のAndroidフォンで自己署名証明書が信頼されていない。

詳細
開発/デバッグ段階です。URLは自己署名ホストを指しています。コードは次のようなものです:

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

Chromeは静かにリクエストをキャンセルしました。私のようなWeb開発の初心者が問題を修正するための手がかりはありません。Androidフォンを使用して証明書をダウンロードしてインストールしたら、問題は解決しました。


2

Angular(2+)に組み込まれているようなObservableベースのHTTPリクエストを利用している場合、ObservableがキャンセルされたときにHTTPリクエストをキャンセルできます(RxJS 6 switchMapオペレーターを使用してストリームを結合している場合は一般的です) 。ほとんどの場合mergeMap、リクエストを完了させたい場合は、代わりにoperator を使用するだけで十分です。


1

私のメインのcssフォルダーの外にある別のフォルダーに保存されている2つのCSSファイルでまったく同じことがありました。私は式エンジンを使用していますが、問題はhtaccessファイルのルールにあることがわかりました。フォルダーを自分の条件の1つに追加しただけで修正されました。次に例を示します。

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

潜在的な競合がないかhtaccessファイルを確認することは価値があるかもしれません


1

スタイルシートにWebフォントを埋め込むと、すべてのタイプのフォントとwoffwoff2ttfが埋め込まれます。最近、woff2が存在する場合、Chromeがttfおよびwoffへのリクエストをキャンセルすることに気付きました。現在Chromeバージョン66.0.3359.181を使用していますが、Chromeが追加のフォントタイプのキャンセルをいつ開始したかわかりません。


1

この問題<button>は、jsからajaxリクエストを送信するはずのフォームにタグがあったために発生しました。しかし、この要求は、ブラウザが原因でキャンセルされました。クリックすると、フォームが自動的に送信されますbutton、フォーム内を。

そのためbutton 、通常divまたはspanページ上ではなく実際に使用したい場合、およびフォームスローjsを送信したい場合は、preventDefault関数を使用してリスナーをセットアップする必要があります。

例えば

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

    e.preventDefault();

    //do ajax
    $.ajax({

     ...
    });

})


0

私の場合、メールクライアントウィンドウを表示するコードが原因で、Chromeは画像の読み込みを停止しました。

document.location.href = mailToLink;

$(function(){...})の代わりに$(window).load(function(){...})に移動するのが役立ちました。


0

これにより、falseを省略したときにキャンセルステータスに遭遇した人を助けることができます。送信フォームで。これにより、ajax送信の直後に送信アクションが実行され、現在のページが上書きされました。以下にコードを示しますが、最後に重要なfalseが返されます。

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

それが誰かを助けることを願っています。


0

LoopbackJSから来て、チャートの例で提供されているようなカスタムストリームメソッドを使用しようとする人向け。私はを使用してこのエラーを取得していましたPersistedModelが、基本的にModel私の問題の修正に切り替えましたeventsourceステータスをキャンセルする。

繰り返しますが、これは特にループバックAPIを対象としています。そして、これはトップアンサーであり、グーグルのトップなので、私は答えの組み合わせでこれを投げると思いました。


0

私は同じ問題に直面していましたが、コードのどこかでこの疑似コードを使用していました:

  • iframeを作成する
  • iframeのonloadフォームを送信

  • 2秒後、iframeを削除します

したがって、サーバーが応答を書き込んでいたiframeの応答にサーバーが2秒以上かかった場合は削除されましたが、応答はまだ書き込まれていましたが、書き込むiframeがなかったため、Chromeが要求をキャンセルしました。したがって、これを回避するために、応答が終わった後にのみiframeが削除されるようにしました。または、ターゲットを "_blank"に変更できます。したがって、理由の1つは、 書き込み中のリソース(私の場合はiframe)が、書き込みを停止する前に削除または削除されると、要求がキャンセルされることです。


0

私にとって「キャンセル」ステータスは、ファイルが存在しないためでした。Chromeが表示されないのはなぜですか404


0

それは私にとって間違った道のように単純でした。デバッグの最初のステップは、ajaxなどとは独立してファイルをロードできるかどうかを確認することです。


0

リクエストは追跡保護プラグインによってブロックされた可能性があります。


0

300枚の画像を背景画像としてロードしたときに、私に起こりました。最初のタイムアウトが発生したか、残りがすべてキャンセルされたか、最大同時リクエスト数に達したと思います。一度に5つずつ実装する必要がある



0

私の場合、それはクロム76のアップデート後に来始めました。

JSコードの問題により、window.locationが複数回更新され、以前のリクエストがキャンセルされました。この問題は以前から存在していましたが、バージョン76への更新後にChromeがリクエストのキャンセルを開始しました。


0

レコードの更新時に同じ問題が発生しました。save()の内部では、フォームから取得したrawデータを準備してデータベースのフォーマットと一致させ(enum値の多くのマッピングを行うなど)、これによりputリクエストが断続的にキャンセルされました。save()からデータの準備を行い、それから専用のdataPrep()メソッドを作成することで解決しました。私はこのdataPrepを非同期にして、メモリを大量に消費するすべてのデータ変換を待ちます。次に、準備したデータを、http putクライアントで使用できるsave()メソッドに返します。putメソッドを呼び出す前に、dataPrep()で待機することを確認しました。

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

これにより、リクエストの間欠的なキャンセルが解決されました。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.