为什么每个Ember数据存储事务都会向服务器发送额外的OPTIONS请求?

时间:2017-02-08 02:03:36

标签: javascript ember.js ember-data

我在我的应用中使用了ember-data,但是,我发现Ember数据会将两个分隔的请求(例如GETOPTIONS)设置为服务器当然比单个请求需要更长的时间。

请参阅下面的屏幕截图,OPTIONS请求需要1秒才能完成,每个用户操作总共需要2秒。

enter image description here

下面的代码片段是我用来在一个特定路线中获取模型的代码

model() {
    return this.store.findAll('card');
},

我的问题是它提出两个请求的原因?这是否有必要提出OPTIONS请求?如果不是,我怎么能停止让我的Ember数据OPTIONS请求?

1 个答案:

答案 0 :(得分:2)

这称为preflighted request,主要是出于安全考虑,在dealing with CORS时需要。

浏览器会自动执行此操作,以确保服务器信任所完成的请求。

有两种方法可以禁用它(或至少限制它):

  1. 通过设置Access-Control-Max-Age标题,该标题将允许缓存预检请求的结果并减少请求数量。

  2. 将您的请求转换为simple request,但不会触发预检请求。

  3. 简单的请求是满足以下所有条件的请求:

    1. 唯一允许的方法是:

      • GET
      • HEAD
      • POST
    2. 允许手动设置的唯一标题是Fetch spec定义为CORS-safelisted request-header

    3. 的标题

      如果您的请求使用除上述方法之外的任何其他方法或设置非CORS安全标头,它将自动预检。

      作为参考,OPTIONS方法由HTTP method definitions RFC定义,如:

        

      OPTIONS方法表示请求获取有关Request-URI标识的请求/响应链上可用的通信选项的信息。此方法允许客户端确定与资源相关的选项和/或要求,或服务器的功能,而不会暗示资源操作或启动资源检索。

      Related Question