emberJS JSONAPI 适配器发送 OPTION 而不是 GET 请求 [重复]

Posted

技术标签:

【中文标题】emberJS JSONAPI 适配器发送 OPTION 而不是 GET 请求 [重复]【英文标题】:emberJS JSONAPI adapter sends OPTION instead of GET request [duplicate] 【发布时间】:2016-07-30 02:41:57 【问题描述】:

我正在尝试在 emberJS 应用程序中向工作服务器(通过 google POSTMAN 检查)发出基本请求。但是当我尝试它时,我收到 http 404 错误。然后我检查了错误,发现来自客户端的原始请求是 OPTION 请求而不是 GET 请求。另外,我设置了两个标题 AcceptContent-Typeapplication/json 并且在检查时,检查员打印了这些标题:

Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:accept, content-type
Access-Control-Request-Method:GET
Connection:keep-alive
Host:frontend.com
Origin:http://localhost:4200
Referer:http://localhost:4200/restaurant
User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/49.0.2623.110 Safari/537.36

现在是适配器

//Application.js adapter:
import DS from 'ember-data';

export default DS.JSONAPIadapter.extend(
    host: 'http://server.com',
    namespace: 'v1',
    headers: 
      "Accept": "application/json",
      "Content-Type": "application/json"
    
);

有没有办法关闭这个选项,或者有一些解决方法吗?我不相信 ember 有这么多错误,因为这些应该是 emberJS 应该做的主要事情之一——发送请求。 任何帮助都将不胜感激。

【问题讨论】:

您的评论表明您认为 Ember 有问题?您熟悉跨域请求的工作原理吗? (假设您的客户端代码和host 属性是不同的主机) 你可能想了解这个话题,(顺便说一句,它与 Ember 无关,这是浏览器的工作方式):developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS 昨天我因为这个问题太紧张了,所以我认为余烬有问题。我根本不熟悉 CORS。现在我将尝试在后端允许 CORS 来解决问题。谢谢:) 【参考方案1】:

这是“请求预检”。在进行跨源请求时,浏览器首先通过发送 OPTION 请求来发送预检请求。如果 OPTION 请求响应成功,则将真正的请求发送到服务器。

在这种情况下,“预检”会失败:

服务器未启用 CORS 出现认证/授权问题 未找到服务功能 (404) 服务函数不接受您要发送的标头

您可以使用以下关键字进行搜索:preflight, cors

【讨论】:

或者服务器不支持OPTIONS请求。有没有人知道关闭 ember 数据中的预检请求? WP-REST-API 似乎不支持它(难以置信) 您无法将其关闭。这是由浏览器完成的。 实际上,您可以通过在 Ember 数据适配器中将内容类型设置为 text/plain 来阻止浏览器执行此操作。它仅用于开发,所以我看不出支持 OPTIONS 的意义。

以上是关于emberJS JSONAPI 适配器发送 OPTION 而不是 GET 请求 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

ruby 搜索适用于Jsonapi-suite的适配器

text 适用于jsonapi_suite的Mongoid适配器

EmberJS / Ember-data:尽管存在所有ID,但hasMany集合不完整

如何让 Java / Spring MVC 返回基于 jsonapi.org ID 的格式?

emberjs 基金会 5 手风琴

Emberjs:从子视图中解析表单数据