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

CDN:リクエスト処理関数

最終更新日:Apr 01, 2026

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

目次:

リクエストヘッダー

add_req_header

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

構文

add_req_header(name, value [, append])

パラメーター

パラメーター必須説明
name文字列はい追加するリクエストヘッダーの名前です。
value文字列はい追加するリクエストヘッダーの値です。
appendブール値いいえ同じ名前のヘッダーがすでに存在する場合に、新しいヘッダーを追加するかどうかを指定します。デフォルトは false です。false の場合、新しい値で既存の値を上書きします。

戻り値

デフォルトで 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文字列はい削除するリクエストヘッダーの名前です。

戻り値

デフォルトで 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文字列はい追加するレスポンスヘッダーの名前です。
value文字列はい追加するレスポンスヘッダーの値です。動的式をサポートしています:${x}ngx.var.x の値に置き換えられ、@{y} はレスポンスヘッダー y の値に置き換えられます。
appendブール値いいえ同じ名前のヘッダーがすでに存在する場合に、新しいヘッダーを追加するかどうかを指定します。デフォルトは false です。false の場合、新しい値で既存の値を上書きします。

戻り値

デフォルトで 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文字列はい削除するレスポンスヘッダーの名前です。

戻り値

デフォルトで 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文字列はい取得するレスポンスヘッダーの名前です。

戻り値

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

  • ヘッダーが存在しない場合: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文字列はい書き換えまたはリダイレクト後のターゲット URI または URL です。
flag文字列はいリライトモードです。以下のフラグリファレンステーブルをご参照ください。
code数値いいえリダイレクト時の HTTP ステータスコードです。flagredirect または enhance_redirect の場合にのみ適用されます。有効な値:301、302、303、307、308。デフォルト:302。

フラグリファレンス

ユースケースに応じて適切なフラグを選択してください。

URI のみURI + クエリパラメーター
サーバーサイドでのリライト(リダイレクトなし、ブラウザの URL は変更されない)breakenhance_break
クライアントサイドでのリダイレクト(ブラウザが新しいリクエストを送信し、URL が変更される)redirectenhance_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任意はいレスポンスボディに書き込むコンテンツです。

戻り値

なし。

使用例

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

出力:

hello
byebyebyebye

print

レスポンスボディにコンテンツを出力しますが、改行文字は追加しません。

構文

print(arg)

パラメーター

パラメーター必須説明
arg任意はいレスポンスボディに書き込むコンテンツです。

戻り値

なし。

使用例

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

出力:

hello
byebyebyebye

exit

指定された HTTP ステータスコードとオプションのレスポンスボディを使用して、現在のリクエストを終了します。

構文

exit(code [, body])

パラメーター

パラメーター必須説明
code数値はい返す HTTP ステータスコードです。
body任意いいえレスポンスに含めるボディです。

戻り値

なし。

使用例

例 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文字列はいCookie の名前です。
v文字列はいCookie の値です。
properties辞書いいえCookie 属性(例: pathdomainsecurehttponlyexpiresmax_agesamesite、および extension)。属性の完全なリファレンスについては、「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辞書はいエンコードする辞書です。

戻り値

URI エンコード済み文字列を返します。

使用例

encode_args および decode_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文字列はいデコードする URI エンコード済み文字列です。

戻り値

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

使用例

上記の encode_args の使用例をご参照ください。decode_args は逆の操作であり、encode_args と組み合わせて使用されます。