🌚

SwaggerでHTTPリクエストを実行したが期待するレスポンスヘッダーが表示されないとき

2023/02/14に公開

問題

SwaggerでHTTPリクエストを実行したけれども、レスポンスヘッダーに'access-token', 'uid', 'client'といったヘッダーが表示されませんでした。

対応方法

Access-Control-Expose-Headersにヘッダーを追加すれば良いです。

今回APIはRailsで作成しています。CORSの設定はrack-corsというgemを使用しています。
その場合のAccess-Control-Expose-Headersへの追加方法はこちらです。

Rails.application.config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins ENV['ALLOW_ORIGIN'] || ""

    resource "*",
      headers: :any,
      expose: ['access-token', 'uid', 'client', 'expiry', 'token-type'], # ここに追加
      methods: [:get, :post, :put, :patch, :delete, :options, :head]
  end
end

終わりに

"request header" "not include" "swagger" みたいな感じで検索して、以下の情報に辿り着きました。この情報でCORSの問題だとわかりました。
https://groups.google.com/g/swagger-swaggersocket/c/TD0MWY09ESo

CORSは雰囲気でしか理解していないので、CORSの問題と気づくのに時間がかかりました...
早くCORSの問題だと気付く人が増えれば良いなと思い、記事を公開しました。

参考にさせていただいたリンク

https://qiita.com/tomoyukilabs/items/81698edd5812ff6acb34
https://qiita.com/cyperaceae/items/a6e5ec7f0cdf89365e8c
https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Access-Control-Expose-Headers

Discussion