【问题标题】:Ionic service worker send OPTIONS for GET离子服务工作者为 GET 发送 OPTIONS
【发布时间】:2018-07-18 17:07:49
【问题描述】:

我目前正在使用 Ionic 从 API 获取数据。虽然最近几天一直在工作,但我不知道它是如何停止工作的。

我正在使用@angular/http 提出我的请求。当不使用任何标头时,我的请求转到GET 方法,并且由于我需要授权令牌而不起作用。

但是,如果我通过以下方式获得标题:

let headers = new Headers();
headers.append('Authorization', this.bearerToken);            
let options = new RequestOptions({ headers: headers });

它也不起作用。请求转到OPTIONS 方法,并且正在返回:

Unauthorized header authorization

我可以在 Ionic 上做些什么来解决这个问题,或者我应该警告 API 开发人员以便让他们做一些更改吗?

编辑:API 开发人员正在使用 Symfony 和 Nelmio CORS Bundle 来处理这些设置

nelmio_cors:
   defaults:
       origin_regex: true
       allow_origin: ['%env(CORS_ALLOW_ORIGIN)%']
       allow_methods: ['GET', 'OPTIONS', 'POST', 'PUT', 'PATCH', 'DELETE']
       allow_headers: ['Content-Type', 'Authorization']
       max_age: 3600
   paths:
       '^/': ~

正如@Moshe 提到的,他们的配置应该包含一些Access-Control-Allow-Headers,而且他们显然这样做了..

【问题讨论】:

  • 你能分享一下你的http请求实现吗?
  • 你是说这个? const data = this.http.get(dataUrl, options).map(data => data.json());
  • 基本上,您需要让 API 开发人员向您提供他们希望您如何从他们那里查询数据的详细信息。就像端点描述(什么参数,他们期望什么标题) - 然后你可以基于它构建你的实现。如果您可以用他们的回答更新问题 - 我可以帮助您实施

标签: javascript ionic-framework cors service-worker


【解决方案1】:

当涉及到 HTTP 标头(例如授权)时,客户端会发送一个OPTIONS 请求,以便首先检查标头是否被服务器接受。我的客户端-服务器关系也有类似的问题。您必须在服务器的 Access-Control-Allow-Headers 中启用授权。

例子:

header('Access-Control-Allow-Headers: Content-Type, Authorization');

【讨论】:

  • 嘿,如果问题没有提供上下文,你怎么能假设它的 CORS 问题?据我所知,这里没有错误吗?我想念什么吗?该问题暗示存在与身份验证相关的错误 - 这意味着没有基于 CORS 的拒绝。所以我想知道
  • Unauthorized header authorization 也是我的错误。我用CORS修复了它。由于标头是未经授权的,这意味着服务器需要“授权”它。此外,他能够在没有标头的情况下发出GET 请求,并且添加它会导致麻烦。 (它转到OPTIONS 的事实只是标准的HTTP 内容。使用Authorization 标头,我经历了“两个请求:”一个OPTIONS,然后是一个GET. OP 只看到@987654329 的事实@ 表示 header 被服务器拒绝
  • 我的荣幸。很高兴帮助:)
  • 我已经用配置参数编辑了我的问题
  • 尝试 allow_origin: ['*']
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-28
  • 2021-12-27
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
相关资源
最近更新 更多