LoginSignup
4
4

More than 5 years have passed since last update.

Rails4.2でHTTP/2のServer Push用ヘッダをつけてみたメモ

Posted at

HTTP/2のServer Pushって、Linkヘッダに対象のURIを入れたらh2oとかがよろしくやってくれるそうだよ。

じゃあRails4.2でLinkヘッダを差し込んで見る。

Precompiled Assets

さて、renderに応じて必要なassetsの実際のパスが必要だね。Rails.application.assets_manifestに格納されているみたい。

ちなみにフロント側のmrubyなどで現役Assetsのパスを拾いたい場合、パスがそれぞれ.sprockets-manifest-(MD5ハッシュ).jsonに書いてあるので、それを使うとよさそう。

Linkヘッダの付与

とりあえずコントローラがこうだとします。

class ResourceController < ApplicationController

  def index
  end

end

やってみたアプリではフロントをRiotで書いたSPAにしてあるので、実際のコードも上記のまんまだったりします。

とくにいじってないRailsなのでapplication.css,application.jsに対応するファイルをpush対象とすればよさげ。

class ResourceController < ApplicationController
  before_action :prepare_link_header # for server push

  def index
  end

  protected

  def prepare_link_header
    push_keys = ['application.css', 'application.js']
    prefix = String.new('/assets/')
    push_paths = push_keys.map { |k| prefix + Rails.application.assets_manifest.assets[k] }

    response.headers["Link"] = push_paths.map{|p| "<#{p}>; rel=preload"}.join("\n")
  end

end

一旦全部コントローラに書いてみた。これで一旦動作を確認しよう。

pushed.jpg

pushedきたわ。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4