ラック
Home > CMS > 記事 > 2015年8月 > HTTPレスポンスヘッダの操作

HTTPレスポンスヘッダの操作

カテゴリ: MODx

先日こんなニュースが話題になりましたね。

402ですか…。402って予約されているだけで実装されていないんですよねー(それは違う402なのでは

ということで、できるかどうか分かりませんが、402をちょこっと弄ってみますか。

 

スニペット:payreq_test

//402のhttpレスポンスヘッダをセット
header('HTTP/1.1 402 Payment Required', true, 402);
echo "It's the number of a certain submarine...";

phpでヘッダを作るので、こんなスニペットを作ってー。

テンプレート

[!payreq_test!]
<!DOCTYPE html>
<html lang="ja">
<head>
...(以下略)

こんなテンプレートを作り、レスポンスボディより前、一番最初でスニペット発動。

> telnet www.example.com 80

GET /test_list/402.html HTTP/1.1
User-Agent: Windows telnet
Host: www.example.com

コマンドプロンプトなり何かのツールなりでtelnetで接続し、httpリクエストを送信してみましょう。


きちんと402 Payment Requiredが返ってきましたね。

なるほど、こうすればHTTPレスポンスヘッダも操作できるのですね…。

なお、実際のページはこちら。ブラウザでアクセスすると何の変哲もない普通のページですが。

 

ついでに

ということで、今度は401もやってみましょう。サクッとBasic認証で。

スニペット:basic_test

//401のhttpレスポンスヘッダをセット
function basic_auth($auth_list,$realm="i-401",$failed_text="あーっ!やだやだ!") {
	if (isset($_SERVER['PHP_AUTH_USER']) && isset($auth_list[$_SERVER['PHP_AUTH_USER']])) {
		if ($auth_list[$_SERVER['PHP_AUTH_USER']] == $_SERVER['PHP_AUTH_PW']){
			return $_SERVER['PHP_AUTH_USER'];
		}
	}

	header('WWW-Authenticate: Basic realm="'.$realm.'"', true, 401);
	header('HTTP/1.0 401 Authorization Required');
	header('Content-type: text/html; charset=UTF-8');

	die($failed_text); /* エラーコンテンツ */
}

basic_auth(array("user" => "pass"));

コードは

この辺りを参考というかそのままで使えますね。これをスニペットにします。

なお、上記のユーザ・パスはちゃんと設定しましょう。

テンプレート

[!basic_test!]
<!DOCTYPE html>
<html lang="ja">
<head>
...(以下略)

こちらは先ほどと同様。コールするスニペットを変えただけです。

こちらはbasic認証がかかっているので、アクセスするときちんと認証が発動します。

ということでこちらにアクセスしてみて頂ければ、と思います。

なお、ユーザ・パスは"i401"/"shioi"です。

間違ったりキャンセルしたりするとやだやだ言います。

 

ちなみに

後半のスニペットを使えば、特定のリソースのみにbasic認証をかける、ということができることがお分かり頂けるかと思います。

上記のようにWPで特定のページ(ログインページ以外)にbasic認証をかける、というページは見付かるのですが、MODxでは見付からないので技術的なメモとしても使えるかも?(今回はネタのためだけに使いましたが

タグ: スニペット, 認証

 



関連する記事一覧