JavaScript 我想问下本地调试,用 Rails 做后端,Webpack 做前端,fetch API 的跨域问题是怎么解决的

ad583255925 · November 07, 2017 · Last by yfractal replied at November 07, 2017 · 6461 hits

一旦有跨域请求,fetchApi 首先会发送一个 OPTION请求,但是在 rails 里面怎么处理这个请求呢?

CardDetail.vue?950b:100 OPTIONS http://localhost:3000/api/v1/cards/311 404 (Not Found)

解决了, 写一个你需要被跨域访问时的OPTIONS路由

routes.rb

match '/api/v1/cards/:id', :controller => 'option_configs', :action => 'options', :via => :options

option_configs_controller.rb

class OptionConfigsController < ApplicationController
  def options
    headers['Access-Control-Allow-Origin'] = "*"
    headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS, PUT'
    headers['Access-Control-Allow-Headers'] = 'Content-Type'
    head :ok
  end
end

ad583255925 closed this topic. 07 Nov 14:35
ad583255925 reopened this topic. 07 Nov 14:42

这不是解决,这是欺骗浏览器,会产生漏洞…

webpack 开个 proxy 转发。

Reply to Rei

那那个OPTIONS请求是做什么用的

是 CORS 的规范,如果两个服务都是自己的还是做成 nginx 代理更方便

改下 /etc/hosts 文件

这种 127.0.0.1 dev.your-domain.com

再用 nginx 代理下。

ad583255925 closed this topic. 08 Nov 09:05
You need to Sign in before reply, if you don't have an account, please Sign up first.