以前、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」も設定されていることを確認できました。
まとめ
というわけで Apache HTTP Server の設定をいじって、HTTP要求ヘッダ(リクエストヘッダ)にキーバリューのフィールドを一つ追加する方法を紹介しました。
それでは!