クロスサイト Preflight

例えばリクエストヘッダを追加するなどの特殊なクロスサイトアクセスでは、プリフライト【preflight】リクエストが発生します。

この場合、まず OPTIONS で許可があるかどうか事前に確認し、その後に実際のリクエストが送信されます。

受信側は OPTIONS を受け取る可能性があることを考慮して実装します。

JSONP ではプリフライトは発生しません。

Script Source
var data = {"name_inputText1":"テキスト1", "name_textArea1":"テキスト2"};
var url = "https://dodat.jp/samples/pr_ajax/samples/13/response.php";

// GET (JSON, set header)
var getAjax = new PRAjax(url, "get");
getAjax.setHeaders({"abc":"def"});
getAjax.onClick("#id_button", data);

// GET (JSONP, set header)
var getAjax2 = new PRAjax(url, "get", true);
getAjax2.setHeaders({"abc":"def"});
getAjax2.onClick("#id_btnGET", data);

response.php
$method = $_SERVER['REQUEST_METHOD'];
if($method == 'OPTIONS'){
	header('Access-Control-Allow-Origin: https://app.softwarenote.info');
	header('Access-Control-Allow-Headers: abc');
	//header('Access-Control-Allow-Headers: *');
	exit();
}

$vals = array();
$vals['inputText1'] = $_REQUEST['name_inputText1'];
$vals['textArea1'] = $_REQUEST['name_textArea1'];

header('Access-Control-Allow-Origin: https://app.softwarenote.info');

$res = array();
$res['vals'] = $vals;
$response = json_encode($res, JSON_UNESCAPED_UNICODE);
print $response;