Chrome загружает загруженную страницу в ответ HTTP 205 после запроса AJAX
Работая над проектом, я просто делаю запрос AJAX для обработки некоторых данных.
Сервер, после выполнения задания, возвращает ответ HTTP 205 RESET CONTENT
Я использую этот код состояния, чтобы сообщить реквестеру reset вид документа
Вот фрагмент кода, который я использую
$.ajax({
url: '/unread',
method: 'PUT',
data: {
notifications: elements
}
}).done(function(content, message, xhr) {
if (205 !== xhr.status) {
// Generic error message
return;
}
window.location.reload(true)
}).fail(function() {
// Generic error message
})
Это отлично работает в Internet Explorer (8 и выше), Firefox (28.0) и Opera (12.16). Однако Chrome (33.0) и Opera (20.0) вместо обновления страницы загружает содержимое ответа загружаемой страницы dump при вызове window.location.reload
Вот что я пробовал
-
window.location.href = window.location.href
дает тот же результат
-
history.go(0)
дает тот же результат
- Если я удалю
window.location.reload
, ничего не перезагрузится
- Удаление кеша, удаление локального состояния или переход в частную навигацию ничего не меняет
- Если я изменю код ответа (например, 204), он отлично работает
Вот визуальная сеть того, что происходит
![Chrome makes a download]()
Дополнительная информация (и более глубокие исследования)
- Я на Ubuntu 12.04
- Ошибка может быть воспроизведена на другом компьютере с Windows 7 (версия с одним и тем же хромом)
- Ошибка не может быть воспроизведена на другом компьютере с Debian 7.1 (версия с одним и тем же хромом)
Почему Chrome и Opera ведут себя так, как в ответе 205
HTTP?
Ответы
Ответ 1
Самое близкое, что я мог найти, это то, что это может быть ошибка, потому что в этом файле: https://chromium.googlesource.com/chromium/chromium/+/trunk/net/http/http_stream_parser.cc
комментарий, начинающийся с строки 837, не соответствует коду в строке 850: т.е. комментарий не упоминает, что значение 205 должно быть нулевой длины, но код относится к 205, как 1xx, 204 и 304. Это было фактически единственный мигающий код, который я мог найти, упомянутый 205 (вне определяющих констант).
Возможно, стоит попробовать последнюю версию Opera; если проблема также возникает там, она сильнее указывает пальцем на ошибку в исходном коде Blink.