別のホスト/ URLにあるRESTfulWebサービスにモデルを保存しようとすると、backbone.js
アプリケーションがHTTPOPTIONS notfoundエラーをスローします。
私の調査に基づいて、私はこれから収集しました post that:
リクエストは常にOPTIONShttpリクエストヘッダーを送信し、POSTリクエストをまったくトリガーしません。
明らかに、「ユーザーデータに副作用を引き起こす」リクエストを含むCORSは、目的のHTTPリクエストメソッドを実際に送信する前に、ブラウザがOPTIONSリクエストヘッダーを使用してリクエストを「プリフライト」し、承認を確認します。
私はこれを回避しようとしました:
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リクエストに応答する方法はありますか?また、このリクエストの会話を無効にする他の方法はありますか?
私は1つの解決策として これは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');