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

ApsaraVideo VOD:リクエスト処理関数

最終更新日:Mar 12, 2025

このトピックでは、リクエスト処理関数の構文、説明、パラメーター、および戻り値について説明します。 このトピックでは、これらの関数の例も示します。

add_req_header

この関数の詳細を次の表に示します。

項目

説明

構文

add_req_header(name, value [, append])

説明

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

パラメーター

  • name: 追加するリクエストヘッダーの名前。 データ型: 文字列。

  • value: 追加するリクエストヘッダーの値。 データ型: 文字列。

  • append: 同じ名前のリクエストヘッダーがすでに存在する場合、指定されたでリクエストヘッダーを追加するかどうかを指定します。 有効な値は、true および false です。 デフォルト値:false データ型:Boolean このパラメーターを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')

Note: The following request headers are added:
USER-DEFINED-REQ-1: 1
USER-DEFINED-REQ-1: x

The USER-DEFINED-REQ-2 header is added and then deleted. Therefore, the USER-DEFINED-REQ-2 request header is not included in requests that are redirected to the origin server.

del_req_header

この関数の詳細を次の表に示します。

項目

説明

構文

del_req_header (名前)

説明

オリジンサーバーにリダイレクトされる前に、リクエストからリクエストヘッダーを削除します。

パラメーター

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')

Note: The following request headers are added:
USER-DEFINED-REQ-1: 1
USER-DEFINED-REQ-1: x

The USER-DEFINED-REQ-2 header is added and then deleted. Therefore, the USER-DEFINED-REQ-2 request header is not included in requests that are redirected to the origin server.

add_rsp_header

この関数の詳細を次の表に示します。

項目

説明

構文

add_rsp_header(name, value [, append])

説明

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

パラメーター

  • name: 追加するレスポンスヘッダーの名前。 データ型: 文字列。

  • value: 追加するレスポンスヘッダーの値。 データ型: 文字列。

    valueパラメーターに次のいずれかの式を指定して、レスポンスフェーズで値を動的に置き換えることができます。

    • ${x}: ngx.var.xの値に置き換えられます。

    • @{y}: レスポンスヘッダーyの値に置き換えられます。

  • append: 同じ名前のレスポンスヘッダーがすでに存在する場合、指定されたでレスポンスヘッダーを追加するかどうかを指定します。 有効な値は、true および false です。 デフォルト値:false データ型:Boolean このパラメーターを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')

Note: The following response headers are added:
USER-DEFINED-RSP-1: 1
USER-DEFINED-RSP-1: x

The USER-DEFINED-RSP-2 header is added and then deleted. Therefore, the USER-DEFINED-RSP-2 header is not included in the responses.

del_rsp_header

この関数の詳細を次の表に示します。

項目

説明

構文

del_rsp_header (名前)

説明

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

パラメーター

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')

The following response headers are added:
USER-DEFINED-RSP-1: 1
USER-DEFINED-RSP-1: x

The USER-DEFINED-RSP-2 header is added and then deleted. Therefore, the USER-DEFINED-RSP-2 header is not included in the responses.

encode_args

この関数の詳細を次の表に示します。

項目

説明

構文

encode_args(d)

説明

dで指定された辞書のk/vペアを、k1=v1&k2=v2の形式のURIエンコードされた文字列に変換します。

パラメーター

d: 変換する辞書。

戻り値

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

例:

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'))
}

Output: The following response headers are added:
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

この関数の詳細を次の表に示します。

項目

説明

構文

decode_args(s)

説明

k1=v1&k2=v2の形式のURIエンコードされた文字列をディクショナリ型の文字列に変換します。

パラメーター

s: 変換する文字列。

戻り値

指定された文字列から変換された辞書オブジェクトを返します。

例:

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'))
}

Output: The following response headers are added:
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

rewrite

この関数の詳細を次の表に示します。

項目

説明

構文

書き換え (url, flag, code)

説明

書き換えまたはリダイレクト操作を実行します。

パラメーター

  • url: 書き換え操作後にソースURIが書き換えられるURL。 データ型: 文字列。

    • flagパラメーターをredirectまたはbreakに設定すると、URIのみが書き換えられます。 このパラメーターは、書き換え操作後のURIを指定します。

    • flagパラメーターをenhance_redirectまたはenhance_breakに設定すると、URIとパラメーターが書き換えられます。 このパラメーターは、書き換え操作後のURIとパラメーターを指定します。

  • flag: 書き換えモード。 データ型: 文字列。

    • redirect: URIのみを書き換えます。 パラメータは書き換えられません。 デフォルトでは、302リダイレクトが実行されます。 このモードを指定した場合、codeパラメーターは設定可能です。 codeパラメーターの有効な値は、301、302 (デフォルト) 、303、307、および308です。

    • break: URIのみをURLに書き換えます。 パラメータは書き換えられません。

    • enhance_redirect: redirectに似ています。 ただし、URIとパラメータの両方が書き換えられます。

    • enhance_break: breakに似ています。 ただし、URIとパラメータの両方が書き換えられます。

  • code: HTTPステータスコード。 データ型: numeric。

    このパラメーターは、flagパラメーターをredirectまたはenhance_redirectに設定した場合にのみ使用できます。

戻り値

  • 書き換え操作のデフォルトでtrueを返します。

  • デフォルトでは、リダイレクト操作の値は返されません。

例:

if and($arg_mode, eq($arg_mode, 'rewrite:enhance_break')) {
  rewrite('/example/examplefile.txt?k=v', 'enhance_break')
}
Note: The URI and parameters of requests redirected to the origin server are rewritten to /example/examplefile.txt?k=v

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)
}
Note: A 302 or 301 redirect to /example/examplefile.txt? is performed.k=v

if and($arg_mode, eq($arg_mode, 'rewrite:break')) {
  rewrite('/example/examplefile.txt', 'break')
}
Note: The URI of requests redirected to the origin server is rewritten to /example/examplefile.txt and the original parameters in the requests remain unchanged.

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)
}
Note: A 302 or 301 redirect to /example/examplefile.txt is performed and the original parameters remain unchanged.

言う

この関数の詳細を次の表に示します。

項目

説明

構文

say(arg)

説明

レスポンス本文を出力し、出力の最後に改行文字を追加します。

パラメーター

arg: レスポンス本文の内容。 データ型: 任意の型。

戻り値

なし。

例:

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

Output:
hello
byebyebyebye

print

この関数の詳細を次の表に示します。

項目

説明

構文

プリント (arg)

説明

レスポンス本文を印刷します。 この関数は、say() 関数とは異なります。 この関数は、出力の最後に改行を追加しません。

パラメーター

arg: レスポンス本文の内容。 データ型: 任意の型。

戻り値

なし。

例:

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

Output:
hello
byebyebyebye

出口

この関数の詳細を次の表に示します。

項目

説明

構文

exit(code [, body])

説明

指定されたコードで現在のリクエストを終了します。 bodyパラメーターも設定すると、指定されたレスポンス本文を含むレスポンスが返されます。

パラメーター

  • code: 返されるHTTPステータスコード。

  • body: レスポンスボディ。

戻り値

なし。

例:

  • ない場合の例1

    if not($arg_key) {
        exit(403)
    }
    Note: If a request does not include the key parameter, the request is denied and the HTTP 403 status code is returned. 
    
    if not($cookie_user) {
        exit(403, 'not cookie user')
    }
    Note: If a request does not include cookie_user, the request is denied and a response that contains the body "not cookie user" is returned with the HTTP 403 status code.
    
    if not(0) {
        exit(403)
    }
    Note: The not(0) function returns a value of false.
    
    if not(false) {
        exit(403)
    }
    Note: The not(false) function returns a value of true.
  • 例2

    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)
    }

get_rsp_header

この関数の詳細を次の表に示します。

項目

説明

構文

get_rsp_header(str)

説明

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

パラメーター

str: 取得するレスポンスヘッダー。 データ型: 文字列。

戻り値

文字列、数値、ディクショナリ、またはBooleanデータ型の指定されたレスポンスヘッダーを返します。

  • 指定されたレスポンスヘッダーが存在する場合、レスポンスヘッダーが返されます。 レスポンスヘッダーのデータ型は、ディクショナリまたは文字列です。

  • 指定されたレスポンスヘッダーが存在しない場合は、falseの値が返されます。

例:

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

add_rsp_cookie

この関数の詳細を次の表に示します。

項目

説明

構文

add_rsp_cookie(k, v [,properties])

説明

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

パラメーター

  • k: クッキーの名前。

  • v: クッキーの値。

  • properties: 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: 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