送信リクエスト

このページでは、App Engine アプリケーションが URL 取得サービスを使用して HTTP / HTTPS リクエストを送信し、レスポンスを受信する方法を説明します。App Engine アプリケーションから HTTP / HTTPS リクエストを送信するコードのサンプルについては、HTTP(S) リクエストの送信をご覧ください。urlfetch パッケージの内容については、urlfetch パッケージ リファレンスをご覧ください。

リクエスト

App Engine は、URL フェッチ サービスを使用して、送信リクエストを発行します。Go では、「urlfetch」パッケージに urlfetch.Transport が含まれます。これは http.RoundTripper インターフェースの実装です。このインターフェースは、App Engine のインフラストラクチャを使用してリクエストを実行します。

リクエストのプロトコル

アプリケーションは、HTTP または HTTPS のいずれかで URL をフェッチできます。必要なプロトコルは、ターゲット URL のプロトコルから判断されます。

フェッチされた URL は、以下の範囲内にある任意のポートを使用します。

  • 80-90
  • 440-450
  • 1024-65535

URL にポート番号が含まれていない場合、使用するポートはプロトコルで判断します。HTTP リクエストはポート 80 を使用し、HTTPS リクエストはポート 443 を使用します。

リクエストのメソッド

URL 取得サービスを使用してリクエストを発行する場合、次のいずれかの HTTP メソッドを使用できます。

  • GET
  • POST
  • PUT
  • HEAD
  • DELETE
  • PATCH

リクエストには、HTTP ヘッダーを追加できます。POSTPUTPATCH リクエストにはペイロードを追加できます。

リクエストのプロキシ

URL 取得サービスは、HTTP/1.1 互換のプロキシを使用して結果をフェッチすることに注意してください。

アプリケーションがリクエストを無限に繰り返さないようにするため、リクエスト ヘッダーを独自の URL のフェッチに使用することはできません。他の方法でも無限に再帰する可能性はあります。ユーザーが指定した URL に対するリクエストをアプリケーションでフェッチする場合には注意してください。

リクエスト ヘッダー

アプリケーションで送信リクエストに HTTP ヘッダーを設定できます。

HTTP POST リクエストを送信するときに、Content-Type ヘッダーを明示的に設定しないと、ヘッダーは x-www-form-urlencoded に設定されます。これは、ウェブフォームで使用されるコンテンツタイプです。

セキュリティ上の理由から、アプリケーションで次のヘッダーを変更することはできません。

  • Content-Length
  • Host
  • Vary
  • Via
  • X-Appengine-Inbound-Appid
  • X-Forwarded-For
  • X-ProxyUser-IP

これらのヘッダーには、必要に応じて App Engine が適切な値を設定します。たとえば、App Engine はリクエスト データから Content-Length ヘッダーを計算し、その結果をリクエストに追加してから送信します。

次のヘッダーは、リクエスト側のアプリのアプリケーション ID を表します。

  • User-Agent。このヘッダーは変更可能ですが、サーバーが App Engine のリクエストを識別できるように App Engine が ID 文字列を追加します。追加される文字列の形式は "AppEngine-Google; (+http://code.google.com/appengine; appid: APPID)" で、APPID はアプリの識別子です。
  • X-Appengine-Inbound-Appid。このヘッダーは変更できません。リクエストが URL フェッチ サービス経由で送信された場合に、自動的に追加されます。

リクエストのタイムアウト

リクエストの期限(タイムアウト)を設定できます。デフォルトのタイムアウトは 5 秒に設定されています。期限の最大値は、HTTP(S) リクエストの場合は 60 秒であり、Task Queue および cron ジョブ リクエストの場合も 60 秒です。

安全な接続と HTTPS

アプリケーションで、HTTPS を使用して安全なサーバーに接続し、URL をフェッチすることもできます。リクエストとレスポンスのデータは暗号化され、ネットワーク上で送受信されます。

Go API ではデフォルトで、URL フェッチ プロキシがホストとの接続を検証します。この動作により、HTTPS を使用する場合は API によって App Engine とリモートホストの間の中間者攻撃が検出されます。

レスポンス

URL Fetch API を使用する場合、URL 取得サービスは、レスポンス コード、ヘッダー、本文を含むすべてのレスポンス データを返すことに注意します。

デフォルトでは、URL 取得サービスがリダイレクト コードを含むレスポンスを受信すると、サービスがリダイレクトします。サービスは、最大 5 つまでのリダイレクト レスポンスに対応し、最後のリソースを返します。

開発用サーバーでの URL のフェッチの使用

パソコン上の App Engine 開発用サーバーでアプリケーションを実行している場合、URL 取得サービスに対する呼び出しはローカルで処理されます。開発用サーバーは、パソコンからリモートホストに直接接続して URL をフェッチします。この場合、パソコンのネットワーク接続を使用してインターネットにアクセスします。

URL をフェッチするアプリケーションの機能をテストする場合、パソコンからリモートホストにアクセスします。

URL 取得の割り当てと制限

URL 取得サービスの割り当てについては、割り当てをご覧ください。アプリケーションの現在の割り当て使用量は、Google Cloud Platform Console の [割り当ての詳細] タブで確認できます。

また、URL 取得サービスの使用には、以下の制限も適用されます。

制限
リクエスト サイズ 10 MB
リクエスト ヘッダーのサイズ 16 KB(ヘッダーで指定可能な URL の最大長)
レスポンス サイズ 32 MB
期限の最大値(リクエスト ハンドラ) 60 秒
期限の最大値(Task Queue および cron ジョブハンドラ) 60 秒

次のステップ

HTTP(S) リクエストの発行の説明に沿ってコードサンプルを実行し、アプリケーションからリクエストを発行します。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Go の App Engine スタンダード環境