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.