* この投稿は、米国時間 9 月 7 日、Technical Account Manager である Alex Amies と Technical Solutions Engineer である Alex Martelli によって投稿されたものの抄訳です。

HTTPS プロトコルはウェブ インタラクションのプライバシーと整合性の保護に役立つため、多くのGoogle Cloud Platform のユーザーが、 Google と同じように広範囲にわたって、このプロトコルを使用したいと考えるのは当然のことです。

とはいえ、HTTPS 接続の確立には不便が伴います。基礎となる TLS(トランスポート レイヤー セキュリティ)セッションの設定には X.509 証明書の交換と暗号化処理が必要であり、時間を要することがしばしばです。

クライアントのアプリケーションと、 Google App Engine のアプリケーション間での通信の処理には通常 REST が使用されます。当然、複数の REST リクエストを単一の HTTPS 接続に一括し、全体的なパフォーマンスを改善したいと思われることでしょう。多くのリクエストに対して一度だけ接続を確立すれば、接続を繰り返し設定する場合のオーバーヘッドを節約できます。

しかしながら、App Engineは入ってくるリクエストの複数の HTTP ヘッダを制御し、Keep-Alive ヘッダを除外するため、残念ながら リクエストの一括処理に HTTP の Keep-Alive ヘッダを使用することは不可能です。つまり、パーシステント コネクションがされないため、複数のリクエストを一括で処理することができないのです。

ここでもっとよい解決策があります。もはや選択肢は HTTP だけではありません。最適化やサーバー プッシュ機能のほか、実験段階でありながらも広く実装されている SPDY プロトコルが、 TLS とパーシステント コネクションに自動で対応します。実際、 SPDY では全ての接続がパーシステント コネクションです。

さらに、一括処理の安全なリクエストをスムーズにする機能など、SPDYから得られたすべての情報に新たな HTTP/2 プロトコルが適用され、こうした情報がさらに改善されます。

クライアントがいずれかのプロトコルに対応している限り、App Engine ではすべての HTTPS トラフィックに対し、自動的にHTTP/2、 または SPDY が使用されます。また幸いなことに大半のブラウザの最新版が、いずれかのプロトコルに対応しています。

モバイル アプリの開発者の方々が HTTP/2、 または SPDY を活用し、HTTPS/REST リクエストを App Engine のアプリケーションに一括するためには、これらのプロトコルのいずれか、または両方に対応するライブラリを使用して、アプリケーションをプログラミングする必要があるかもしれません。Android については、Square/OkHttp のライブラリをお試しいただけます。

iOS では SPDY がデフォルトで有効になっているため、アプリケーションでの変更は一切必要ありません。問題が発生した場合は、広く使用されている Twitter/CocoaSPDY のライブラリを活用してください。

SPDY と HTTP/2 は HTTP(S)と互換性があるため、容易に使用できます。実際、App Engine で実行しているウェブ アプリケーションがある場合は、すでにこれらのプロトコルが使用されているかもしれません。これについては、Chrome の URL「about:net-internals/#events」などの SPDY ツール を使用して特定できます。


- Posted by Alex Amies, Technical Account Manager and Alex Martelli, Technical Solutions Engineer