現在の言語: 日本語

戻る

HTTP_ORIGIN
$_SERVER

PHPにおいて、HTTP_ORIGINは、
$_SERVER スーパーグローバル変数を通じてアクセスできるHTTPヘッダーの一つです。
これは主にオリジン間リソース共有 (CORS) のコンテキストで使用され、
リクエストがどのオリジン(スキーム、ホスト、ポート番号の組み合わせ)から発信されたかを示します。

[サンプル]

copy
// 許可するオリジンリスト
$allowed_origins = ['https://nekofes.github.io', 'https://www.nekofes.github.io'];

// リクエストのOriginヘッダーを取得
$origin = $_SERVER['HTTP_ORIGIN'] ?? "";

// Originが許可リストに含まれているか確認
if (in_array($origin, $allowed_origins))
{
	// 許可する場合、Access-Control-Allow-Originヘッダーをセット
	header('Access-Control-Allow-Origin: ' . $origin);
	// その他のCORS関連ヘッダーも必要に応じてセット
	header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
	header('Access-Control-Allow-Headers: Content-Type, Authorization');
}
else
{
	// 許可しない場合の処理(例: エラーログを出力するなど)
	// ブラウザはデフォルトでアクセスをブロックする
}

// OPTIONSメソッドに対するプリフライトリクエストの処理
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
	exit; // OPTIONSリクエストでは実際の処理は不要
}

// ここから通常のリクエスト処理...
copy
// Allowed origin list
$allowed_origins = ['https://nekofes.github.io', 'https://www.nekofes.github.io'];

// Get the request's Origin header
$origin = $_SERVER['HTTP_ORIGIN'] ?? "";

// Check if the origin is in the allowed list
if (in_array($origin, $allowed_origins))
{
// If allowed, set the Access-Control-Allow-Origin header
header('Access-Control-Allow-Origin: ' . $origin);
// Set other CORS-related headers as needed
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Authorization');
}
else
{
// Handling the case where the request is not allowed (e.g., outputting an error log)
/ Browsers block access by default.
}

// Process a preflight request for the OPTIONS method.
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
exit; // No actual processing is required for OPTIONS requests.
}

// Normal request processing begins...

$_SERVER['HTTP_ORIGIN']
オリジンは、以下の3つの要素の組み合わせで厳密に定義されます。
https://nekofes.github.io/index.htmlにアクセスしたと仮定します。
スキーム(プロトコル): https://
ホスト名(ドメイン): nekofes.github.io
ポート番号(省略可): (例: :8080)
パス(/php/ など)やクエリストリング(?id=1 など)はオリジンには含まれません。
オリジンはウェブサイトの「根本的な場所」を示す識別子として機能するため、末尾のスラッシュは不要とされています。
したがって、オリジンの結果は
https://nekofes.github.io
という値が正しい値となります。

[セキュリティ上の注意点]
クライアントがヘッダーを偽装する可能性があります。
主要なブラウザは信頼できるOriginヘッダーを送信しますが、悪意のあるクライアントは偽装できます。
CSRFトークンの導入などの他の対策も併せて行う必要があります。

送信元(自分のサーバー)送信先HTTP_ORIGINの結果備考
https://aaa.com/index.htmlhttps://aaa.com/test.htmlnull または空文字列同じウェブサーバー
https://aaa.com/index.htmlhttps://bbb.com/index.htmlhttps://bbb.com異なるウェブサーバー
https://localhost/index.htmlhttps://localhost/index.htmlnull または空文字列同じサーバー
https://localhost/index.htmlhttps://localhost/test.htmlnull または空文字列同じサーバー
ポート番号やIPアドレスが異なる場合、
ブラウザは異なるオリジンからの通信だと判断し、
自動的に Origin ヘッダーを送信します。


戻る

著作権情報
ホームページおよプリ等に掲載されている情報等については、いかなる保障もいたしません。
ホームページおよびアプリ等を通じて入手したいかなる情報も複製、販売、出版または使用させたり、
または公開したりすることはできません。
当方は、ホームページおよびアプリ等を利用したいかなる理由によっての障害等が発生しても、
その結果ホームページおよびアプリ等を利用された本人または他の第三者が被った損害について
一切の責任を負わないものとします。