山崎屋の技術メモ

IT業界で働く中でテクノロジーを愛するSIerのシステムエンジニア👨‍💻 | AndroidとWebアプリの二刀流🧙‍♂️ | コードの裏にあるストーリーを綴るブログ執筆者✍️ | 日々進化するデジタル世界で学び続ける探究者🚀 | #TechLover #CodeArtisan、気になること、メモしておきたいことを書いていきます。

Apache HTTP サーバで要求ヘッダ(リクエストヘッダ)を追加する

以前、HTTPの応答ヘッダに任意のフィールドを追加する記事を書きました。
Apache HTTP サーバで応答ヘッダ(レスポンスヘッダ)を追加する - 山崎屋の技術メモ

そこでも少し触れたけど、応答ヘッダではなく、要求ヘッダの方に任意のフィールド(キーとバリューの組み合わせ)を追加してみます。

mod_headers を有効にする方法は上記のページを見てください。

HTTPの応答ヘッダにhogeフィールドを追加する

mod_headers を有効にしたら、httpd.conf の一番下に「RequestHeader hoge "fuga"」を追加しました。

確認してみる

Apacheのアクセスログに出せないかいろいろ試しましたが、どうやら難しそうでした。

Apacheの向こうにいるアプリケーションサーバ(Tomcat)でHTTP要求ヘッダの内容を出力したいと思います。

SpringBootのプロジェクトを作成し、コントローラを作って次のようにHTTPヘッダ情報をすべて文字列として集めて返すRestControllerを作りました。

package com.example.demo;

import java.util.Enumeration;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import jakarta.servlet.http.HttpServletRequest;

@RestController
public class SampleController {
	@GetMapping("/")
	public String index(HttpServletRequest request) {
		Enumeration<String> headerNames = request.getHeaderNames();
		String result = "";
		while (headerNames.hasMoreElements()) {
			String headerName = headerNames.nextElement();
			result += headerName + ": " + request.getHeader(headerName) + "<br>";
		}
		return result;
	}
}

そしてApacheHTTPサーバをリバースプロキシとしてTomcatにつないでください。
詳しくはググってください。
キーワードは「proxy_module」・「proxy_http_module」・「ProxyPass」・「ProxyPassReverse」などです。

ブラウザを立ち上げアドレスバーに「http://localhost/」と打ち込むと要求ヘッダがすべて表示され「hoge: fuga」も設定されていることを確認できました。

ブラウザの結果