Почему Maven отключает кэширование для HTTP-запросов?

Параметры Maven по умолчанию для HTTP-запросов, например те, которые Maven использует для извлечения артефактов из репозиториев, включают следующие заголовки:

Cache-control: no-cache
Cache-store: no-store
Pragma: no-cache
Expires: 0
Accept-Encoding: gzip

Это похоже на документированное поведение. По умолчанию универсал Maven для HTTP (т. Е. "Облегченный" клиент) не позволяет отключить эти заголовки.

Почему Maven настроен таким образом по умолчанию? Для артефактов, которые на самом деле имеют версии, они никогда не должны изменяться, верно?

Я работаю в среде, где многие разработчики используют общий HTTP-прокси, и это означает, что разработчики никогда не получат выгоду от кэширования. И у нас есть dependencyManagement на всех наших зависимостях и не используйте SNAPSHOT или другие версии, которые могут измениться, поэтому кажется, что кэширование должно быть безопасным.

Что я могу добавить в мои settings.xml или pom.xml, чтобы отключить эти заголовки и позволить нашему прокси-серверу кэшировать ответы и возвращать их?

1 ответ

Решение

Это похоже на документированное поведение. По умолчанию универсал Maven для HTTP (т. Е. "Облегченный" клиент) не позволяет отключить эти заголовки.

На самом деле, вы можете настроить клиент Lightweight HTTP Wagon, используя доступные установщики, например (Maven 2.0+):

<servers>
  <server>
    <id>central</id>
    <configuration>
      <useCache>true</useCache>
    </configuration>
  </server>
</servers>

Или даже переопределить или предоставить дополнительные заголовки HTTP (Maven 2.1+):

<server>
  <id>central</id>
  <configuration>
    <httpHeaders>
      <property>
        <name>User-Agent</name>
        <value>Internal-Build-System/1.0</value>
      </property>
    </httpHeaders>
  </configuration>
</server>

Об этом прекрасно рассказывает Бретт Портер в разделе "Настройка HTTP-подключений Maven".

Почему Maven настроен таким образом по умолчанию?

Догадка: это безопасное значение по умолчанию, чтобы избежать проблем с плохо настроенными прокси (не совсем уверен, что это правда).

Что я могу добавить в мои settings.xml или pom.xml, чтобы отключить эти заголовки и позволить нашему прокси-серверу кэшировать ответы и возвращать их?

Вышеуказанные настройки идут в settings.xml (конечно, адаптировать id если необходимо, central для репозитория по умолчанию, используемого Maven).

Если это не работает (это должно быть), альтернативой было бы переключиться обратно на HTTPClient Wagon и настроить его, как описано в Расширенной конфигурации HttpClient HTTP Wagon.

Рекомендации

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