Проблемы с кешем i18n json при использовании nginx

Я использую angular с i18n-переводами в json-файлах, таких как de.json и en.json. В моей производственной среде (nginx) у меня проблема в том, что эти JSON-файлы кэшируются веб-браузером. После обновления Chrome не будет загружать новую версию текущего файла JSON, даже если заголовок даты изменился.

Запрос информации (Chrome):

  • URL запроса: https://%5Bmy-site%5D/assets/i18n/de.json
  • Метод запроса: GET
  • Код состояния: 200 (из дискового кэша)
  • Удаленный адрес: XXXX:443
  • Политика реферера: no-referer-when-downgrade

Заголовки ответа:

  • контент-кодировка: gzip
  • Тип контента: приложение / JSON
  • дата: пт, 15 февраля 2019 09:04:42 GMT
  • etag: W / "5c62bf4d-2aea"
  • Последнее изменение: вторник, 12 февраля 2019 г., 12:42:53 по Гринвичу
  • сервер: nginx/1.14.0 (Ubuntu)
  • статус: 304

Кто-нибудь имеет опыт решения этой проблемы и может мне помочь?

1 ответ

Решение

Не совсем исправление для Angular/nginx, но я часто использую практику, чтобы добавить параметр строки запроса к ресурсу при его загрузке. Для меня это обычно происходит из номера версии файла / приложения.js, например, используя его в качестве начального числа для ГСЧ

Итак, вместо: <script src="/assets/de.json" />

использование <script src="/assets/de.json?_=12345" />

Бонусные баллы - в вашем приложении Angular вы можете отслеживать, какую версию активов вы хотите включить, а это означает, что вы можете выпускать новые файлы активов без необходимости немедленного обновления клиентами, если они есть в локальном кэше (хотя учтите, что новые клиенты получат новую версию независимо от)

Другие вопросы по тегам