big-ip
iRule

iRuleでHTTPリクエストに含まれる値を取得する

More than 1 year has passed since last update.

このページの目的

BIG-IPのiRuleを使うと、HTTPリクエストの内容に基づいた様々な処理を書くことができますが、iRuleを書く度にDevCentralを開いて「えーと、HTTPリクエスト内のあの値をとるには・・・」と調べるのが面倒なので、まとめてみました。

簡易情報

例えば、以下のようなURLのリクエストをBIG-IPが受け取ったとします。

サンプルURL
iRule_HTTP変数.png

コマンド 説明 サンプルURLを対象にした場合の値
HTTP::host ホストヘッダの値を返します。 www.example.com
HTTP::path ファイルパスを返します。注意点として、「?」(はてな)文字がセパレータになっているので、これがない場合は、末尾まで全てをファイルパスと認識します。 /directory/file
HTTP::query URLのうち、引数部分を返します。ファイルパスとのセパレータとなっている「?」(はてな)は含みません。 var1=val1&var2=val2
HTTTP::uri HTTPリクエスト内のURI部分全体を返します /directory/file?var1=val1&var2=val2

(もう少し)詳細な情報

DevCentralのHTTPの項から、HTTPリクエストを対象に情報を取得できる変数をまとめてみました。上で記載したものは除外してます。あと、あまり利用頻度が高くなさそうなものも省きました。

コマンド 説明
HTTP::cookie "HTTP::cookie <name>"で、任意の名前のHTTP Cookieの値を応答します。 "HTTP cookie count"で、HTTPリクエストに含まれるcookieの数を応答します。
HTTP::header "HTTP::header <name>"で、任意のHTTPヘッダーの値を応答します。対象のHTTPヘッダがHTTPリクエスト中に存在しない場合は、nullが返ります。 "HTTP::header names"で、すべてのHTTPヘッダ名をList型で返します。 "HTTP::header count <name>"で、任意のHTTPヘッダーがHTTPリクエストに含まれている数を応答します。 "HTTP::header exists <name>"で、任意のHTTPヘッダーがHTTPリクエストに含まれている場合Trueを応答します。
HTTP::is_keepalive HTTP Keep-Aliveが有効なHTTPリクエストの場合は、Trueを返します。
HTTP::method HTTPリクエストのメソッドを応答します。
HTTP::password Basic認証のリクエストに含まれる、パスワードの値を応答します。
HTTP::request HTTPリクエストのヘッダー部を文字列として応答します。
HTTP::request_num 同一TCPコネクション内のHTTPトランザクション数を応答します。
HTTP::username Basic認証のリクエストに含まれる、ユーザ名を応答します。
HTTP::version HTTPリクストのHTTPバージョンを応答します。

補足:HTTPリクエストのBody部を取得したい場合

HTTP::collectを使用してBody部を取得し、 HTTP_REQUEST_DATAイベントを使う必要があります。

参考URL(DevCentral)

免責事項

本ページの内容に誤り等があり、参考にされた方がなんらかの損害を被った場合、一切の責任は負いません。