我在我的应用中使用了ember-data,但是,我发现Ember数据会将两个分隔的请求(例如GET
和OPTIONS
)设置为服务器当然比单个请求需要更长的时间。
请参阅下面的屏幕截图,OPTIONS
请求需要1秒才能完成,每个用户操作总共需要2秒。
下面的代码片段是我用来在一个特定路线中获取模型的代码
model() {
return this.store.findAll('card');
},
我的问题是它提出两个请求的原因?这是否有必要提出OPTIONS
请求?如果不是,我怎么能停止让我的Ember数据OPTIONS
请求?
答案 0 :(得分:2)
这称为preflighted request,主要是出于安全考虑,在dealing with CORS时需要。
浏览器会自动执行此操作,以确保服务器信任所完成的请求。
有两种方法可以禁用它(或至少限制它):
通过设置Access-Control-Max-Age标题,该标题将允许缓存预检请求的结果并减少请求数量。
将您的请求转换为simple request,但不会触发预检请求。
简单的请求是满足以下所有条件的请求:
唯一允许的方法是:
允许手动设置的唯一标题是Fetch spec定义为CORS-safelisted request-header
如果您的请求使用除上述方法之外的任何其他方法或设置非CORS安全标头,它将自动预检。
作为参考,OPTIONS方法由HTTP method definitions RFC定义,如:
OPTIONS方法表示请求获取有关Request-URI标识的请求/响应链上可用的通信选项的信息。此方法允许客户端确定与资源相关的选项和/或要求,或服务器的功能,而不会暗示资源操作或启动资源检索。