Что означает статус = отменено для ресурса в Инструментах разработчика Chrome?
Что может привести к отмене страницы? У меня есть скриншот инструментов разработчика Chrome.
Это происходит часто, но не каждый раз. Кажется, что как только некоторые другие ресурсы будут кэшированы, обновление страницы загрузит LeftPane.aspx. И что действительно странно, так это то, что это происходит только в Google Chrome, а не в Internet Explorer 8. Есть идеи, почему Chrome отменит запрос?
34 ответа
Мы боролись с подобной проблемой, когда Chrome отменял запросы на загрузку вещей в рамках или фреймах, но только периодически, и это казалось зависимым от компьютера и / или скорости интернет-соединения.
Эта информация устарела на несколько месяцев, но я построил Chromium с нуля, покопался в источнике, чтобы найти все места, где запросы могут быть отменены, и установил контрольные точки на всех них для отладки. По памяти единственные места, где Chrome отменит запрос:
- Элемент DOM, который вызвал выполнение запроса, был удален (т. Е. Загружается IMG, но перед тем, как произошла загрузка, вы удалили узел IMG).
- Вы сделали что-то, что сделало загрузку данных ненужной. (т.е. вы начали загружать iframe, затем изменили src или перезаписали содержимое)
- К одному и тому же серверу поступило много запросов, и проблема с сетью при более ранних запросах показала, что последующие запросы не работают (ошибка поиска DNS, более ранний (такой же) запрос, например, код ошибки HTTP 400 и т. Д.)
В нашем случае мы наконец отследили его до одного фрейма, пытаясь добавить HTML к другому фрейму, что иногда происходило еще до того, как фрейм назначения даже был загружен. После того, как вы дотронетесь до содержимого iframe, он больше не сможет загружать ресурс в него (как он узнает, куда его поместить?), Поэтому он отменяет запрос.
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>
NB. Убедитесь, что у вас нет элементов обтекания.
У меня была похожая проблема, когда моя кнопка с onclick={} была обернута в элемент формы. При нажатии на кнопку форма также отправляется, и это все испортило...
Этот ответ, вероятно, никогда не будет прочитан никем, но я решил, почему бы не написать его:)
Еще одна вещь, на которую стоит обратить внимание, это расширение AdBlock или расширения в целом.
Но "много" людей имеют AdBlock....
Чтобы исключить расширения, откройте новую вкладку в режиме инкогнито, убедившись, что "allow in incognito выключено" для расширений, которые вы хотите протестировать.
В моем случае я обнаружил, что это глобальные настройки тайм-аута jquery, глобальный тайм-аут установки плагина jquery равен 500 мс, поэтому, когда запрос превышает 500 мс, chrome отменит запрос.
Возможно, вы захотите проверить тег заголовка "X-Frame-Options". Если для него установлено SAMEORIGIN или DENY, вставка iFrame будет отменена Chrome (и другими браузерами) в соответствии со спецификацией.
Также обратите внимание, что некоторые браузеры поддерживают настройку ALLOW-FROM, а Chrome - нет.
Чтобы решить эту проблему, вам нужно будет удалить тег заголовка "X-Frame-Options". Это может сделать вас уязвимыми для атак с использованием щелчков, поэтому вам нужно будет решить, каковы риски и как их снизить.
Вот что случилось со мной: сервер возвращал искаженный заголовок "Location" для редиректа 302. Chrome не сказал мне этого, конечно. Я открыл страницу в Firefox и сразу обнаружил проблему. Приятно иметь несколько инструментов:)
Еще одно место, с которым мы столкнулись (canceled)
статус в определенной неправильной конфигурации сертификата TLS. Если сайт, такой как https://www.example.com
неправильно настроен так, что сертификат не включает www.
но действует для https://example.com
, Chrome отменит этот запрос и автоматически перенаправит на последний сайт. Это не относится к Firefox.
В настоящее время действительный пример: https://www.pthree.org/
Отмененный запрос произошел со мной при перенаправлении между защищенными и незащищенными страницами в отдельных доменах внутри фрейма. Перенаправленный запрос показывался в инструментах разработчика как "отмененный" запрос.
У меня есть страница с 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
Перенаправление превратилось в отмененный запрос в Chrome на ПК, Mac и Android. Я не знаю, относится ли это к настройке моего сайта (низкий профиль SagePay) или что-то изменилось в Chrome.
Если вы используете аксиомы, это может вам помочь
// change timeout delay:
instance.defaults.timeout = 2500;
Я получил эту ошибку в Chrome, когда я перенаправил через JavaScript:
<script>
window.location.href = "devhost:88/somepage";
</script>
Как видите, я забыл "http://". После того, как я добавил это, это работало.
Вот еще один случай, когда Chrome отменял запрос, с которым я только что столкнулся, и на который нет ответов.
В двух словах
Самоподписанный сертификат не является доверенным на моем телефоне Android.
подробности
Мы находимся в стадии разработки / отладки. URL-адрес указывает на самоподписанный хост. Код похож на:
location.href = 'https://some.host.com/some/path'
Chrome просто отменил запрос молча, не оставив новичка в веб-разработке, как я, чтобы решить эту проблему. После того, как я скачал и установил сертификат с помощью телефона Android, проблема исчезла.
Chrome версии 33.0.1750.154 m постоянно отменяет загрузку изображений, если я использую мобильную эмуляцию, направленную на мой локальный хост; в частности, при включенном User Agent (против только настроек экрана).
Когда я отключаю подмену User Agent; запросы на изображения не отменяются, я вижу изображения.
Я до сих пор не понимаю, почему; в первом случае, когда запрос отменен, заголовки запроса (ВНИМАНИЕ: отображаются предварительные заголовки) имеют только
- принимать
- Cache-Control
- Pragma
- Referer
- User-Agent
В последнем случае все эти плюс другие, как:
- печенье
- соединение
- хозяин
- Accept-Encoding
- Accept-Language
пожимание плечами
Если вы используете некоторые HTTP-запросы на основе Observable, такие как встроенные в Angular (2+), тогда HTTP-запрос может быть отменен, когда наблюдаемый будет отменен (обычная вещь, когда вы используете RxJS 6 switchMap
оператор для объединения потоков). В большинстве случаев достаточно использоватьmergeMap
вместо этого, если вы хотите, чтобы запрос был завершен.
Для моего случая у меня был якорь с событием клика, как
<a href="" onclick="somemethod($index, hour, $event)">
Внутри события клика у меня был сетевой звонок, Chrome отменил запрос. Якорь имеет href
с ""
означает, что он перезагружает страницу и одновременно имеет событие click с сетевым вызовом, которое отменяется. Всякий раз, когда я заменяю href
с пустотой, как
<a href="javascript:void(0)" onclick="somemethod($index, hour, $event)">
Проблема ушла!
У нас была эта проблема с тегом <button>
в форме, которая должна была отправить ajax-запрос от js. Но этот запрос был отменен из-за браузера, который автоматически отправляет форму при любом нажатии button
внутри формы.
Так что если вы действительно хотите использовать button
вместо обычного div
или же span
на странице, и вы хотите отправить форму throw js - вы должны настроить слушателя с помощью preventDefault
функция.
например
$('button').on('click', function(e){
e.preventDefault();
//do ajax
$.ajax({
...
});
})
Я столкнулся с той же проблемой, где-то глубоко в нашем коде у нас был этот псевдокод:
- создать фрейм
загрузка iframe отправить форму
Через 2 секунды удалите фрейм
таким образом, когда серверу требуется более 2 секунд, чтобы ответить, если iframe, на который сервер записывал ответ, был удален, но ответ еще не был записан, но не было записано iframe, таким образом, chrome отменил запрос, таким образом, чтобы избежать этого, я позаботился о том, чтобы iframe удалялся только после окончания ответа, или вы можете изменить цель на "_blank". Таким образом, одна из причин:когда ресурс (в моем случае, iframe), в который вы что-то пишете, удаляется или удаляется до того, как вы перестанете писать в него, запрос будет отменен
Я включил все типы шрифтов, а также woff, woff2, ttf, когда я вставляю веб-шрифт в таблицу стилей. Недавно я заметил, что Chrome отменяет запрос к ttf и woff, когда присутствует woff2. Я сейчас использую Chrome версии 66.0.3359.181, но я не уверен, когда Chrome начал отменять дополнительные типы шрифтов.
Это может помочь любому, кто столкнулся с отмененным статусом, когда пропустил возвращаемое значение 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
});
Надеюсь, что это помогает кому-то.
В моем случае код для отображения окна почтового клиента заставил Chrome прекратить загрузку изображений:
document.location.href = mailToLink;
Помогло перемещение его в $(window).load(function () {...}) вместо $(function () {...}).
У меня была точно такая же вещь с двумя CSS-файлами, которые хранились в другой папке за пределами моей основной папки CSS. Я использую Expression Engine и обнаружил, что проблема была в правилах в моем файле htaccess. Я просто добавил папку к одному из моих условий, и он исправил это. Вот пример:
RewriteCond %{REQUEST_URI} !(images|css|js|new_folder|favicon.ico)
Так что, возможно, стоит проверить файл htaccess на возможные конфликты.
Случилось то же самое со мной при звонке. JS файл с $. Ajax, и сделать запрос AJAX, что я сделал, было нормально позвонить.
У меня был a
тег внутри div
тег. div
было onclick="location='http://mydestination.org/'"
а также a
тег имел тот же URL в href
. Это привело к загрузке целевой страницы два раза, и первая загрузка была отменена Chrome.
строго с точки зрения Angular:
это случается, когда вы не можете правильно взломать код.
предположим, что request1 отсутствует, и его ответ также пришел, после этого, вложенный запрос2 также вышел, и его ответ также пришел, и сразу мы выходим из цикла, не разрушая должным образом подписку на request1,
в то время это случается
Заголовки политики безопасности контента для меня! Вы можете быстро исключить эту возможность, проверив консоль Chrome Dev Tools. Если это проблемы с CSP, в консоли будут отображаться ошибки. В .Net вы можете исправить это, добавив заголовки в файл web.config или в код.
Отказался от отправки данных формы на https://www.mysite.mydomain/, поскольку это нарушает следующую директиву Политики безопасности контента: «form-action 'self' * .otherdomain www.thirdparty.co.uk».
Вот исправление web.config для указанной выше ошибки:
Это было так же просто, как неверный путь для меня. Я хотел бы предложить первый шаг в отладке, чтобы увидеть, если вы можете загрузить файл независимо от AJAX и т. Д.
В моем случае это стало приходить после обновления Chrome 76.
Из-за некоторой проблемы в моем JS-коде window.location обновлялось несколько раз, что привело к отмене предыдущего запроса. Хотя проблема присутствовала и раньше, Chrome начал отменять запрос после обновления до версии 76.
Для меня статус "отменен" был потому, что файл не существует. Странно почему хром не показывает 404
,
Одна из причин может заключаться в том, что где-то в коде был вызван XMLHttpRequest.abort(), в этом случае запрос будет иметьcancelled
статус на вкладке Сети инструментов разработчика Chrome.