LoginSignup
3
2

More than 5 years have passed since last update.

http-proxy-middleware を使用して画像操作の CORS 簡易対処 (Nuxt.js)

Last updated at Posted at 2018-07-18

画像操作時の CORS の問題

別サーバなど違うドメインからの画像を使用する際
表示するだけであれば特に問題はないですが
CORS の制限で JavaScript などでの操作ができないケースがあります。

サーバでの対応などで対応するケースがあるようですが

PHP などでいったんサーバでダウンロードし、
それをクライアントにレスポンスとして返すという対応をしたことがあったので

Vue.js などの開発の際に簡易に対応する方法として
http-proxy-middleware を使用することを試してみました。

設定など

nuxt.config.js
  ・・・
  proxy: {
    '/image/edit': {
      target: 'http://homestead.test/',
      pathRewrite: {
        '^/image/edit/': '',
      },
    },
  ・・・
  • http://homestead.test/ が画像サーバ
  • テンプレートなどで src を指定する際に /image/edit/~ として指定
edit.vue
<template lang="pug">
  div
    span http-proxy-middleware 使用
    croppa(
      :initial-image="'/image/edit/edit.jpg'"
    )
    span URL を直接指定
    croppa(
      :initial-image="'http://homestead.test/edit.jpg'"
    )
</template>

<script>
import Vue from 'vue';
import Croppa from 'vue-croppa';

Vue.use(Croppa);
export default {};
</script>

画像操作のコンポーネントとして Vue Croppa を使用しています。
initial-image に指定した URL で初期画像を指定しますが

  • 上のほうは http-proxy-middleware により読み替えられる指定であり
  • 下は直接 URL を指定

という形になっております。

結果

edit.jpg

http-proxy-middleware を使用したほうは正しく画像が反映され
URL 指定のほうは CORS の制限により読み込みに失敗しました。

http-proxy-middleware などを使用可能であれば
簡易的な CORS 対策に使用可能なのでは・・・と思われます。

3
2
2

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
3
2