リクエスト ヘッダーとレスポンス

サポートされている HTTP ヘッダーの詳細、App Engine でのリクエストとレスポンスに関する制限事項の詳細については、このリファレンス ページをご覧ください。App Engine がリクエストを受信して、レスポンスを送信するしくみの詳細については、リクエストの処理方法をご覧ください。

リクエスト ヘッダー

着信した HTTP リクエストには、クライアントから送信された HTTP ヘッダーが含まれています。セキュリティ上の理由から、一部のヘッダーは、アプリケーションに到達する前に中間プロキシによってサニタイズ(リスクのある部分などを削除)または修正されます。

削除されるヘッダー

以下のヘッダーはリクエストから削除されます。

  • Accept-Encoding
  • Connection
  • Keep-Alive
  • Proxy-Authorization
  • TE
  • Trailer
  • Transfer-Encoding

また、appspot.com または *.appspot.com 以外のドメインに送信されるリクエストからはヘッダー Strict-Transport-Security が削除されます。

これらのヘッダーは、クライアントとサーバーとの間の HTTP データの転送に関連しており、アプリケーションに対して透過的です。たとえば、サーバーは gzip 圧縮されたレスポンスを自動的に送信することがありますが、これは Accept- Encoding リクエスト ヘッダーの値によって決まります。アプリケーション自身は、クライアントがどのコンテンツ エンコードを受け付け可能かを認識している必要はありません。

App Engine 固有のヘッダー

アプリに対するサービスとして、App Engine は、以下のヘッダーをすべてのリクエストに追加します。

X-AppEngine-Country

リクエスト送信元の国を表す ISO 3166-1 alpha-2 国コード。App Engine は、クライアントの IP アドレスからこのコードを特定します。国情報は WHOIS データベースから導出されるものではないことに注意してください。ある IP アドレスの国情報が WHOIS データベース内には存在していても、X-AppEngine-Country ヘッダーには国情報が含まれていないということもあります。アプリケーションは、特別な国コード ZZ(不明な国)を処理できるようにしておく必要があります。

X-AppEngine-Region

リクエスト送信元のリージョンの名前。この値は、X -AppEngine-Country で指定された国の中の地域と解釈されます。たとえば、国が「US」でリージョンが「ca」の場合は、この「ca」はカナダではなく「カリフォルニア州」を意味します。有効なリージョン値の一覧については ISO-3166-2 規格をご覧ください。

X-AppEngine-City

リクエスト送信元の都市の名前。たとえば、リクエストの送信元がマウンテンビューという都市の場合は、ヘッダー値が mountain view となります。このヘッダーに対する有効な値の正式な一覧はありません。

X-AppEngine-CityLatLong

リクエスト送信元の都市の緯度と経度。米国のマウンテンビューからのリクエストの場合は、この文字列が「37.386051,-122.083851」などとなります。
Go では以下のように(これらに限定されません)、上記と同じ一連の受信 HTTP ヘッダーがサポートされます。

  • X-AppEngine-Https、ヘッダー例: 「off」
  • X-AppEngine-User-IP、ヘッダー例: 「2602:306:3429:520:501f:4a71:9d2c:be5f」
  • X-Cloud-Trace-Context、ヘッダー例: 「18ff88cd7f38ff2bf9b79443...」

app.yamllogin:admin ハンドラか login:required ハンドラを指定する場合、App Engine では、以下の一連のヘッダーも使用できます。

  • X-AppEngine-User-Email、ヘッダー例: 「ange@example.com」
  • X-AppEngine-Auth-Domain、ヘッダー例: 「example.com」
  • X-AppEngine-User-ID、ヘッダー例: 「100979712376541954724」
  • X-AppEngine-User-Nickname、ヘッダー例: 「ange」
  • X-AppEngine-User-Organization、ヘッダー例: 「example.com」
  • X-AppEngine-User-Is-Admin、ヘッダー例: 「1」

App Engine のサービスが次のようなリクエスト ヘッダーを追加する場合があります。

  • cron サービスからのリクエストには、次の HTTP ヘッダーも含まれます。

    X-AppEngine-Cron: true

    詳しくは、cron の URL を保護するをご覧ください。

  • 他の App Engine アプリケーションから送信されたリクエストには、リクエスト発行元のアプリを識別するヘッダーが含まれています。

    X-Appengine-Inbound-Appid

    詳しくは、App Identity のドキュメントをご覧ください。

リクエストのレスポンス

この HTTP ヘッダーに関するドキュメントは、受信 HTTP リクエストに対するレスポンスにのみ適用されます。レスポンスは、クライアントに返される前に変更されることがあります。App Engine コードから送信されるリクエストに関連する HTTP ヘッダーについては、URLFetch のヘッダー ドキュメントをご覧ください。

削除されるヘッダー

以下のヘッダーは無視され、レスポンスから削除されます。

  • Connection
  • Content-Encoding*
  • Content-Length
  • Date
  • Keep-Alive
  • Proxy-Authenticate
  • Server
  • Trailer
  • Transfer-Encoding
  • Upgrade

* レスポンスが App Engine によって圧縮された場合に再度追加されることがあります。

さらに、*.appspot.com 以外のドメインから送信されたレスポンスからは、ヘッダー Strict-Transport-Security が削除されます。

名前または値に非 ASCII 文字を含むヘッダーも削除されます。

追加または置換されるヘッダー

レスポンス内で、以下のヘッダーが追加または置換されます。

Cache-ControlExpiresVary

これらのヘッダーでは、中間ウェブプロキシ(インターネット サービス プロバイダなど)やブラウザに対するキャッシング ポリシーを指定します。これらのヘッダーがスクリプトで設定された場合は、通常は変更されませんが、レスポンスに Set-Cookie ヘッダーがある場合や、そのレスポンスの対象のユーザーが管理者アカウントを使用してログインした場合を除きます。静的ハンドラは、これらのヘッダーを構成ファイルで指定されたとおりに設定します。Cache-Control が指定されていない場合は、サーバーがその値を private に設定して Vary: Accept-Encoding ヘッダーを追加することがあります。

Set-Cookie レスポンス ヘッダーがある場合は、Cache-Control ヘッダーが private に設定され(これよりも制限が厳しい値に設定済みの場合を除く)、Expires ヘッダーは現在の日付に設定されます(失効済みの場合を除く)。一般的に、これでブラウザがレスポンスをキャッシュできますが、中間プロキシ サーバーではキャッシュできません。これはセキュリティ上の理由からです。仮にレスポンスがパブリックの状態でキャッシュされたとすると、その後で別のユーザーが同じリソースをリクエストして、最初のユーザーの Cookie を取得できてしまう可能性があります。

Content-Encoding
リクエスト ヘッダーとレスポンスの Content-Type に応じて、サーバーは前述のようにレスポンスの本文を自動的に圧縮する場合があります。この場合は、本文が圧縮されていることを示すために Content-Encoding: gzip ヘッダーが追加されます。詳しくは、レスポンスの圧縮をご覧ください。
Content-Length または Transfer-Encoding
サーバーは、アプリケーションから返される Content-Length ヘッダーを常に無視します。Content-Length を本文の長さに設定するか(圧縮が適用される場合は圧縮後の長さ)、Content-Length を削除し、チャンク転送エンコードを使用します(Transfer-Encoding: chunked ヘッダーを追加します)。
Content-Type

このヘッダーを明示的に設定しない場合は、http.ResponseWriter クラスがレスポンス本文の先頭からコンテンツ タイプを検出し、それに応じて Content-Type ヘッダーが設定されます。

Date
現在の日時に設定します。
Server
Google Frontend に設定します。開発用サーバーは、これを Development/x に設定します。ここで、x はバージョン番号です。

サイトの動的ページにアクセスするユーザーが管理者アカウントを使用してログインしている場合は、App Engine からのレスポンス ヘッダーにリクエストごとの統計情報が含まれます。

X-AppEngine-Estimated-CPM-US-Dollars
このリクエストに似ているリクエスト 1,000 件分のコストの推定値(米ドル単位)。
X-AppEngine-Resource-Usage
リクエストで使用されるリソース(ミリ秒単位)。サーバー側の時間も含まれます。

リソースの使用統計情報を含むレスポンスはキャッシュできなくなります。

X-AppEngine-BlobKey ヘッダーがアプリケーションのレスポンスの中にある場合は、そのヘッダーと省略可能な X-AppEngine-BlobRange ヘッダーを使用して、本文が Blobstore の blob コンテンツ全体または一部で置き換えられます。Content-Type がアプリケーションで指定されていない場合は、blob の MIME タイプに設定されます。範囲がリクエストされている場合は、レスポンス ステータスが 206 Partial Content に変更され、Content-Range ヘッダーが追加されます。ヘッダー X-AppEngine-BlobKeyX -AppEngine-BlobRange は、レスポンスから削除されます。通常は、これらのヘッダーを自分で設定する必要はありません。blobstore_handlers.BlobstoreDownloadHandler クラスで自動的に設定されます。詳しくは、blob を提供するをご覧ください。

アプリケーションの構成に含まれるレスポンス ヘッダー

カスタム HTTP レスポンス ヘッダーを、アプリケーションの構成ファイル内の動的または静的パスの URL ごとに設定できます。詳しくは、構成ドキュメントhttp_headers に関するセクションをご覧ください。

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

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

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