簡體   English   中英

Phil Sturgeon的Codeigniter Restserver和Backbone.js中的HTTP OPTIONS錯誤

[英]HTTP OPTIONS error in Phil Sturgeon's Codeigniter Restserver and Backbone.js

當我嘗試將模型保存到位於另一個主機/ URL上的restful Web服務時,我的backbone.js應用程序拋出了HTTP OPTIONS not found錯誤。

根據我的研究,我從這篇文章中收集到:

請求將不斷發送OPTIONS http請求標頭,並且根本不會觸發POST請求。

顯然CORS的請求將“對用戶數據產生副作用”將使您的瀏覽器“預檢”帶有OPTIONS請求標頭的請求以檢查批准,然后再實際發送您的預期HTTP請求方法。

我試圖繞過這個:

  • 將Backbone中的emulateHTTP設置為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代碼行時,應用程序崩潰了。

有沒有辦法在CodeIgniter RESTServer中響應OPTIONS請求,是否還有其他選擇允許從談話地點禁用此請求?


在Github上找到了這個解決方案。 我不確定我是否應該使用它,因為它看起來有點過時了。

我遇到了完全相同的問題。 為了解決這個問題,我在核心中有一個MY_REST_Controller.php,我所有的REST API控制器都將它用作基類。 我只是添加了這樣的構造函數來處理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屬性以排除options方法。 以前版本的REST_controller對OPTIONS沒有任何作用,添加此行似乎模仿了這種行為:

protected $allowed_http_methods = array('get', 'delete', 'post', 'put');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM