离子视图 - 对预检请求的响应未通过访问控制检查:没有“Access-Control-Allow-Origin”标头

Posted

技术标签:

【中文标题】离子视图 - 对预检请求的响应未通过访问控制检查:没有“Access-Control-Allow-Origin”标头【英文标题】:Ionic view - Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header 【发布时间】:2018-09-16 22:15:32 【问题描述】:

我之前看到有人问过这个问题,但答案对我没有帮助。

我有一个使用我自己构建的 Rails 5.2 api 的 ionic 移动应用程序。 我无法通过 PUT 请求。 我遇到了这个错误。

Failed to load https://votingapi.herokuapp.com/api/v1/something: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8100' is therefore not allowed access.

我已经向 API 发出了 GET 请求,没有任何问题。 通过启用 chrome 的 Allow-Control-Allow-Origin: * 插件,设法解决了 ionic serve --lab 中的问题,但问题仍然存在于 Ionic 视图中。

有什么想法吗?

宝石文件

gem 'rack-cors', require: 'rack/cors'

应用程序.rb

config.middleware.insert_before 0, Rack::Cors do
      allow do
        origins '*'
        resource '*',
                 headers: :any,
                 methods: %w[:get :post :put :delete],
                 expose: %w[access-token expiry token-type uid client],
                 max_age: 0
      end

对离子的请求

update(id, result)
    let headers = new Headers();
    let body = JSON.stringify(vote: result)
    headers.append("Accept" , 'application/json');
    headers.append('Content-Type', 'application/json');
    let options = new RequestOptions( headers: headers );
    return this.http.put(`$this.apiUrl/$id`, body, options)
  

【问题讨论】:

【参考方案1】:

预检请求是一个 http 选项请求 iirc。所以你必须将它添加到方法中。试试这个

methods: %w[:get :post :put :options :delete],

【讨论】:

感谢您的回答!不幸的是,它对我没有用。【参考方案2】:

已解决

所以我们找到了解决这个问题的办法。

这是我们所做的更改:

%w[:get :post :put :delete :options] => %i[get post put delete options]

结帐:https://ionicframework.com/docs/wkwebview

他们在 ionic 框架上的某个时候切换到了这个,它在那里的某个地方说,与之前的相比,这会强制执行正确的 CORS 设置。因此,如果后端没有适当地设置 cors 规则,它将无法工作 现在。

我们需要一个用于该配置的符号数组,而我们所拥有的是生成一个字符串数组

%w[:get :post :put :delete :options] returns [":get", ":post", ":put", ":delete", ":options"]

%i[get post put delete options] returns [:get, :post, :put, :delete, :options]

希望这可以有人:)

【讨论】:

以上是关于离子视图 - 对预检请求的响应未通过访问控制检查:没有“Access-Control-Allow-Origin”标头的主要内容,如果未能解决你的问题,请参考以下文章

“对预检请求的响应未通过访问控制检查”是啥意思?

对预检请求的响应未通过访问控制检查错误

对预检请求的响应未通过访问控制检查

对预检请求的响应未通过访问控制检查

对预检请求的响应未通过访问控制检查

CORS:对预检请求的响应未通过访问控制检查:预检请求不允许重定向