環境変数のリスト
HTTPサーバの環境変数は、サーバの設定や使用しているソフトウェア(Apache, Nginx, IIS など)、サーバサイドのスクリプト言語(PHP, Perl, Python など)によって多少異なる場合がありますが、以下に一般的な環境変数をリストします。1. サーバ関連の環境変数
| SERVER_SOFTWARE | サーバのソフトウェア名とバージョン (例: Apache/2.4.41) |
| SERVER_NAME | サーバのホスト名 (例: www.example.com) |
| SERVER_PROTOCOL | サーバが使用しているプロトコルとバージョン (例: HTTP/1.1) |
| SERVER_PORT | サーバがリクエストを受信したポート番号 (例: 80) |
| DOCUMENT_ROOT | サーバのドキュメントルートディレクトリ (例: /var/www/html) |
| GATEWAY_INTERFACE | サーバのCGIインターフェースのバージョン (例: CGI/1.1) |
| SERVER_ADDR | サーバのIPアドレス (例: 192.168.1.1) |
| SERVER_SIGNATURE | サーバの署名 (例: Apache/2.4.41 (Unix) Server at www.example.com Port 80) |
| SCRIPT_FILENAME | 実行されているスクリプトのファイル名 (例: /var/www/html/index.php) |
| SERVER_ADMIN | サーバ管理者のメールアドレス (例: webmaster@example.com) |
2. クライアント関連の環境変数
| REMOTE_ADDR | クライアントのIPアドレス (例: 203.0.113.1) |
| REMOTE_PORT | クライアントが使用しているポート番号 (例: 53820) |
| REMOTE_HOST | クライアントのホスト名 (逆引きDNSを使用して判別される場合) |
| REMOTE_USER | HTTP認証で認証されたユーザー名 (例: admin) |
| REMOTE_IDENT | RFC 931で定義されたユーザー識別システムにより、クライアントを識別するユーザー名 |
3. リクエスト関連の環境変数
| REQUEST_METHOD | HTTPメソッド (例: GET, POST, PUT, DELETE) |
| REQUEST_URI | リクエストされたリソースのURI (例: /index.php?name=value) |
| REQUEST_TIME | リクエストが行われたUnixタイムスタンプ (例: 1625487623) |
| QUERY_STRING | GETリクエストのクエリ文字列 (例: name=value&age=30) |
| CONTENT_TYPE | POSTリクエストのデータ形式 (例: application/x-www-form-urlencoded) |
| CONTENT_LENGTH | POSTリクエストの際に送信されたデータの長さ (バイト数)(例: 348) |
4. HTTPヘッダ関連の環境変数
| HTTP_USER_AGENT | クライアントのブラウザやデバイスの情報 (例: Mozilla/5.0 (Windows NT 10.0; Win64; x64)) |
| HTTP_REFERER | リクエストの参照元ページ (例: http://example.com/previous-page.html) |
| HTTP_ACCEPT | クライアントが受け入れるMIMEタイプ (例: text/html,application/xhtml+xml) |
| HTTP_ACCEPT_LANGUAGE | クライアントが受け入れる言語 (例: en-US,en;q=0.9) |
| HTTP_ACCEPT_ENCODING | クライアントがサポートするエンコード方式 (例: gzip, deflate, br) |
| HTTP_COOKIE | クライアントから送信されたCookieの情報 (例: PHPSESSID=1234567890abcdef) |
| HTTP_CONNECTION | 接続方式 (例: keep-alive) |
| HTTP_HOST | クライアントがリクエストしたホスト名 (例: www.example.com) |
| HTTP_IF_MODIFIED_SINCE | リソースが最後に修正された日時 (例: Wed, 21 Oct 2015 07:28:00 GMT) |
| HTTP_IF_NONE_MATCH | リソースのETag(エンティティタグ) (例: 5d8c72a2) |
| HTTP_UPGRADE_INSECURE_REQUESTS | クライアントがHTTPSにアップグレードを要求しているかどうか (例: 1) |
5. PATH関連の環境変数
| PATH_INFO | リクエストURIのスクリプト名以降のパス (例: /extra/path/info) |
| PATH_TRANSLATED | PATH_INFOをサーバのファイルシステム上のパスに変換したもの (例: /var/www/html/extra/path/info) |
6. 認証関連の環境変数
| AUTH_TYPE | 認証方式 (例: Basic) |
| REMOTE_USER | 認証されたユーザー名 (例: user123) |
| REMOTE_IDENT | RFC931に基づく認証ユーザーのID |
7. SSL関連の環境変数(HTTPSの場合)
| HTTPS | HTTPSが有効かどうか (例: on または off) |
| SSL_PROTOCOL | 使用中のSSL/TLSプロトコル (例: TLSv1.2) |
| SSL_CIPHER | 使用されている暗号スイート (例: ECDHE-RSA-AES256-GCM-SHA384) |
| SSL_SESSION_ID | SSLセッションID |
| SSL_CLIENT_CERT | クライアント証明書 |
8. その他の環境変数
| SCRIPT_NAME | 実行中のスクリプトの名前 (例: /index.php) |
| SCRIPT_URI | 完全なリクエストURI (例: http://www.example.com/index.php) |
| SCRIPT_URL | スクリプトにアクセスするためのURL (例: /index.php) |
| UNIQUE_ID | Apacheがリクエストごとに生成する一意のID |
| REQUEST_SCHEME | 使用しているプロトコル (例: http または https) |
| REDIRECT_STATUS | リダイレクトされた際のステータスコード |
9. FastCGI/CGI関連の環境変数
| FCGI_ROLE | FastCGIプロセスの役割 (例: RESPONDER) |
| REDIRECT_URL | リダイレクトが発生した場合のリダイレクト先のURL |
| REDIRECT_QUERY_STRING | リダイレクトされた際のクエリ文字列 |
| REDIRECT_SCRIPT_URI | リダイレクト先のスクリプトURI |
| REDIRECT_STATUS | リダイレクトが発生したときのステータスコード (例: 200) |
10. 言語設定関連の環境変数
| LANG | サーバのデフォルト言語 (例: en_US.UTF-8) |
| LC_ALL | 全てのロケールカテゴリに適用されるロケール (例: C) |
環境変数の使い方
CGIスクリプト などではこれらの環境変数を参照して、リクエストに応じた動的なレスポンスを生成できます。PHP などのサーバサイドスクリプトでは、$_SERVER スーパーグローバル変数を使ってアクセスします。
環境変数はリクエストやサーバの状態に関する重要な情報を含んでおり、効率的に使うことで柔軟な処理が可能になります。
これらの環境変数は何に使われるか?
セキュリティ管理: クライアントのIPアドレス(REMOTE_ADDR)やブラウザの種類(HTTP_USER_AGENT)を確認して、不正なアクセスをフィルタリングする。ログ分析: HTTP_REFERER を使って、どのページから訪問者が来たのかを分析する。
動的コンテンツ生成: クライアントから送信された情報(QUERY_STRING や POST データ)を使って、動的なウェブページを生成する。
これらの環境変数を活用して、サーバサイドスクリプトがさまざまなクライアント情報に基づいて処理を行うことができます。
以下に、PHP、Perl、Python、Java、JavaScript でHTTPサーバの環境変数を使用する簡単な例をそれぞれ挙げます。
1. PHPでの環境変数の使用例
PHPでは、環境変数は $_SERVER スーパーグローバル変数でアクセスします。// クライアントのIPアドレスを取得 $client_ip = $_SERVER['REMOTE_ADDR']; echo "クライアントのIPアドレス: " . $client_ip ; // リクエストされたURIを取得 $request_uri = $_SERVER['REQUEST_URI']; echo "リクエストされたURI: " . $request_uri ; // サーバソフトウェアのバージョンを取得 $server_software = $_SERVER['SERVER_SOFTWARE']; echo "サーバのソフトウェア: " . $server_software ;
2. Perlでの環境変数の使用例
Perlでは、CGIモジュールを使って環境変数を取得します。%ENV ハッシュを使って環境変数にアクセスします。
#!/usr/bin/perl
use strict;
use warnings;
use CGI qw(:standard);
print header, start_html('環境変数例');
# クライアントのIPアドレスを取得
my $client_ip = $ENV{'REMOTE_ADDR'};
print "クライアントのIPアドレス: $client_ip";
# リクエストされたURIを取得
my $request_uri = $ENV{'REQUEST_URI'};
print "リクエストされたURI: $request_uri";
# サーバソフトウェアのバージョンを取得
my $server_software = $ENV{'SERVER_SOFTWARE'};
print "サーバのソフトウェア: $server_software";
print end_html;
3. Pythonでの環境変数の使用例
Pythonでは、os モジュールを使って環境変数にアクセスします。
#!/usr/bin/env python3
import os
from http.server import BaseHTTPRequestHandler, HTTPServer
class MyHandler(BaseHTTPRequestHandler):
def do_GET(self):
# クライアントのIPアドレスを取得
client_ip = self.client_address[0]
# 環境変数を取得
request_uri = os.environ.get('REQUEST_URI', 'N/A')
server_software = os.environ.get('SERVER_SOFTWARE', 'N/A')
# レスポンスを作成
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write(f"クライアントのIPアドレス: {client_ip}".encode())
self.wfile.write(f"リクエストされたURI: {request_uri}".encode())
self.wfile.write(f"サーバのソフトウェア: {server_software}".encode())
# サーバを起動
httpd = HTTPServer(('localhost', 8080), MyHandler)
httpd.serve_forever()
4. Javaでの環境変数の使用例
Javaのサーブレットを使って環境変数にアクセスする場合は、HttpServletRequest クラスを使います。
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class EnvironmentServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// クライアントのIPアドレスを取得
String clientIp = request.getRemoteAddr();
// リクエストされたURIを取得
String requestUri = request.getRequestURI();
// サーバソフトウェアのバージョンを取得
String serverSoftware = getServletContext().getServerInfo();
response.setContentType("text/html");
response.getWriter().println("クライアントのIPアドレス: " + clientIp);
response.getWriter().println("リクエストされたURI: " + requestUri);
response.getWriter().println("サーバのソフトウェア: " + serverSoftware);
}
}
5. JavaScriptでの環境変数の使用例(Node.js)
Node.jsでは、process.env を使って環境変数にアクセスします。
const http = require('http');
// HTTPサーバの作成
http.createServer((req, res) => {
// クライアントのIPアドレスを取得
const clientIp = req.socket.remoteAddress;
// 環境変数を取得
const requestUri = req.url;
const serverSoftware = process.env.SERVER_SOFTWARE || 'N/A';
// レスポンス
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(`クライアントのIPアドレス: ${clientIp}`);
res.write(`リクエストされたURI: ${requestUri}`);
res.write(`サーバのソフトウェア: ${serverSoftware}`);
res.end();
}).listen(8080);
console.log('Server running at http://localhost:8080/');
各言語の要点
- PHP: $_SERVER スーパーグローバル変数を使用。
- Perl: %ENV ハッシュを使用して環境変数を取得。
- Python: os.environ を使用して環境変数にアクセス。
- Java: サーブレットで HttpServletRequest クラスや ServletContext で環境変数やリクエスト情報を取得。
- JavaScript (Node.js): process.env とリクエストオブジェクトを使って環境変数とリクエスト情報を取得。
※このサイトで得た情報により発生したいかなるの問題の責任はおいかねます。自己判断でご利用ください。