2016-04-08 48 views
0

我想在一个emberJS应用程序中向一个工作服务器(通过谷歌POSTMAN检查)提出基本请求。但是,当我尝试它,我得到HTTP 404错误。然后我检查了错误,发现来自客户端的原始请求来自OPTION请求,而不是GET请求。另外,我已经设置两个头,AcceptContent-Typeapplication/json和检查时,检查印刷这些标题:emberJS JSONAPI适配器发送OPTION而不是GET请求

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" 
    } 
}); 

是有一些方法把这个OPTION关闭,还是有一些解决方法?我不相信烬是如此错误,因为这些应该是呃应该做的主要事情之一 - 发送请求。 任何帮助appreaciated。

+0

你的评论表明你相信Ember是越野车吗?您是否熟悉跨域请求的工作方式? (假设你的客户端代码和'host'属性是不同的主机) –

+1

你可能想了解这个主题,(顺便说一下,它与Ember无关,它是浏览器的工作方式):https://developer.mozilla .org/zh-CN/docs/Web/HTTP/Access_control_CORS –

+1

昨天我太紧张了,因为这个问题,所以我认为烬是越野车。我根本不熟悉CORS。现在我将尝试让CORS在后端解决问题。谢谢:) – xpg94

回答

1

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

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

  • CORS不是由服务器
  • 认证/授权问题发生
  • 服务功能中未找到(404)
  • 服务启用功能不接受您将发送的标头

您可能用这些关键词搜索:preflight, cors

+0

或者服务器可能不支持OPTIONS请求。有没有人有关于关闭烬数据中的预检请求的知识? WP-REST-API似乎不支持它(难以置信) – Epirocks

+0

您无法关闭它。这是通过浏览器完成的。 – ykaragol

+0

实际上,您可以通过在Ember数据适配器中将内容类型设置为text/plain来停止浏览器。它仅用于开发,所以我没有看到支持OPTIONS的意义。 – Epirocks

相关问题