ページがキャンセルされる原因は何ですか?Chromeデベロッパーツールのスクリーンショットがあります。
これは頻繁に発生しますが、毎回発生するわけではありません。他のリソースがキャッシュされると、ページの更新によってLeftPane.aspxが読み込まれるようです。そして、本当に奇妙なのは、これがInternet Explorer8ではなくGoogleChromeでのみ発生することです。Chromeがリクエストをキャンセルする理由はありますか?
ページがキャンセルされる原因は何ですか?Chromeデベロッパーツールのスクリーンショットがあります。
これは頻繁に発生しますが、毎回発生するわけではありません。他のリソースがキャッシュされると、ページの更新によってLeftPane.aspxが読み込まれるようです。そして、本当に奇妙なのは、これがInternet Explorer8ではなくGoogleChromeでのみ発生することです。Chromeがリクエストをキャンセルする理由はありますか?
Chromeがフレームまたはiframe内に物をロードするリクエストをキャンセルするという同様の問題と戦いましたが、断続的にしか発生せず、コンピューターやインターネット接続の速度に依存しているように見えました。
この情報は数か月前のものですが、Chromiumを最初から作成し、ソースを調べてリクエストがキャンセルされる可能性のあるすべての場所を見つけ、すべての場所にブレークポイントを設定してデバッグしました。メモリから、Chromeがリクエストをキャンセルする唯一の場所:
私たちの場合、最終的に、HTMLを別のフレームに追加しようとしている1つのフレームまで追跡しました。これは、宛先フレームがロードされる前に発生することがありました。iframeのコンテンツに触れると、リソースをiframeにロードできなくなるため(どこに配置するかをどのように知ることができますか?)、リクエストがキャンセルされます。
status = canceledは、JavaScriptイベントのajaxリクエストでも発生する可能性があります。
<script>
$("#call_ajax").on("click", function(event){
$.ajax({
...
});
});
</script>
<button id="call_ajax">call</button>
イベントは正常にリクエストを送信しますが、その後キャンセルされます(ただし、サーバーによって処理されます)。その理由は、同じクリックイベントでajaxリクエストを行ったかどうかに関係なく、要素はクリックイベントでフォームを送信するためです。
リクエストがキャンセルされないようにするには、JavaScriptevent.preventDefault();
を呼び出す必要があります。
<script>
$("#call_ajax").on("click", function(event){
event.preventDefault();
$.ajax({
...
});
});
</script>
注意:ラッピングフォーム要素がないことを確認してください。
onclick={}のボタンがフォーム要素でラップされているという同様の問題がありました。ボタンをクリックすると、フォームも送信され、それがすべてを台無しにしました...
注意すべきもう1つのことは、AdBlock拡張機能、または一般的な拡張機能です。
しかし、「多くの」人々がAdBlockを持っています。
拡張機能を除外するには、シークレットモードで新しいタブを開き、テストする拡張機能の「シークレットモードでの許可がオフになっている」ことを確認します。
私の場合、それはjqueryグローバルタイムアウト設定であり、jqueryプラグインはグローバルタイムアウトを500msに設定しているため、リクエストが500msを超えると、chromeはリクエストをキャンセルします。
「X-Frame-Options」ヘッダータグを確認することをお勧めします。SAMEORIGINまたはDENYに設定されている場合、iFrameの挿入は、仕様に従ってChrome(および他のブラウザー)によってキャンセルされます。
また、一部のブラウザはALLOW-FROM設定をサポートしていますが、Chromeはサポートしていないことに注意してください。
これを解決するには、「X-Frame-Options」ヘッダータグを削除する必要があります。これにより、クリックジャッキング攻撃を受けやすくなる可能性があるため、リスクとは何か、およびそれらを軽減する方法を決定する必要があります。
これが私に起こったことです:サーバーは302リダイレクトのために不正な形式の「Location」ヘッダーを返していました。もちろん、Chromeはこれを教えてくれませんでした。Firefoxでページを開いたところ、すぐに問題が見つかりました。複数のツールがあるのはいいですね:)
ステータスに遭遇したもう1つの場所は(canceled)
、特定のTLS証明書の設定ミスです。のようなサイトhttps://www.example.com
が誤って構成されていて、証明書にが含まれていないwww.
が有効である場合https://example.com
、chromeはこのリクエストをキャンセルし、自動的に後者のサイトにリダイレクトします。これはFirefoxには当てはまりません。
現在有効な例:https ://www.pthree.org/
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バージョン33.0.1750.154mは、ローカルホストを指すモバイルエミュレーションを使用している場合、画像の読み込みを一貫してキャンセルします。特に、ユーザーエージェントのなりすましがオンになっている場合(画面設定のみ)。
ユーザーエージェントのなりすましをオフにすると、画像リクエストはキャンセルされません。画像が表示されます。
理由はまだわかりません。前者の場合、リクエストがキャンセルされると、リクエストヘッダー(注意:暫定ヘッダーが表示されます)には
後者の場合、これらすべてに加えて、次のようなものがあります。
肩をすくめる
JavaScriptを介してリダイレクトすると、Chromeで次のエラーが発生しました。
<script>
window.location.href = "devhost:88/somepage";
</script>
ご覧のとおり、「http://」を忘れました。追加した後、動作しました。
私の場合、次のようなクリックイベント付きのアンカーがありました
<a href="" onclick="somemethod($index, hour, $event)">
クリックイベント内でネットワークコールがあり、Chromeがリクエストをキャンセルしました。アンカーにはhref
手段""
があり、ページをリロードすると同時に、ネットワーク呼び出しがキャンセルされるクリックイベントが発生します。href
のようにボイドに置き換えるときはいつでも
<a href="javascript:void(0)" onclick="somemethod($index, hour, $event)">
問題は解決しました!
これは、私が遭遇したばかりのchromeによってリクエストがキャンセルされた別のケースですが、これまでの回答ではカバーされていません。
一言で言えば
、私のAndroid携帯電話で信頼されていない自己署名証明書。
詳細
開発/デバッグ段階です。URLは自己署名ホストを指しています。コードは次のようなものです。
location.href = 'https://some.host.com/some/path'
Chromeはリクエストを黙ってキャンセルしただけで、私のようなWeb開発の初心者が問題を解決する手がかりを残していません。Androidフォンを使用して証明書をダウンロードしてインストールすると、問題は解消されます。
あなたがaxiosを使うなら、それはあなたを助けることができます
// change timeout delay:
instance.defaults.timeout = 2500;
私は同じ問題に直面していました。コードのどこかで、次の擬似コードがありました。
iframeのonloadはフォームを送信します
2秒後、iframeを削除します
したがって、サーバーが応答を書き込んでいるiframeに応答するのに2秒以上かかる場合、サーバーは削除されましたが、応答はまだ書き込まれていませんでしたが、書き込むiframeがなかったため、chromeは要求をキャンセルしました。したがって、これを回避するために、応答が終了した後にのみiframeが削除されるようにしました。または、ターゲットを「_blank」に変更できます。したがって、理由の1つは、 書き込みを停止する前に、書き込み中のリソース(私の場合はiframe)が削除または削除されると、リクエストがキャンセルされることです。
Webフォントをスタイルシートに埋め込むときに、すべての種類のフォントとwoff、woff2、ttfを埋め込みました。最近、woff2が存在する場合、Chromeがttfとwoffへのリクエストをキャンセルすることに気付きました。現在Chromeバージョン66.0.3359.181を使用していますが、Chromeが追加のフォントタイプのキャンセルを開始した時期がわかりません。
<button>
jsからajaxリクエストを送信するはずのフォームにタグがあるという問題がありました。しかし、このリクエストはブラウザが原因でキャンセルされ、button
フォーム内をクリックすると自動的にフォームが送信されます。
したがってbutton
、通常の代わりに、div
またはspan
ページ上で実際に使用したい場合で、form throw jsを送信したい場合は、preventDefault
関数を使用してリスナーを設定する必要があります。
例えば
$('button').on('click', function(e){
e.preventDefault();
//do ajax
$.ajax({
...
});
})
Angular(2+)に組み込まれているようなObservableベースのHTTPリクエストを利用する場合、ObservableがキャンセルされたときにHTTPリクエストをキャンセルできます(RxJS 6switchMap
オペレーターを使用してストリームを結合する場合の一般的なこと) 。ほとんどの場合mergeMap
、リクエストを完了させたい場合は、代わりに演算子を使用するだけで十分です。
メインのcssフォルダーの外にある別のフォルダーに保存された2つのCSSファイルでもまったく同じことがわかりました。Expression Engineを使用していますが、htaccessファイルのルールに問題があることがわかりました。条件の1つにフォルダーを追加したところ、修正されました。次に例を示します。
RewriteCond %{REQUEST_URI} !(images|css|js|new_folder|favicon.ico)
したがって、潜在的な競合がないかhtaccessファイルを確認する価値があるかもしれません
を呼び出すときに同じように私に起こった。$を含むjsファイル。ajax、およびajaxリクエストを行うと、私が行ったことは通常どおりに呼び出すことでした。
私の場合、電子メールクライアントウィンドウを表示するコードにより、Chromeは画像の読み込みを停止しました。
document.location.href = mailToLink;
$(function(){...})ではなく$(window).load(function(){...})に移動すると役に立ちました。
これは、私がreturn falseを省略したときに、キャンセルされたステータスに遭遇した人を助けることができます。フォームで送信します。これにより、ajax送信の直後に送信アクションが発生し、現在のページが上書きされました。コードを以下に示します。最後に重要なreturnfalseがあります。
$('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
});
それが誰かを助けることを願っています。
LoopbackJSから来て、チャートの例で提供されているようなカスタムストリームメソッドを使用しようとしている人のために。を使用してこのエラーが発生しPersistedModel
、基本に切り替えると、ステータスがキャンセルされるModel
という問題が修正されました。eventsource
繰り返しますが、これは特にループバックAPI用です。そして、これはトップの答えであり、グーグルのトップなので、私はこれを答えの組み合わせに投げ込むと思いました。
私にとって「キャンセル」ステータスは、ファイルが存在しなかったためです。なぜクロムが表示されないのか不思議404
です。
それは私にとって間違った道と同じくらい単純でした。デバッグの最初のステップは、ajaxなどとは独立してファイルをロードできるかどうかを確認することです。
リクエストはトラッキング保護プラグインによってブロックされた可能性があります。
300枚の画像を背景画像として読み込んでいるときに起こりました。最初の1つがタイムアウトしたか、残りのすべてがキャンセルされたか、最大同時リクエストに達したと推測しています。一度に5つ実装する必要があります
その理由の1つは、XMLHttpRequest.abort()がコードのどこかで呼び出されたためである可能性があります。この場合、リクエストのcancelled
ステータスはChromeデベロッパーツールの[ネットワーク]タブに表示されます。
私の場合、それはクローム76のアップデート後に来始めました。
JSコードの問題により、window.locationが複数回更新され、以前のリクエストがキャンセルされました。この問題は以前から存在していましたが、バージョン76に更新した後、Chromeはリクエストのキャンセルを開始しました。
レコードを更新するときに同じ問題が発生しました。save()内で、フォームから取得したrawdataをデータベース形式に一致するように準備していました(列挙値の多くのマッピングなどを実行しました)。これにより、putリクエストが断続的にキャンセルされます。save()からデータ準備を取り出し、そこから専用のdataPrep()メソッドを作成することで解決しました。このdataPrepを非同期に変換し、メモリを大量に消費するすべてのデータ変換を待ちます。次に、準備したデータをhttp putクライアントで使用できるsave()メソッドに返します。putメソッドを呼び出す前に、dataPrep()で待機していることを確認しました。
await dataToUpdate = await dataPrep(); http.put(apiUrl、dataToUpdate);
これにより、リクエストの断続的なキャンセルが解決されました。
a
タグの中にタグがありましたdiv
。div
持っていたonclick="location='http://mydestination.org/'"
とa
タグはで同じURLを持っていましたhref
。これにより、ターゲットページが2回読み込まれ、最初の読み込みがChromeによってキャンセルされました。
私の場合、問題の原因はさらに別のものでした。
私のアプリケーションはプロキシの背後にあり、ChromeリクエストはIf-Modified-SinceHTTPヘッダーで送信されていました。このヘッダーが存在する場合、実行される動作は次のとおりです。
サーバーは、指定された日付以降に最後に変更された場合にのみ、要求されたリソースを200ステータスで送り返します。それ以降、要求が変更されていない場合、応答は本文のない304になります。
プロキシはこの期待に応えられず、304ステータスコードで応答しましたが、本文が空ではなかったため、リクエストがキャンセルされました。
プロキシの動作を修正した後、リクエストは魅力のように機能しました。
私のためのコンテンツセキュリティポリシーヘッダー!Chrome Dev Tools Consoleを確認することで、この可能性をすばやく除外できます。CSPの問題である場合は、コンソールにエラーが表示されます。.Netでは、web.configファイルまたはコードにヘッダーを追加することでこれを修正できます。
次のコンテンツセキュリティポリシーディレクティブに違反しているため、フォームデータを「https://www.mysite.mydomain/」に送信することを拒否しました:「form-action'self' *.otherdomainwww.thirdparty.co.uk」。
上記のエラーに対するweb.configの修正は次のとおりです。
<cspConfiguration>
<directives>
<directive name="form-action" allowedSources="'self' *.mydomain>
</directive>
</directives>
</cspConfiguration>
Angularの厳密な観点から:
これは、コードレベルで適切に解読できない場合に発生します。
仮に、request1が出て、その応答も出て、その後、ネストされたrequest2も出て、その応答も出て、request1のサブスクリプションを適切に破棄せずに、直接ループから抜け出しているとします。
その時、それは起こります