Этаги в Rails 5 с Phusion / Apache 2.4 - PullRequest
0 голосов
/ 20 мая 2019

При использовании fresh_when strong_etag: @collection в представлении Rails etag генерируется до того, как Apache его сжал, поэтому ему не хватает суффикса "-gzip".

Однако, если Apache настроен на ответы gzip,Etag, который отправляет браузер, будет содержать суффикс «-gzip».

Это может быть или не быть связано с использованием Phusion Passenger в качестве прокси-сервера для Rails.

Предлагаемые решения включают использование Apache stripсуффикс "-gzip", добавив RequestHeader edit "If-None-Match" "^(.*)-gzip$" "$1" к директивам сайта.Тем не менее, это не похоже на работу.

Есть ли другой способ переписать заголовок, чтобы убрать суффикс, чтобы можно было успешно сравнивать Etags?

1 Ответ

0 голосов
/ 20 мая 2019

Это можно сделать в Rails, добавив before_action к контроллеру приложений (чтобы повлиять на все запросы).

class ApplicationController < ActionController::Base

  before_action :fix_etag_header

...

  private

  def fix_etag_header
    if request.headers["HTTP_IF_ONE_MATCH"]
      request.headers["HTTP_IF_NONE_MATCH"].sub! "-gzip", ""
    end
  end
end

Очевидно, что это обходит директиву о том, что сжатый ресурс должен иметь уникальный Etag из того же ресурса без сжатия. Это может вызвать проблемы, если эти аспекты HTTP-запроса изменены или устранены другим кодом.

Однако в большинстве случаев это «достаточно хорошее» решение, особенно если учесть, что для этого требуется всего 6 строк.

...