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

ad583255925 · 2017年11月07日 · 最后由 yfractal 回复于 2017年11月07日 · 1073 次阅读

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

CardDetail.vue?950b:100 OPTIONS http://localhost:3000/api/v1/cards/311 404 (Not Found)
共收到 6 条回复

解决了, 写一个你需要被跨域访问时的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 关闭了讨论 11月07日 14:35
ad583255925 重新开启了讨论 11月07日 14:42

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

webpack 开个 proxy 转发。

Rei 回复

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

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

改下 /etc/hosts 文件

这种 127.0.0.1 dev.your-domain.com

再用 nginx 代理下。

ad583255925 关闭了讨论 11月08日 09:05
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册