corsの設定で悩んでいます
どう設定したらエラーがなくなるか、何が原因なのかがわかりません。
フロントとバックは別のサーバーを使っているためcorsを使用する前提でお願いします。
フロント firebase hosting
vue-cli (https://VueServer)
バックエンド heroku
goa design (https://APIServer)
###発生したエラー
Access to XMLHttpRequest at 'https://APIServer' from origin 'https://VueServer' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
トップページはリクエストヘッダーにAccess-Control-Allow-Originがあるのですが、別のページに遷移するとAccess-Control-Allow-Originがなくなっているのがchromeのデベロッパーモードで確認しました。
Access-Control-Allow-Originがないと書いてありますがaxiosの方で設定していように思えます、、、
Vue
requests.js
1import axios from "axios"; 2 3function request(method, url, options) { 4 var promise = null; 5 var params = {}; 6 var headers = {}; 7 if (options.params) { 8 // リクエストパラメーターのセット 9 params = options.params; 10 } 11 12 if (options.headers) { 13 // カスタムヘッダーのセット 14 headers = options.headers; 15 } 16 headers = { 17 'X-Requested-With': 'XMLHttpRequest', 18 'Content-Type': 'application/json', 19 'Access-Control-Allow-Origin': 'https://VueServer', 20 'crossDomain': true 21 } 22 23 promise = axios({ 24 method: method, 25 url: url, 26 data: params, 27 headers: headers, 28 }); 29 promise.catch(function () { 30 return console.log(promise); 31 }); 32 return promise; 33} 34export function Get(url, options) { 35 return request("get", url, options); 36} 37export function Post(url, options) { 38 return request("post", url, options); 39} 40export function Put(url, options) { 41 return request("put", url, options); 42} 43export function Delete(url, options) { 44 return request("delete", url, options); 45}
apiの叩きかたはこんな感じにしています
api.js
1export function postCardInfo(param) { 2 return Post(baseUrl + "/card", { 3 params: param, 4 }) 5}
goa design
design.go
1 2 cors.Origin("https://VueServer", func() { 3 cors.Headers("X-Requested-With", "Content-Type", "application/json", "text/plain", "Origin", "Accept") 4 cors.Methods("GET", "POST", "PATCH", "PUT", "DELETE", "OPTIONS") 5 cors.Expose("X-Time") 6 cors.MaxAge(600) 7 }) 8
cors "goa.design/plugins/v3/cors/dsl"
goa designのcorsプラグインを使用しています。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。