Ошибка HTTP OPTIONS в Codeigniter от RedSturgeon Restserver и Backbone.js

Приложение моей backbone.js бросающее HTTP OPTIONS, не обнаружило ошибку, когда я пытаюсь сохранить модель для моей спокойной веб-службы, расположенной на другом хосте / URL-адресе.

Основываясь на моих исследованиях, я собрал из этого сообщения, что:

запрос будет постоянно отправлять заголовок запроса OPTIONS http и вообще не запускать запрос POST.

По-видимому, CORS с запросами, которые будут «вызывать побочные эффекты для пользовательских данных», заставит ваш браузер «предварять» запрос с заголовком запроса OPTIONS, чтобы проверить утверждение, прежде чем фактически отправить ваш предполагаемый метод HTTP-запроса.

Я попытался обойти это:

  • Настроить emulateHTTP в Backbone на true.

Backbone.emulateHTTP = true;

  • Я также разрешил разрешать все варианты CORS и CSRF в заголовке.

    header (‘Access-Control-Allow-Origin: *’);
    header («Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept»); header («Access-Control-Allow-Methods: GET, POST, OPTIONS»);

Приложение разбилось, когда была введена строка кода Backbone.emulateHTTP .

Есть ли способ ответить на запрос OPTIONS в RESSIerver CodeIgniter и есть ли другие альтернативы, позволяющие либо отключить этот запрос из места разговора?


Я нашел это на Github в качестве одного из решений. Я не уверен, буду ли я использовать его, поскольку он немного устарел.

Я столкнулся с той же проблемой. Для его решения у меня есть MY_REST_Controller.php в ядре, и все мои controllerы REST API используют его как базовый class. Я просто добавил такой конструктор, чтобы обрабатывать запросы OPTIONS.

 function __construct() { header('Access-Control-Allow-Origin: *'); header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method"); header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE"); $method = $_SERVER['REQUEST_METHOD']; if($method == "OPTIONS") { die(); } parent::__construct(); } 

Это просто проверяет, является ли тип запроса OPTIONS, и если это так просто исчезает, который возвращает код 200 для запроса.

Вы также можете изменить свойство $allowed_http_methods в своем подclassе, чтобы исключить метод опций. Предыдущие версии REST_controller ничего не делали с OPTIONS, и добавление этой строки, похоже, имитирует это поведение:

 protected $allowed_http_methods = array('get', 'delete', 'post', 'put'); 
  • Каков наилучший способ разобрать ответ JSON из библиотеки запросов?
  • Операции без CRUD в службе RESTful
  • Разрешить запрос CORS REST в приложение Express / Node.js на Heroku
  • API REST. Лучшие практики. Где указать параметры?
  • Spring @ExceptionHandler не работает с @ResponseBody
  • Проблема отправки JSON-данных из JQuery в метод REST WCF
  • Служба REST Spring: получение JSON из запроса
  • В чем разница между текстом / xml vs application / xml для ответа webservice
  • Django REST Framework: добавление дополнительного поля в ModelSerializer
  • Как настроить ответный заголовок в JAX-RS, чтобы пользователь увидел всплывающее окно для Excel?
  • Захват параметров URL в request.GET
  • Давайте будем гением компьютера.