Що означає статус = скасовано для ресурсу в Інструментах для розробників Chrome?


402

Що може призвести до скасування сторінки? У мене є скріншот інструментів для розробників Chrome.

Скасований ресурс

Це трапляється часто, але не кожен раз. Схоже, що після того, як деякі інші ресурси будуть кешовані, оновлення сторінки завантажить LeftPane.aspx. І що насправді дивно, це відбувається лише в Google Chrome, а не в Internet Explorer 8. Будь-які ідеї, чому Chrome скасує запит?


13
Можливо, вам вдасться отримати більш детальну інформацію про мережевий внутрішній слід. У мене була подібна проблема, і я виявив, що скасований був net::ERR_ABORTEDпід прикриттям. Якщо це так, ця публікація пояснює, що "net :: ERR_ABORTED призначений для генерування лише тоді, коли дія користувача спричиняє переривання навантаження. Це може статися, коли нова навігація перериває існуючу, або коли користувач натискає кнопку STOP кнопка. "
Джон Маккарті

Дякую. У моєму випадку це не користувач, тому що я - користувач. Сторінка має (занадто) багато кадрів. Може бути, src фрейму зміниться? Дивно, що я ніколи не бачив, щоб це сталося в IE. Я перегляну внутрішні внутрішні мережі.
styfle

@ nondescript1 Я зробив захоплення під час відтворення помилки та перекинувся на файл. Тепер у мене є файл json у розмірі 18 000 рядків. Що я шукаю?
styfle

3
Я, чесно кажучи, не знаю. Насправді я натрапив на ваше запитання, коли я шукав додаткову інформацію про статус = скасований сам, і саме тому я додаю лише коментарі, а не відповідь;). У мене немає підстав вважати, що це пов’язано з кешуванням. Мені подобається ще одна навігація, яку ініціював хтось на сторінці. Побачивши це, я намагався ініціювати завантаження з window.open (), що призвело до скасування іншого запиту сервера. У моєму випадку у Firefox цієї проблеми не було, але в Chrome.
Джон Маккарті

1
Так само не можна сказати, що одна з можливих причин "(скасовано)" у стовпці статусу - хоча, безумовно, не єдина можлива причина - це те, що вказана URL-адреса повертає 404 або іншу помилку. Примушуйте кілька разів оновити URL-адресу на іншій вкладці, щоб переконатися, що вона послідовно завантажується.
rakslice

Відповіді:


592

Ми боролися з подібною проблемою, коли Chrome скасовував запити на завантаження речей у рамки або рамки кадрів, але лише з перервами, і це здавалося залежним від комп'ютера та / або швидкості інтернет-з'єднання.

Ця інформація застаріла за кілька місяців, але я створив Chromium з нуля, прокопав джерело, щоб знайти всі місця, де запити можуть бути скасовані, і встановив всі точки відключення для всіх налагодження. З пам'яті, єдині місця, де Chrome скасує запит:

  • Елемент DOM, який викликав запит, видаляється (тобто завантажується IMG, але перед тим, як відбулося завантаження, ви видалили вузол IMG)
  • Ви зробили щось, що зробило завантаження даних непотрібним. (тобто ви почали завантажувати iframe, потім змінили src або перезаписали вміст)
  • На один і той же сервер надходить багато запитів, і проблема з мережею на попередніх запитах показала, що наступні запити не працюватимуть (помилка пошуку DNS, попередній (той самий) запит призводила, наприклад, код помилки HTTP 400 тощо)

У нашому випадку ми нарешті простежили його до одного кадру, намагаючись додати HTML до іншого кадру, що іноді траплялося ще до того, як кадр призначення навіть завантажився. Після дотику до вмісту iframe він більше не може завантажувати в нього ресурс (як би він знав, куди його поставити?), Щоб він скасував запит.


2
Дуже інформативно, дякую. Мені важко відтворити цю помилку, оскільки, коли речі стають кешовані, цього не відбувається. Якщо в моєму JavaScript встановити точку розриву, цього не станеться. Ваша перша точка кулі, мабуть, не проблема, тому що я не бачу, щоб елемент видалявся. Насправді я знаю, що це не куля 3. Що ви маєте на увазі під "натисканням вмісту iframe, він більше не може завантажувати в нього ресурс"? Чи можете ви навести приклад?
стайф

1
Цікаво. Тому мені потрібно знайти всі document.writes до цього кадру та переконатися, що вони записують лише тоді, коли кадр завантажений. Я позначу це правильною відповіддю, оскільки ви відповіли на значення цього статусу.
styfle

3
@styfle Так, але це можуть бути й інші речі, крім document.write. Все, що намагається записати в кадр, наприклад appendChild або подібне, ймовірно, це спричинить. Можливо, ви захочете створити обробник onLoad у кожному кадрі, який записує trueдо певної змінної, тоді інші кадри шукають це спочатку, перш ніж щось торкатися.
whamma

14
У мене також були жахливі проблеми з цим. Я знайшов одне, що послідовно викликає це, якщо відповідь AJAX має код статусу 301/302, а URL-адреса переспрямування знаходиться на іншому домені. Це послідовне відтворення проблеми для мене.
eb80

1
Для мене це було прикріплення iframe до тіла, а потім негайно вилучене з тіла. Я поставив перерву лінії і питання там не було. Тому покладіть деякий час (15 мс) і подолайте його. @whamma, це справді мотивує те, як ви вирішили цю проблему. Дякую за такі чудові глибокі деталі. :-)
Василь Мухаммед

53

status = скасовано може статися також на запитах ajax у подіях JavaScript:

<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на кнопці з, type="submit"а потім здійснив деяку мережу в викликаній функції. Chrome продовжував скасовувати цей запит ...
Робін

1
На жаль, це не працює для мене. Будь-які підказки?
Кшиштоф Мадей

Врятував мене і Ваов! Для події під кутом ng click я вклав $ http запити, а другий був скасований. Після встановлення лінії попередження за замовчуванням вона знову почала працювати, дякую.
Бахадір Тасдемір

Дякую за це Я знав, що це не CORS чи проблема DOM. Можливо, @whamma міг би оновити свою відповідь, щоб включити це як можливу причину повноти :)
glidester

Вітаю пане !! Сер, ви абсолютний геній !! Мене врятували !!
Дільноор Сінгх

25

Примітка. Переконайтеся, що у вас немає елементів форми для обгортання .

У мене була подібна проблема, коли моя кнопка з onclick = {} була загорнута у елемент форми. Після натискання кнопки форма також подається, і це все переплутало ...

Цю відповідь, мабуть, ніхто не прочитає, але я зрозумів, чому б не написати її :)


Це було для мене першопричиною - двічі спрацьовує кнопка POST. Я не хочу , щоб перемістити кнопку з елемента форми з - за CSS речі так що це було рішення: stackoverflow.com/questions/932653 / ...
Микола Koudelia

Те саме питання. Для уточнення, у мене була кнопка, що міститься у формі з типом подання, але він мав onclick, який робив форму jquery submit, ajax submit. Він працював у FF, але зазнав невдачі в chome та IE, і загнав мене на гайки, поки я не знайшов його.
ChrisThompson

Це виправляє проблему, яка трапилася зі мною в додатку Vue.js, де @clickподія була пов'язана з <button>елементом всередині обгортки форми. Уникайте цього робити, якщо ви не використовуєте @submit.preventмодифікатор подій Vue .
Пол Венцель

Так було для мене. Додавши type="button"тег до кнопки, форма не була подана, а скасовану подію було уникнено.
Брендон Меденвальд

12

Інша річ, на яку слід звернути увагу, може бути розширення AdBlock або розширення загалом.

Але "багато" людей мають AdBlock ....

Щоб виключити розширення, відкрийте нову вкладку в режимі інкогніто, переконуючись, що "дозволити інкогніто вимкнено" для розширення, яке ви хочете перевірити.


Саме так і сталося. Увімкнули плагін noscript і раптом iFrame вже не завантажувався.
Маргус Пала

Для мене це був плагін Hola. Після відключення запити більше не скасовуються.
Ленін Радж Раджасекаран

1
У моєму випадку це був «Помилка JavaScript Notifier» хром розширення
AleX

Я спробував розглянути все, і все ще не пощастило з Angular 8, вимкнено всі розширення і все ще в повільній мережі 3G попередні дзвінки скасовуються. :(
born2net

10

Ви можете перевірити тег заголовка "Параметри X-Frame". Якщо його встановлено на SAMEORIGIN або DENY, Chrome і інші браузери скасують вставку iFrame за специфікацією .

Також зауважте, що деякі веб-переглядачі підтримують налаштування ALLOW-FROM, але Chrome це не робить.

Щоб вирішити це, вам потрібно буде видалити тег заголовка "Параметри X-Frame". Це може залишити вас відкритими для атак на кліки, тому вам потрібно буде вирішити, які ризики є, і як їх зменшити.


Це була саме моя проблема. Ця нитка має хороші відповіді про те , як це виправити: stackoverflow.com/questions/6666423 / ...
ToniTornado

8

У моєму випадку я виявив, що це глобальні налаштування часу очікування jquery, глобальний тайм-аут встановлення плагінів jquery до 500 мс, так що коли запит перевищує 500 мс, хром скасує запит.


Зустрічаючись з тим самим номером. У моєму випадку це локальна розробка WordPress / WooCommerce з гостьовим сервером VirtualBox, а деякі запити AJAX WooCommerce мають заздалегідь заданий час AJAX 5000мс. Якщо хтось зіткнувся з тією ж проблемою, цей час очікування визначено у includes/class-wc-frontend-scripts.phpфайлі.
Іван Шацький

7

Ось що сталося зі мною: сервер повертав неправильно сформований заголовок "Місцезнаходження" для переадресації 302. Chrome, звичайно, мені цього не сказав. Я відкрив сторінку у firefox і одразу виявив проблему. Приємно мати кілька інструментів :)


Хоча дуже очевидно щодо причини, але все-таки, це насправді дуже корисна відповідь. Я редагував старий код coffeescript і зовсім забув, що окремі лапки не роблять #{}інтерполяцію, тому отриманий URL був неправильним. Але Chrome нічого не сказав мені про це.
кумархарш

4

Ще одне місце, у якому ми стикалися зі (canceled)статусом, - це конкретна неправильна конфігурація сертифіката TLS. Якщо такий веб-сайт https://www.example.comнеправильно налаштований таким чином, що сертифікат не містить, www.але він дійсний для https://example.com, chrome скасує цей запит і автоматично перенаправить на останній сайт. Це не так для Firefox.

Діючий приклад: https://www.pthree.org/


Ви можете в основному просто перенаправити з домену, який не сертифікується, на сертифікат? від голого до www? чи ви завжди бачите скасовану або помилку сертифіката?
Костянтин Варушев

3

Скасований запит трапився зі мною під час переадресації між захищеними та незахищеними сторінками на окремих доменах у межах рамки. Перенаправлений запит показав у інструментах розробників як "скасований" запит.

У мене є сторінка з iframe, що містить форму, розміщену в моєму платіжному шлюзі. Коли форма в iframe була подана, шлюз платежів буде перенаправлений назад до URL-адреси на моєму сервері. Нещодавно переспрямування перестало працювати і замість цього вийшло "скасований" запит.

Здається, що Chrome (я використовував Windows 7 Chrome 30.0.1599.101) більше не дозволяв переадресацію в рамках iframe переходити на незахищену сторінку на окремому домені. Щоб виправити це, я просто переконався, що будь-які перенаправлені запити в iframe завжди надсилалися для захисту URL-адрес.

Коли я створив простішу тестову сторінку з лише рамкою, на консолі з’явилося попередження (яке я попередньо пропустив або, можливо, не з’явився):

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

Переадресація перетворилася на скасований запит у Chrome на ПК, Mac та Android. Я не знаю, чи це стосується налаштування мого веб-сайту (низький профіль SagePay) чи щось змінилося в Chrome.


Я бачу майже однакову поведінку в Chrome 30 під час використання платіжних сервісів Datacash, але в моєму випадку POST з сайту 3dsecure на сайт Datacash скасовується, незважаючи на те, що обидва є https. Це доводить щось загадкове.
Джейсон

2

Версія Chrome 33.0.1750.154 м послідовно скасовує завантаження зображень, якщо я використовую мобільну емуляцію, вказану на мій локальний господар; в зокрема , з User Agent підміни на (проти всього екрану налаштувань).

Коли я вимикаю підробку агента користувача; запити на зображення не скасовуються, я бачу зображення.

Я досі не розумію, чому; у першому випадку, коли запит скасовується, заголовки запиту (ОБЕРЕЖНО: відображаються попередні заголовки) мають лише

  • Прийміть
  • Кеш-контроль
  • Прагма
  • Референт
  • Користувач-агент

В останньому випадку всі ці плюс інші люблять:

  • Печиво
  • З'єднання
  • Господар
  • Прийняти-кодувати
  • Прийняти мову

Потиснути плечима


2

Я отримав цю помилку в Chrome, коли я переспрямований через JavaScript:

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

Як бачите, я забув "http: //" . Після того, як я додав його, це спрацювало.


2

У моєму випадку я мав якір із подією на кліка

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

Всередині події клацання у мене був якийсь мережевий дзвінок, Chrome скасовував запит. Якір має hrefз ""допомогою, він перезавантажує сторінку і в той же час він має натисніть подія з мережевим викликом , який отримує скасований. Кожен раз, коли я заміню hrefнічим подібне

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

Проблема пішла!


2

Ось ще один випадок, коли запит скасовується хромом, з яким я щойно стикався, і жоден із відповідей не висвітлюється.

Коротше кажучи,
авторизований сертифікат, який не довіряють моєму телефону Android.

Деталі
Ми перебуваємо у стадії розробки / налагодження. URL вказує на власного підпису хоста. Код виглядає так:

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

Chrome просто скасував запит мовчки, не залишаючи підказки для новачків у веб-розробках, як я, щоб вирішити проблему. Як тільки я завантажив і встановив сертифікат за допомогою телефону Android, проблема не зникла.


2

Якщо ви використовуєте такі запити HTTP на основі спостережуваних даних, як ті, що вбудовані в Angular (2+), запит HTTP може бути скасований, коли спостерігається скасовується (звичайна річ, коли switchMapдля комбінації потоків використовується оператор RxJS 6 ) . У більшості випадків досить використовувати mergeMapоператор, якщо ви хочете, щоб запит був завершений.


1

У мене було саме те саме з двома файлами CSS, які зберігалися в іншій папці поза моєю основною папкою css. Я використовую Expression Engine і виявив, що проблема була в правилах у моєму файлі htaccess. Я просто додав папку до однієї зі своїх умов, і вона її виправила. Ось приклад:

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

Тому, можливо, варто перевірити файл htaccess на наявність можливих конфліктів


1

Я вбудував усі типи шрифту, а також woff , woff2 , ttf, коли я вставляв веб-шрифт у таблицю стилів. Нещодавно я помітив, що Chrome скасовує запит на ttf та woff, коли woff2 присутній. Я зараз використовую версію Chrome 66.0.3359.181, але я не впевнений, коли Chrome почав скасовувати додаткові типи шрифтів.


1

У нас була ця проблема, маючи тег <button>у формі, яка мала надіслати запит ajax від js. Але цей запит було скасовано через браузер, який автоматично надсилає форму будь-яким клацанням buttonвсередині форми.

Отже, якщо ви дійсно хочете використовувати button замість звичайної divабо spanна сторінці, а ви хочете надіслати js форми кидання - вам слід налаштувати слухача з preventDefaultфункцією.

напр

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

    e.preventDefault();

    //do ajax
    $.ajax({

     ...
    });

})


0

У моєму випадку код, який відображав вікно клієнта електронної пошти, змусив Chrome припинити завантаження зображень:

document.location.href = mailToLink;

переміщення його в $ (window) .load (функція () {...}) замість $ (function () {...}) допомогло.


0

Чи може це допомогти будь-кому, хто зіткнувся зі скасованим статусом, коли я залишив помилку повернення; у формі подати. Це спричинило негайне відправлення ajax після дії надсилання, яка перезаписала поточну сторінку. Код показаний нижче, важливе повернення помилково в кінці.

$('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. А оскільки це найкраща відповідь, а в Google - я зрозумів, що я кидаю це в поєднання відповідей.


0

Я стикався з тією ж проблемою, десь у нашому коді у нас був цей псевдокод:

  • створити кадр
  • при завантаженні iframe надішліть форму

  • Через 2 секунди зніміть кадр iframe

таким чином, коли сервер займає більше 2 секунд, щоб відповісти на кадр, на який сервер писав відповідь, було видалено, але відповідь все ще слід було написати, але не було iframe для запису, таким чином хром скасував запит, таким чином, щоб уникнути цього, я переконався, що кадр буде видалено лише після закінчення відповіді, або ви можете змінити ціль на "_blank". Таким чином, одна з причин полягає в тому, що коли ресурс (iframe в моєму випадку), в який ви щось пишете, буде видалений або видалений до того, як ви перестанете писати на нього, запит буде скасовано


0

Для мене статус "скасований" був тому, що файл не існував. Дивно, чому хром не проявляється 404.


0

Це було так само просто, як неправильний шлях для мене. Я б запропонував першим кроком налагодження було б побачити, чи можете ви завантажувати файл незалежно від ajax тощо.


0

Запити можуть бути заблоковані плагіном захисту відстеження.


0

Це трапилося зі мною під час завантаження 300 зображень як фонових зображень. Я здогадуюсь, що одного разу перший час вийшов, він скасував усі інші або досяг максимального паралельного запиту. потрібно впроваджувати 5 разів



0

У моєму випадку вона почала надходити після оновлення chrome 76.

Через якусь проблему в моєму JS-коді window.location оновлювався кілька разів, що призвело до скасування попереднього запиту. Незважаючи на те, що проблема існувала раніше, компанія Chrome почала скасовувати запит після оновлення до версії 76.


0

У мене був той самий випадок, коли оновлювався запис. Всередині save () я готував попередні дані, взяті з форми, щоб відповідати формату бази даних (роблячи багато відображення значень перерахувань тощо), і це переривчасто скасовує запит put. Я вирішив це, вийнявши підготування даних із збереження () та створивши з нього виділений метод dataPrep (). Я перетворив цей dataPrep в асинхронність і чекаю всієї конверсії даних, що потребує великої пам'яті. Потім я повертаю попередньо підготовлені дані до методу save (), який я міг би використовувати в клієнтові http put. Я переконався, що чекаю на dataPrep (), перш ніж викликати метод put:

очікувати dataToUpdate = очікувати dataPrep (); http.put (apiUrl, dataToUpdate);

Це вирішило переривчасте скасування запиту.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.