kong.service.response
サービスからの応答を操作するためのモジュール。
kong.service.response.get_status()
サービスからのレスポンスの HTTP ステータス コードを Lua の数値として返します。
フェーズ
-
header_filter
,body_filter
,log
戻り値
-
number|nil
:サービスからの応答からのステータスコード、またはnil
リクエストがプロキシされなかった場合(つまり、kong.response.get_source()
が"service"
以外の何かを返した場合)。
使用法
kong.log.inspect(kong.service.response.get_status()) -- 418
kong.service.response.get_headers([max_headers])
サービスレスポンスのヘッダーを保持する Lua テーブルを返します。キーはヘッダー名です。値はヘッダー値を含む文字列か、ヘッダーが複数回送信された場合は文字列の配列になります。この表のヘッダー名は大文字と小文字は区別されず、ダッシュ(-
)はアンダースコア(_
)を使って書くことができます。つまり、ヘッダー X-Custom-Header
は x_custom_header
として取得することもできます。
この関数は、kong.response.get_headers()
とは異なり、サービスからの応答に含まれるヘッダーのみを返します(Kongによって追加されるヘッダーは無視されます)。リクエストがサービスにプロキシされていない場合(認証プラグインでリクエストが拒否され、HTTP401応答が生成される場合など)、サービスから一切応答がないため、nil
がheaders
の値として返される可能性があります。
デフォルトでは、この関数は最大 100 個のヘッダーを返します。オプションで max_headers
引数を指定してこの制限をカスタマイズできますが、 1 より大きく 1000 以下である必要があります。
フェーズ
-
header_filter
,body_filter
,log
パラメータ
-
max_headers (
number
, オプション ): 解析可能なヘッダーの最大数の制限を設定します。
戻り値
-
table
:テーブル形式の応答ヘッダー。 -
string
:max_headers
を超えるヘッダーが存在する場合は、 エラー"truncated"
のある文字列を返します。
使用法
-- Given a response with the following headers:
-- X-Custom-Header: bla
-- X-Another: foo bar
-- X-Another: baz
local headers = kong.service.response.get_headers()
if headers then
kong.log.inspect(headers.x_custom_header) -- "bla"
kong.log.inspect(headers.x_another[1]) -- "foo bar"
kong.log.inspect(headers["X-Another"][2]) -- "baz"
end
Note that this function returns a proxy table
which cannot be iterated with `pairs` or used as operand of `#`.
kong.service.response.get_header(name)
指定したレスポンスヘッダーの値を返します。
kong.response.get_header()
とは異なり、サービスからのレスポンスにヘッダーが含まれる場合(Kong
によって追加されたヘッダーは無視されます)、この関数はヘッダー
のみを返します。
フェーズ
-
header_filter
,body_filter
,log
パラメータ
-
name (
string
): ヘッダーの名前。ヘッダー名は大文字と小文字を区別せず、小文字に正規化されています。また、ダッシュ(
-
)はアンダースコア(_
)を使って書くことができます。つまり、ヘッダーX-Custom-Header
はx_custom_header
として取得することもできます。
戻り値
-
string|nil
:ヘッダーの値、または応答内にname
を含むヘッダーが見つからない場合はnil
。同じ名前のヘッダーが応答内に複数回存在する場合、この関数はこのヘッダーの最初に出現した値を返します。
使用法
-- Given a response with the following headers:
-- X-Custom-Header: bla
-- X-Another: foo bar
-- X-Another: baz
kong.log.inspect(kong.service.response.get_header("x-custom-header")) -- "bla"
kong.log.inspect(kong.service.response.get_header("X-Another")) -- "foo bar"
kong.service.response.get_raw_body()
バッファリングされた未加工の本体を返します。
フェーズ
-
header_filter
,body_filter
,log
戻り値
-
string
: バッファリングされた未加工のボディ。
使用法
-- Plugin needs to call kong.service.request.enable_buffering() on `rewrite`
-- or `access` phase prior calling this function.
local body = kong.service.response.get_raw_body()
kong.service.response.get_body([mimetype[,max_args]])
デコードされバッファリングされた本体を返します。
フェーズ
-
header_filter
,body_filter
,log
パラメータ
-
mimetype (
string
、 オプション ): レスポンスの MIME タイプ(既知の場合)。 -
max_args (
number
、 オプション ): 解析可能な(what?)の上限数を設定します。
戻り値
-
string
: デコードおよびバッファリングされたボディ
使用法
-- Plugin needs to call kong.service.request.enable_buffering() on `rewrite`
-- or `access` phase prior calling this function.
local body = kong.service.response.get_body()