すべてのプロダクト
Search
ドキュメントセンター

CDN:リクエスト処理関数

最終更新日:Aug 28, 2026

EdgeScript は、HTTP リクエストヘッダーとレスポンスヘッダーの操作、URI の書き換えまたはリダイレクト、レスポンス本文の出力、Cookie の設定を行うための組み込み関数を提供します。このリファレンスでは、各関数の構文、パラメーター、戻り値、および使用例について説明します。

ジャンプ先:

リクエストヘッダー

add_req_header

リクエストがオリジンサーバーに転送される前に、リクエストヘッダーを追加します。

構文

add_req_header(name, value [, append])

パラメーター

パラメーター

タイプ

必須

説明

name

string

はい

追加するリクエストヘッダーの名前。

value

string

はい

追加するリクエストヘッダーの値。

append

Boolean

いいえ

同じ名前のヘッダーが既に存在する場合にヘッダーを追加するかどうかを指定します。デフォルト: falsefalse の場合、新しい値が既存の値を上書きします。

戻り値

デフォルトでは true を返します。ヘッダー名が無効な場合は false を返します。

add_req_header('USER-DEFINED-REQ-1', '1')
add_req_header('USER-DEFINED-REQ-1', 'x', true)
add_req_header('USER-DEFINED-REQ-2', '2')
del_req_header('USER-DEFINED-REQ-2')

結果: オリジンサーバーは次のヘッダーを受信します。

USER-DEFINED-REQ-1: 1
USER-DEFINED-REQ-1: x

USER-DEFINED-REQ-2 は追加された後に削除されるため、オリジンサーバーには転送されません。

del_req_header

リクエストがオリジンサーバーに転送される前に、リクエストヘッダーを削除します。

構文

del_req_header(name)

パラメーター

パラメーター

タイプ

必須

説明

name

string

はい

削除するリクエストヘッダーの名前。

戻り値

デフォルトでは true を返します。ヘッダー名が無効な場合は false を返します。

add_req_header('USER-DEFINED-REQ-1', '1')
add_req_header('USER-DEFINED-REQ-1', 'x', true)
add_req_header('USER-DEFINED-REQ-2', '2')
del_req_header('USER-DEFINED-REQ-2')

結果: オリジンサーバーは次のヘッダーを受信します。

USER-DEFINED-REQ-1: 1
USER-DEFINED-REQ-1: x

USER-DEFINED-REQ-2 は追加された後に削除されるため、オリジンサーバーには転送されません。

レスポンスヘッダー

add_rsp_header

レスポンスヘッダーを追加します。

構文

add_rsp_header(name, value [, append])

パラメーター

パラメーター

タイプ

必須

説明

name

string

はい

追加するレスポンスヘッダーの名前。

value

string

はい

追加するレスポンスヘッダーの値。動的式をサポートしています。 ${x}ngx.var.x の値に置き換えられ、@{y} はレスポンスヘッダー y の値に置き換えられます。

append

Boolean

いいえ

同じ名前のヘッダーが既に存在する場合にヘッダーを追加するかどうかを指定します。デフォルト: falsefalse の場合、新しい値が既存の値を上書きします。

戻り値

デフォルトでは true を返します。ヘッダー名が無効な場合は false を返します。

add_rsp_header('USER-DEFINED-RSP-1', '1')
add_rsp_header('USER-DEFINED-RSP-1', 'x', true)
add_rsp_header('USER-DEFINED-RSP-2', '2')
del_rsp_header('USER-DEFINED-RSP-2')

結果: レスポンスには次のヘッダーが含まれます。

USER-DEFINED-RSP-1: 1
USER-DEFINED-RSP-1: x

USER-DEFINED-RSP-2 は追加された後に削除されるため、レスポンスには含まれません。

del_rsp_header

レスポンスヘッダーを削除します。

構文

del_rsp_header(name)

パラメーター

パラメーター

タイプ

必須

説明

name

string

はい

削除するレスポンスヘッダーの名前。

戻り値

デフォルトでは true を返します。ヘッダー名が無効な場合は false を返します。

add_rsp_header('USER-DEFINED-RSP-1', '1')
add_rsp_header('USER-DEFINED-RSP-1', 'x', true)
add_rsp_header('USER-DEFINED-RSP-2', '2')
del_rsp_header('USER-DEFINED-RSP-2')

結果: レスポンスには次のヘッダーが含まれます。

USER-DEFINED-RSP-1: 1
USER-DEFINED-RSP-1: x

USER-DEFINED-RSP-2 は追加された後に削除されるため、レスポンスには含まれません。

get_rsp_header

レスポンスヘッダーの値を取得します。

構文

get_rsp_header(str)

パラメーター

パラメーター

タイプ

必須

説明

str

string

はい

取得するレスポンスヘッダーの名前。

戻り値

  • ヘッダーが存在する場合: ヘッダーの値を文字列、数値、辞書、またはブール値として返します。

  • ヘッダーが存在しない場合: false を返します。

ct = get_rsp_header('content-type')
if ct {
    add_rsp_header('origin-content-type', 'is')
} else {
    add_rsp_header('origin-content-type', 'no')
}

URL リライトとリダイレクト

rewrite

URI を書き換えるか、リクエストをリダイレクトします。

構文

rewrite(url, flag, code)

パラメーター

パラメーター

タイプ

必須

説明

url

string

はい

書き換えまたはリダイレクト後のターゲット URI または URL。

flag

string

はい

書き換えモード。以下のフラグのリファレンス表をご参照ください。

code

numeric

いいえ

リダイレクトの HTTP ステータスコード。 flagredirect または enhance_redirect の場合にのみ適用されます。有効な値: 301、302、303、307、308。デフォルト: 302。

フラグのリファレンス

ユースケースに適したフラグを選択するには、この表を参考にしてください。

URI のみ

URI + クエリパラメーター

サーバーサイドの書き換え (リダイレクトなし、ブラウザーの URL は変更されません)

break

enhance_break

クライアントサイドリダイレクト (ブラウザーは新しいリクエストを作成し、URL が変更されます)

redirect

enhance_redirect

戻り値

  • 書き換え操作 (breakenhance_break): true を返します。

  • リダイレクト操作 (redirectenhance_redirect): 戻り値はありません。

サーバーサイドの書き換え (URI + パラメーター)

if and($arg_mode, eq($arg_mode, 'rewrite:enhance_break')) {
  rewrite('/example/examplefile.txt?k=v', 'enhance_break')
}

オリジンサーバーは、URI とクエリパラメーターが /example/examplefile.txt?k=v に書き換えられたリクエストを受信します。

クライアントサイドリダイレクト (URI + パラメーター)

if and($arg_mode, eq($arg_mode, 'rewrite:enhance_redirect')) {
  rewrite('/example/examplefile.txt?k=v', 'enhance_redirect')
}
if and($arg_mode, eq($arg_mode, 'rewrite:enhance_redirect_301')) {
  rewrite('/example/examplefile.txt?k=v', 'enhance_redirect', 301)
}

クライアントは、/example/examplefile.txt?k=v への 302 または 301 リダイレクトを受信します。

サーバーサイドの書き換え (URI のみ)

if and($arg_mode, eq($arg_mode, 'rewrite:break')) {
  rewrite('/example/examplefile.txt', 'break')
}

オリジンサーバーは、URI が /example/examplefile.txt に書き換えられたリクエストを受信します。元のクエリパラメーターは保持されます。

クライアントサイドリダイレクト (URI のみ)

if and($arg_mode, eq($arg_mode, 'rewrite:redirect')) {
  rewrite('/example/examplefile.txt', 'redirect')
}
if and($arg_mode, eq($arg_mode, 'rewrite:redirect_301')) {
  rewrite('/example/examplefile.txt', 'redirect', 301)
}

クライアントは、/example/examplefile.txt への 302 または 301 リダイレクトを受信します。元のクエリパラメーターは保持されます。

レスポンス本文

say

レスポンス本文にコンテンツを出力し、改行文字を追加します。

構文

say(arg)

パラメーター

パラメーター

タイプ

必須

説明

arg

any

はい

レスポンス本文に書き込むコンテンツ。

戻り値

なし。

say('hello')
print('byebye')
print('byebye')

出力:

hello
byebyebyebye

print

改行文字を追加せずに、レスポンス本文にコンテンツを出力します。

構文

print(arg)

パラメーター

パラメーター

タイプ

必須

説明

arg

any

はい

レスポンス本文に書き込むコンテンツ。

戻り値

なし。

say('hello')
print('byebye')
print('byebye')

出力:

hello
byebyebyebye

exit

指定された HTTP ステータスコードとオプションのレスポンス本文を返し、現在のリクエストを終了します。

構文

exit(code [, body])

パラメーター

パラメーター

タイプ

必須

説明

code

numeric

はい

返す HTTP ステータスコード。

body

any

いいえ

レスポンスに含めるレスポンス本文。

戻り値

なし。

例 1: クエリパラメーターと Cookie に基づくリクエストのブロック

if not($arg_key) {
    exit(403)
}

リクエストに key クエリパラメーターが含まれていない場合、CDN ノードは HTTP 403 を返します。

if not($cookie_user) {
    exit(403, 'not cookie user')
}

リクエストに user Cookie が含まれていない場合、CDN ノードは、レスポンス本文に not cookie user を含めて HTTP 403 を返します。

if not(0) {
    exit(403)
}

not(0)false と評価されるため、このブロックは実行されません。

if not(false) {
    exit(403)
}

not(false)true と評価されるため、CDN ノードは HTTP 403 を返します。

例 2: URI ベースの認証

pcs = capture_re($request_uri,'^/([^/]+)/([^/]+)([^?]+)\?(.*)')
sec1 = get(pcs, 1)
sec2 = get(pcs, 2)
sec3 = get(pcs, 3)
if or(not(sec1), not(sec2), not(sec3)) {
   add_rsp_header('X-TENGINE-ERROR', 'auth failed - missing necessary uri set')
   exit(403)
}
digest = md5(concat(sec1, sec3))
if ne(digest, sec2) {
    add_rsp_header('X-TENGINE-ERROR', 'auth failed - invalid digest')
    exit(403)
}

この例では、リクエスト URI からセグメントを抽出し、MD5 ダイジェストを計算し、埋め込まれた署名と照合します。URI の形式が正しくないか、ダイジェストが一致しない場合、CDN ノードはエラーヘッダーとともに HTTP 403 を返します。

Cookie

add_rsp_cookie

レスポンスに Cookie を設定します。呼び出すたびに、新しい Set-Cookie レスポンスヘッダーが生成されます。

構文

add_rsp_cookie(k, v [, properties])

パラメーター

パラメーター

タイプ

必須

説明

k

string

はい

Cookie の名前。

v

string

はい

Cookie の値。

properties

dictionary

いいえ

pathdomainsecurehttponlyexpiresmax_agesamesiteextension などの Cookie 属性。属性の詳細については、「Set-Cookie」をご参照ください。

戻り値

Cookie が設定された場合は true を返します。Cookie が設定できなかった場合は false を返します。

add_rsp_cookie('user', 'edgescript')

add_rsp_cookie('login_time', tostring(now()), [
    'path' = '/'
])

expires = cookie_time(time())
add_rsp_cookie('psid', 'SDF93745HFSDF2934JKHG', [
    'path' = '/play',
    'domain' = 'foo.com',
    'secure' = true,
    'httponly' = true,
    'expires' = expires,
    'max_age' = 100,
    'samesite' = 'Strict',
    'extension' = 'xxt3s'
])

レスポンスには次の Set-Cookie ヘッダーが含まれます。

Set-Cookie: user=edgescript
Set-Cookie: login_time=1582538968.912; Path=/
Set-Cookie: psid=SDF93745HFSDF2934JKHG; Expires=Mon, 24-Feb-20 10:09:28 GMT; Max-Age=100; Domain=foo.com; Path=/play; Secure; HttpOnly; SameSite=Strict; xxt3s

エンコーディング

encode_args

辞書のキーと値のペアを、k1=v1&k2=v2 形式の URI エンコードされた文字列に変換します。

構文

encode_args(d)

パラメーター

パラメーター

タイプ

必須

説明

d

dictionary

はい

エンコードする辞書。

戻り値

URI エンコードされた文字列を返します。

encode_argsdecode_args は通常、一緒に使用されます。次の例では、辞書をエンコードしてレスポンスヘッダーとして設定し、それをデコードして個々の値を読み取ります。

my_args = []
set(my_args, 'signature', 'da9dc4b7-87ae-4330-aaaf-e5454e2c2af1')
set(my_args, 'algo', 'private sign1')
my_args_str = encode_args(my_args)
add_rsp_header('X-DSL-ENCODE-ARGS', my_args_str)

to_args = decode_args(my_args_str)
if get(to_args, 'algo') {
    add_rsp_header('X-DSL-DECODE-ARGS-ALGO', get(to_args, 'algo'))
}
if get(to_args, 'signature') {
    add_rsp_header('X-DSL-DECODE-ARGS-SIGN', get(to_args, 'signature'))
}

レスポンスには次のヘッダーが含まれます。

X-DSL-ENCODE-ARGS: signature=da9dc4b7-87ae-4330-aaaf-e5454e2c2af1&algo=private%20sign1
X-DSL-DECODE-ARGS-ALGO: private sign1
X-DSL-DECODE-ARGS-SIGN: da9dc4b7-87ae-4330-aaaf-e5454e2c2af1

decode_args

k1=v1&k2=v2 形式の URI エンコードされた文字列を辞書に変換します。

構文

decode_args(s)

パラメーター

パラメーター

タイプ

必須

説明

s

string

はい

デコードする URI エンコードされた文字列。

戻り値

文字列から変換された辞書を返します。

上記の encode_args の例をご参照ください。 decode_args は逆の操作であり、 encode_args と一緒に使用されます。