Обратное поведение в Google Chrome после Post/Redirect/Get

У меня есть форма в С#/.net, которая использует PRG после того, как кто-то изменит количество предметов, которые они хотят приобрести. Я заметил, что в Firefox и IE вы можете изменить количество столько раз, сколько хотите, а затем нажать «назад», и вы вернетесь к предыдущему экрану. Однако в Google Chrome, если вы нажмете «Назад» (после многократной настройки количества), он останется на странице и просто перенастроится на предыдущие количества (в конце концов он вернется к предыдущему экрану). Я надеюсь, что есть способ сделать так, чтобы он не перенастраивал количество и сразу возвращался на предыдущую страницу, как это делают IE и Firefox. Кто-нибудь знает, возможно ли это?

Я не очень хорошо объясняю свои проблемы, поэтому надеюсь, что это имеет смысл, спасибо!

РЕДАКТИРОВАТЬ: я попытался отключить кеш, и он все еще не работает


person user1758415    schedule 12.09.2013    source источник
comment
Предполагая, что вы правильно установили все заголовки HTTP-кэша, это может быть связано с обратным кешем. Я видел такое поведение в Safari. Safari основан на Webkit, как и Chrome (до последней ветки).   -  person Tim Medora    schedule 12.09.2013
comment
Так что решение может быть просто вне моей досягаемости? Похоже, это связано с моей проблемой: bugs.webkit.org/show_bug.cgi?id=38690 Похоже, это связано с кодом в MainResourceLoader::willSendRequest. Есть вызов isPostOrRedirectAfterPost, и если он возвращает true, мы принудительно используем политику кэширования ReloadIgnoringCacheData. Затем мы модифицируем ResourceRequest DocumentLoader.   -  person user1758415    schedule 12.09.2013
comment
Обратно-вперед-кэш предназначен для восстановления последнего состояния страницы без каких-либо запросов. Во-первых, убедитесь, что вы правильно настраиваете заголовки кэша HTTP (почтовый код, если вам нужна помощь, подтверждающая, что вы сделали это правильно). Это исправит различные варианты поведения, а возвратный кеш будет учитывать эти заголовки в большинстве браузеров. Если ваши заголовки верны, но браузер по-прежнему перестраивает страницу из старых значений, вы можете попробовать эти решения.   -  person Tim Medora    schedule 12.09.2013
comment
Эта ссылка предназначена для Firefox, но она применима к обратному кешу в любом браузере. Также см. здесь для перехвата событий кеша (и, возможно, для их устранения). Обычно вы хотите сделать это только в крайнем случае, то есть убедитесь, что кэширование отключено в другом месте.   -  person Tim Medora    schedule 12.09.2013
comment
Я также могу опубликовать код, который я использую, но чтобы протестировать его, я проверил элемент, настройки и проверил отключение кеша (пока открыт DevTools), затем я протестировал его с открытым DevTools, и он все еще не работает. Это должно было отключить кеш.   -  person user1758415    schedule 12.09.2013
comment
Вот что я использовал для отключения кеша: Response.AppendHeader(Cache-Control, no-cache, no-store, must-revalidate); // HTTP 1.1. Response.AppendHeader(Pragma, без кеша); // HTTP 1.0. Response.AppendHeader(Истекает, 0); // Прокси.   -  person user1758415    schedule 12.09.2013
comment
Хорошо. Затем попробуйте перехватить событие pageshow и посмотреть, загружается из обратного кэша.   -  person Tim Medora    schedule 12.09.2013
comment
Это работает только для Firefox? У вас есть пример того, как это использовать?   -  person user1758415    schedule 12.09.2013
comment
window.onpageshow = function (e) { if (e && e.persisted) { alert("back forward cache hit"); } };. Если вы сможете опубликовать JS Fiddle, воссоздающий проблему, люди с большей вероятностью помогут. Это может не иметь никакого отношения к кэшированию.   -  person Tim Medora    schedule 12.09.2013
comment
Я не получаю оповещение. Я зашел в chrome://cache/ в своем браузере (убедился, что он пуст), затем я пошел проверить элемент, отключил кеширование и затем перешел на свою страницу. Когда я обновил chrome://cache/, кеш все еще добавляется. Как вы думаете, браузер все еще кэширует, и, может быть, я неправильно предотвратил его кэширование?   -  person user1758415    schedule 12.09.2013
comment
Тогда это больше похоже на проблему истории. Когда вы меняете количество, меняется ли URL? (например, хэш)   -  person Tim Medora    schedule 12.09.2013
comment
Нет, тот же URL при изменении количества.   -  person user1758415    schedule 12.09.2013