Rails Controller層でCORSヘッダ付与

特定のControllerでCORSヘッダを制御したくなった。

こんな感じでかけた。

class OptionsRequestController < ApplicationController
  before_action :set_cors_header

  private

  def set_cors_header
    response.headers['Access-Control-Allow-Origin'] = '*' # or 特定アクセス元FQDNを書く
    response.headers['Access-Control-Allow-Credentials'] = true
    # 必要に応じて下記も設定する
    # response.headers['Access-Control-Allow-Headers'] = 'Foo,Bar'
    # response.headers['Access-Control-Allow-Methods'] = 'X,Y,Z'
  end
end

参考

crossorigin属性

crossorigin 属性は、 <audio>, <img>, <link>, <script>, <video> の各要素で有効であり、 CORS への対応を提供し、したがって要素が読み取るデータのために CORS リクエストの構成を有効にします。

HTML 属性: crossorigin - HTML: HyperText Markup Language | MDN

説明
anonymous リクエストはCORSヘッダーを使用し、資格情報フラグには’same-origin’が設定されます。宛先が同一オリジンでない限り、クッキー、クライアントサイドSSL証明書、HTTP認証によるユーザー資格情報の交換は行われません。
use-credentials リクエストはCORSヘッダーを使用し、資格情報フラグには’include’が設定され、ユーザー資格情報は常に含まれます。
”” crossoriginまたはcrossorigin=”“のように属性に空の値を設定すると、anonymousと同じになります。

不正なキーワードや空文字列を指定すると、 anonymous が指定されたものと同じように扱われます。