Ошибка HTTP OPTIONS в Codeigniter от RedSturgeon Restserver и Backbone.js
Приложение моей backbone.js
бросающее HTTP OPTIONS, не обнаружило ошибку, когда я пытаюсь сохранить модель для моей спокойной веб-службы, расположенной на другом хосте / URL-адресе.
Основываясь на моих исследованиях, я собрал из этого сообщения, что:
запрос будет постоянно отправлять заголовок запроса OPTIONS http и вообще не запускать запрос POST.
- Сделайте ASP.NET конвертер WCF в JSON, опустив tags «Key» и «Value»
- Стандарт останова: параметры пути или параметры запроса
- Что такое программирование RESTful?
- Вызов в REST Resource url
- WCF + REST: Где данные запроса?
По-видимому, 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 в качестве одного из решений. Я не уверен, буду ли я использовать его, поскольку он немного устарел.
- Почему медленное поглощение WADL?
- Как сделать удаленный вызов REST внутри Node.js? любой CURL?
- Использование HTTPS с REST в Java
- Аутентификация RESTful через Spring
- Как обращаться с CORS с использованием JAX-RS с Джерси
- REST API. Лучшая практика. Как принять список значений параметров в качестве входных
- Ошибка Powershell v3 Invoke-WebRequest HTTPS
- Ошибка API REST возвращает хорошие практики
Я столкнулся с той же проблемой. Для его решения у меня есть 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');