Адаптер emberJS JSONAPI отправляет OPTION вместо запроса GET

Я пытаюсь сделать базовый запрос на рабочий сервер (проверенный через Google POSTMAN) в приложении emberJS. Но когда я пытаюсь это сделать, я получаю ошибку http 404. Затем я проверил ошибку и увидел, что исходный запрос, поступающий со стороны клиента, пришел как запрос OPTION вместо запроса GET. Кроме того, я установил два заголовка Accept и Content-Type на application/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 - отправлять запросы. Любая помощь приветствуется.


person xpg94    schedule 08.04.2016    source источник
comment
Ваш комментарий указывает на то, что вы считаете, что Ember глючит? Вы знакомы с принципами работы междоменных запросов? (Предполагая, что ваш клиентский код и свойство host являются разными хостами)   -  person Steve H.    schedule 08.04.2016
comment
Возможно, вы захотите узнать об этой теме (кстати, это не имеет ничего общего с Ember, так работают браузеры): developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS   -  person Steve H.    schedule 08.04.2016
comment
Вчера я был слишком взволнован из-за этой проблемы, поэтому подумал, что тлеющий уголек глючит. Я вообще не был знаком с CORS. Теперь я попытаюсь разрешить CORS на задней панели решить проблему. Спасибо :)   -  person xpg94    schedule 09.04.2016


Ответы (1)


Это «предполетная проверка». При выполнении запроса с перекрестным происхождением браузер сначала отправляет предварительный запрос, отправляя запрос OPTION. Если на запрос OPTION получен успешный ответ, реальный запрос будет отправлен на сервер.

«Предполетная проверка» не выполняется в таких случаях:

  • CORS не включен сервером
  • Возникли проблемы с аутентификацией / авторизацией
  • сервисная функция не найдена (404)
  • сервисная функция не принимает заголовок, который вы отправляете

Вы можете выполнять поиск по этим ключевым словам: preflight, cors

person ykaragol    schedule 08.04.2016
comment
Или, возможно, сервер не поддерживает запрос OPTIONS. Кто-нибудь знает, как отключить предполетный запрос в данных ember? WP-REST-API, похоже, не поддерживает его (невероятно) - person Epirocks; 04.05.2016
comment
Вы не можете выключить его. Это делает браузер. - person ykaragol; 04.05.2016
comment
На самом деле вы можете запретить браузеру делать это, установив тип содержимого text / plain в вашем адаптере данных Ember. Это только для разработки, поэтому я не вижу смысла поддерживать OPTIONS. - person Epirocks; 13.05.2016