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

Function Compute:HTTPハンドラー

最終更新日:Oct 18, 2024

HTTPハンドラーは、CAPortが設定されているカスタムコンテナー関数のみをサポートします。 このトピックでは、カスタムコンテナーのHTTPハンドラーの構造的な特性、呼び出しの説明、および制限について説明します。 このトピックでは、HTTPハンドラーの使用方法の例と、よくある質問に対する回答についても説明します。

背景情報

Function Computeは、メソッド、パス、クエリ、リクエストヘッダー、リクエスト本文、Function Computeによって生成された共通ヘッダーを含むリクエストをHTTPサーバーに転送します。 既存のHTTP webアプリケーションをスムーズに移行できます。 詳細は、「HTTP関数」をご参照ください。

関数の呼び出し

HTTPハンドラーを呼び出すために使用できるメソッドは、web API操作のメソッドと似ています。 cURL、Postman、またはブラウザーを使用して、HTTPハンドラーを呼び出すリクエストを送信できます。 ブラウザを使用してHTTPトリガーにアクセスすると、関数が強制的にダウンロードされる場合があります。 この問題を解決する方法の詳細については、「webブラウザーを使用してHTTPトリガー付きの関数にアクセスする場合、応答をダウンロードする必要があるのはなぜですか? 」をご参照ください。

ヘッダー

説明

(オプション) x-fc-base-path

カスタムドメイン名を指定しない場合、x-fc-base-pathの値として /2016-08-15/proxy/${servicename}/${functionname}/ が使用されます。

(オプション) x-fc-status

このヘッダーは、イベント関数のヘッダーと同様に動作します。 これは、Function Computeに移行されていないが、web API操作を呼び出して作成されたHTTP関数に適用できます。

レスポンスヘッダーにx-fc-statusフィールドを含めて、ローカル関数が正常に呼び出されたかどうかをFunction Computeに報告できます。

  • x-fc-statusフィールドに値を指定しない場合、Function Computeは呼び出しが成功したと見なされます。 関数の実行中にエラーが発生した場合、システムはfunction Computeにエラーを報告しません。 この場合、ビジネスロジックは影響を受けませんが、Function Computeの可観測性は影響を受けます。 次の図に例を示します。image8hanshujisuanruntime

  • x-fc-statusフィールドに値を指定した場合、システムはx-fc-statusフィールドを使用して関数呼び出しの失敗をfunction Computeに報告します。 関数の呼び出し中にエラーが発生した場合、システムはエラースタック情報をログに記録します。 次の図に例を示します。image9runtimefc

説明

HTTPレスポンスでStatusCodeおよびx-fc-statusフィールドを指定することを推奨します。

使用上の注意

  • サービスの各バージョンまたはエイリアスのHTTP関数に対して作成できるHTTPトリガーは1つだけです。 詳細については、「バージョンの管理」および「エイリアスの管理」をご参照ください。

  • HTTPリクエストの制限

    • リクエストヘッダーは、x-fc- で始まるカスタムフィールドまたは次のフィールドをサポートしません。

      • 接続

      • keep-alive

    • リクエストが次のいずれかの制限を超えた場合、システムは400ステータスコードとInvalidArgumentエラーコードを返します。

      • ヘッダーサイズ: ヘッダー内のすべてのキーと値の合計サイズは8 KBを超えることはできません。

      • パスサイズ: すべてのクエリパラメーターを含むパスの合計サイズは、4 KBを超えることはできません。

      • ボディサイズ: 同期呼び出しリクエストのボディの合計サイズは32 MBを超えることはできません。 非同期呼び出し要求の本体の合計サイズは128 KBを超えることはできません。

  • HTTPレスポンスの制限

    • レスポンスヘッダーは、x-fc- で始まるカスタムフィールドまたは次のフィールドをサポートしていません。

      • 接続

      • content-length

      • 日付

      • keep-alive

      • サーバー

      • content-disposition: 添付

        説明

        セキュリティ上の理由から、Function Computeのデフォルトのドメイン名e aliyuncs.comを使用すると、サーバーはcontent-disposition: attachmentフィールドをレスポンスヘッダーに強制的に追加します。 このフィールドにより、返された結果が添付ファイルとしてブラウザにダウンロードされます。 この制限を解除するには、カスタムドメイン名を指定する必要があります。 詳細については、「カスタムドメイン名の設定」をご参照ください。

    • 応答が次のいずれかの制限を超えると、システムはステータスコード502とエラーBadResponseを返します。

      • ヘッダーサイズ: ヘッダー内のすべてのキーと値の合計サイズは8 KBを超えることはできません。

  • その他

    カスタムドメイン名をバインドして、HTTP関数の異なるHTTPパスをマッピングできます。 詳細については、「カスタムドメイン名の設定」をご参照ください。 API Gatewayを使用して、バックエンドサービスタイプをHTTPに設定し、HTTP関数パスをバックエンドサービスアドレスとして指定することで、同様の機能を実装することもできます。 詳細については、次をご参照ください: Function ComputeをAPI操作のバックエンドサービスとして使用します

サンプルコード

次のNode.js Expressの例では、GETメソッドとPOSTメソッドは異なるハンドラーにルーティングされます。 必要なハンドラーにパスをマップできます。

'use strict';

const express = require('express');

// Constants
const PORT = 9000;
const HOST = '0.0.0.0';

// HTTP function get
const app = express();
// Parse request body as JSON
app.use(express.json())

app.get('/*', (req, res) => {
  console.log(req.body)
  res.send('Hello FunctionCompute, http GET');
});

app.post('/*', (req, res) => {
  console.log(req.body)
  res.send('Hello FunctionCompute, http POST');
});

app.listen(PORT, HOST);
console.log(`Running on http://${HOST}:${PORT}`);

よくある質問