LaravelLogo.pngのサムネイル画像



先日用意したAmazon API(Amazon Product Advertising API)を利用したAPIを、リクエスト数節約のためにCloudFrontでキャッシュさせようとしたんだけど、どう設定してもキャッシュしてくれなくてハマってました。見直す中でCloudFrontの設定に間違いもあってそれで混乱してしまったのですが、どうやら設定のせいじゃない。APIの取得結果をJSONで返すだけだからCookieも使っていないし、なぜキャッシュされないのか……

と思いながら冷静になってChromeのデベロッパーツールでリクエスト見てたらこんなんなってました。


ss_2019-05-17_101127.png


あ、これあかんやつやん。


Laravelの設定でした

LaravelでCache-Controlヘッダーを設定する - honeplusのメモ帳

Laravelでは、レスポンスのCache-Controlヘッダーがデフォルトでは no-cache, private で返るみたいなんだけど、キャッシュしてもいいAPIでは設定変えたかったのでその方法。

ググると自前でミドルウェア作って~みたいな情報も出てくるけど、結論からいうとLaravel 5.6からSetCacheHeadersというミドルウェアが標準で用意されているので、今はこれを↓みたいに有効にするだけでよい。



マジッスか。

設定の仕方は上の記事にある方法でもいいし、対象が少ないならこんな感じでもいい。




おおお、確かにキャッシュされた。デフォルトで明確にキャッシュオフが設定されていて、必要なときだけオンにするっていうことなのね。そうだったのか。
  • About

    I'm a web designer/programmer in Kyoto, Japan. Also work as a blogger, DJ.

    NOBODY:PLACE is my personal blog since 1998. Everything I'm interested in is here.

    See Also
    Other Works
    Feed
  • Recent Hatena Bookmark
  • Monthly Archives
    Categories