Как предотвратить использование кэша перенаправления Google Chrome при перенаправлении в коде Angular? - PullRequest
0 голосов
/ 16 января 2019

Я разрабатываю приложение для управления пользователями на Angular 5, и пользователи сообщили о странной ситуации. Поток выглядит следующим образом:

  • приложение проверяет некоторую информацию в локальном хранилище

  • если информация верна, она выполняет перенаправление на другой компонент:

    this.router.navigateByUrl("/user-list");  // points to UserListComponent
    
  • в свою очередь UserListComponent загружает список на основе некоторых фильтров.

  • для некоторых пользователей UserListComponent выполняет загрузку, используя более старую версию параметров, что приводит к сбою. Если они обновляют страницу, она работает правильно (обычное обновление, а не принудительное с использованием Ctrl-F5 или Ctrl-Shift-R).

Я пробовал следующее:

  • доступ из Internet Explorer 11 или Firefox (Quantum или FrontMotion) => отлично работает
  • очистка кэша Chrome за последние дни исправляет поведение
  • проверенные запросы, сделанные SPA в Инструментах разработчика:

  • проверено в других средах, и ошибка действительно возникает (единственное отличие не в использовании HTTPS)

Я проверил этот вопрос и ответы на него, но неясно, как действовать в Angular, так как большинство предложений касаются пользователей, выполняющих что-то на стороне клиента (в Google Chrome).

SPA размещается в IIS, поэтому содержимое web.config может иметь значение, поскольку содержит два переписывания (одно для http-https и одно для обновления страницы без потери внутреннего URL-адреса SPA):

  <system.webServer>
    <rewrite>
      <rules>
        <rule name="HTTP 2 HTTPS" patternSyntax="Wildcard" stopProcessing="false">
          <match url="*" />
          <conditions logicalGrouping="MatchAny">
            <add input="{HTTPS}" pattern="off" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Found" />
        </rule>

        <rule name="Angular Routes" stopProcessing="true">
          <match url=".*" />
          <conditions logicalGrouping="MatchAll">
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          </conditions>
          <action type="Rewrite" url="/spa/" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>

Подводя итог всему вышесказанному, я чувствую, что причина связана с использованием перенаправлений + Chrome + (возможно, HTTPS).

Вопрос: Как предотвратить использование кэша перенаправления Google Chrome при перенаправлении в коде Angular?

...