基本仕様

エッジキャッシュCDNは、オリジンサーバーからコンテンツを取得し一定期間エッジサーバーでキャッシュ後、 コンテンツを返却します。

プロトコル

HTTPおよびHTTPSプロトコル配信に対応しています。

バージョン

HTTP1.0 HTTP1.1 HTTP2 に対応しています。

注釈

HTTP2 についてはHTTPS(SSL)通信が必須となります。

HTTPメソッド

エッジキャッシュは、以下のリクエストを受け入れてオリジンサーバーに転送します。 これら以外のメソッドは、なにも加工することなくオリジンサーバーに転送します。

  • GET
  • HEAD
  • PUT
  • POST
  • TRACE
  • OPTIONS
  • PATCH
  • DELETE

リクエストの最大長と URL の最大長

パス、クエリーストリング、ヘッダーを含め、リクエストの最大長は 20480 バイトです。

リクエストまたは URL がこの制限を超えるとリクエストヘッダーフィールドが長すぎることを示す HTTP ステータスコード 413 (Request Header Fields Too Large) を 返却し、TCP 接続を終了します。

リクエストヘッダー

リクエストヘッダーについては、エッジキャッシュ仕様書に定めがない限り オリジンサーバーにそのまま転送します。

オリジンサーバーの指定方法

コンテンツ取得先であるオリジンサーバーの指定は、IPアドレスまたはドメイン名を利用可能です。

エッジキャッシュは、内部的にオリジンサーバーのIPアドレスを最大5分キャッシュします。 そのため、オリジンサーバーのドメイン名に紐づくIPアドレスを変更した場合は、反映までにドメインに指定された TTL+5Min かかります。

警告

IPアドレスで直接指定することは推奨していません。そのため、オリジンサーバー専用のAレコードを準備いただき 割り当てることをお勧めしております。

カスタムオリジンへのリクエスト

HTTP/1.1 を使用してカスタムオリジンにリクエストを転送します。

対応プロトコル

HTTP または HTTPS

追加するヘッダー

エッジキャッシュはリクエストが発生した際、以下のヘッダを付与しオリジンサーバーにリクエストします。

X-Forwarded-For

クライアントIPを X-Forwarded-For に格納後、オリジンサーバーにリクエストします。 CDN経由のアクセスの場合、オリジンサーバーからみるとエッジキャッシュCDNのIPアドレスが クライアントIPとして認識されます。そのため、オリジンサーバー側でクライアントIPアドレスに基づいて アクセス制限やリダイレクトを制御している場合は、 X-Forwarded-For 内の実IPアドレスをご利用下さい。

X-Forwarded-Proto/X-Forwarded-Redbox-Proto

リクエストプロトコル(HTTPまたはHTTPS)を X-Forwarded-Proto 及び X-Forwarded-Redbox-Proto 内に格納後、オリジンサーバーにリクエストします。 HTTPSリクエストの場合でも、CDNからオリジンサーバーまでの通信はHTTPで通信されます。 そのため、リクエストプロトコルをオリジンサーバーで判別し動作を制御している場合は、 X-Forwarded-Proto または X-Forwarded-Redbox-Proto 内のプロトコル名をご利用下さい。

注釈

オリジンサーバーの上位にProxyサーバーやロードバランサーが入っている場合やホスティング事業者側の都合でX-Forwarded-Protoヘッダを削除してしまう場合があります。 その際は、X-Forwarded-Protoの代わりにX-Forwarded-Redbox-Protoをご利用下さい。

削除するヘッダー

リクエストヘッダーにProxyが含まれてる場合は、これらを削除しオリジンサーバーにリクエストします。

カスタムオリジンからのレスポンス

オリジンサーバーからのレスポンス時に、エッジキャッシュCDNがどのような振る舞いをするかを掲載しています。

削除するヘッダー

レスポンスヘッダに以下の値が付与されている場合、ヘッダを削除後クライアントに返却します。

  • Vary(User-Agent)
  • Trailer
  • Warning
  • Server

Varyヘッダについて

エッジキャッシュCDNではオリジンからのレスポンスヘッダに Vary:User-Agent が付与されている場合は、これらの値を削除しキャッシュ効率を高めています。

注釈

Varyヘッダは 「同じURLであってもVaryヘッダに指定されている内容が異なれば別のコンテンツとして取り扱いう」 というオリジンサーバーからの命令です。 たとえば、Vary: User-Agentというヘッダーをレスポンスヘッダに付与しておくとCDNはUser-Agentヘッダの内容に応じたキャッシュを保持します。 しかし、User-Agentはブラウザーのバージョンなどによって多数存在するためキャッシュ効率が非常に悪くなり、キャッシュヒット率の低下、オリジンサーバーの負荷が高まる恐れがあります。 ※Accept-Languageを指定いただいた場合は、クライアントのAccept-Language毎にキャッシュを生成します。

圧縮コンテンツ

コンテンツ圧縮対応プランにて、リクエストヘッダーに Accept-Encoding: deflate, gzip いずれかが付与されており、 圧縮対象コンテンツだった場合に限り、CDN側でコンテンツを圧縮・キャッシュし、クライアントにレスポンスします。

警告

リクエストヘッダーに Accept-Encoding: deflate, gzip が含まれていない場合は、リクエストされたファイルを圧縮しません。 また、コンテンツ圧縮非対応プランの場合は圧縮配信されません。

圧縮対象コンテンツ

以下のMimeTypesのコンテンツが圧縮対象となります。

  • 「/xml」
  • 「/json」
  • 「text/*
  • 「/html」
  • 「application/eot」
  • 「application/x-otf」
  • 「application/font」
  • 「application/x-perl」
  • 「application/font-sfnt」
  • 「application/x-ttf」
  • 「application/javascript」
  • 「font/eot」
  • 「font/ttf」
  • 「application/opentype」
  • 「font/otf」
  • 「application/otf」
  • 「font/opentype」
  • 「application/pkcs7-mime」
  • 「image/svg+xml」
  • 「application/truetype」
  • 「application/ttf」
  • 「application/vnd.ms-fontobject」
  • 「application/x-font-opentype」
  • 「application/x-font-truetype」
  • 「application/x-font-ttf」
  • 「application/x-httpd-cgi」
  • 「application/x-javascript」
  • 「application/x-mpegurl」
  • 「application/x-opentype」

brotli 圧縮のサポート

リクエストヘッダーに Accept-Encoding: br が含まれている場合、エッジキャッシュCDNは以下の順番でヘッダーを正規化後、 オリジンサーバーに Content-Encoding ヘッダーを渡します。

br > gzip > deflate

brotli対応オリジンサーバーからのレスポンス時

エッジキャッシュCDNが、オリジンサーバーから Content-Encoding:br ヘッダーを受け取った場合、 既にキャッシュ済のコンテンツが存在していたとしても、別コンテンツとしてキャッシュに格納します。

条件付きリクエスト

エッジキャッシュCDNは有効期限切れになっているコンテンツに対するリクエストを受け取ると、 リクエストをオリジンサーバーに転送し最新のコンテンツ取得するか、 最新のコンテンツがすでに存在することをオリジンサーバーに確認します。

オリジンサーバーがETag または LastModified もしくはその両方の値をレスポンスしている場合、 エッジキャッシュCDNは次のどちらかまたは両方を追加しオリジンサーバーに転送します。

  • 有効期限切れコンテンツの ETag 値が含まれる If-Match または If-None-Match ヘッダー。
  • 有効期限切れコンテンツの LastModified 値が含まれる If-Modified-Since ヘッダー。

オリジンサーバーは、これらの情報を用いてコンテンツが更新されているかどうかを判別し、 最新コンテンツを返却するか、または HTTP 304 ステータスコード (変更なし) のみをレスポンスします。

CORS(Cross-Origin Resource Sharing)対応

エッジキャッシュCDNではオリジンサーバーのレスポンスヘッダ(Access-Control-Allow-Origin)を尊重してコンテンツと共にキャッシュし 呼び出し元に返却します。 そのため、CORSに対応させる場合はオリジンサーバーのレスポンスにAccess-Control-Allow-Originを含めて頂く必要が御座います。

CORSとは

注釈

あるドメインで実行されているWebアプリケーションが別のドメイン内にあるリソースにアクセスできるようにするHTTPの機能です。 クロスサイトスクリプティング攻撃の可能性を低減させるために、すべての最新の Web ブラウザーには * Same-Originポリシー と呼ばれるセキュリティ制限が実装されています。これにより、Web ページは他のドメイン内のリソースを呼び出すことができません。 CORSを使用すれば、外部ドメインのリソースを参照する事ができます。

Access-Control-Allow-Originヘッダ設定例

.htaccess:

<IfModule mod_headers.c>
<FilesMatch "\.(ttf|ttc|otf|eot|woff|font.css|css)$">
Header set Access-Control-Allow-Origin "*"
</FilesMatch>
</IfModule>

Nginx:

location ~ \.(ttf|ttc|otf|eot|woff|font.css|css)$ {
         add_header Access-Control-Allow-Origin "*";
}

トラフィックスパイクの同時リクエスト

コンテンツを完全にキャッシュする間に、複数ユーザーから同時アクセスがあった場合、キャッシュ取得中のセッションを同時アクセスした全ユーザーに即時ストリーム配信し、 あらゆる状況下で配信待ちをゼロにする独自機能「インスタントストリーム」に対応しています。 インスタントストリームはオリジンサーバーへのアクセスは従来通り一度だけにとどめ、負荷を最小限にすると同時にCDN本来のメリットである高速配信を両立させます。

通常CDNは、オリジンサーバー負荷を軽減するため、コンテンツが完全にキャッシュされるまでの間に着信したリクエストを待ち状態にし、完全にキャッシュが完了してから一斉配信します。 そのため、完全にキャッシュするために時間を要するような数ギガバイトクラスの大容量ファイルの場合、キャッシュ期限切れが発生した際ダウンロード待ちが発生することを意味します。

インスタントストリーム制限事項

インスタントストリームにはいくつかの制限があります。

HTTP / 1.0クライアント

HTTP / 1.0のリクエストで、レスポンスヘッダーにContent-Lengthフィールドが含まれていない場合、インスタントストリームは無効となります。 コンテンツのキャッシュ取得中にHTTP / 1.0リクエストを着信すると、HTTP / 1.0リクエストはレスポンスヘッダーとレスポンスBodyを受信する前に、 コンテンツがダウンロードされるのを待機します。

Gzipとの互換性

CDNサービス側で自動的にGzip圧縮がおこなわれるコンテンツタイプについては、インスタントストリームは無効となります。

ESIとの互換性

ESIを介して処理されるレスポンスはインスタントストリームが無効となります。

オリジンクラスター

エッジキャッシュCDNは任意のオリジンサーバーを最大2つまで登録でき、以下のような制御を行うことができます。

注釈

オリジンクラスターを利用する場合は、いかなるケースでもオリジンサーバーの正常性を確認するための ヘルスチェック用URLをご用意いただく必要が御座います。

均等ロードバランシング

2台の登録されたオリジンサーバーに均等にHTTPリクエストを分散します。

プライマリー・セカンダリーオリジン

通常時はプライマリーオリジンを利用し、プライマリーオリジンのヘルスチェックに問題が発生した際は、 セカンダリーオリジンを利用します。プライマリーオリジンのヘルスチェックが正常に戻った場合は、 自動的にプライマリーオリジンからコンテンツを取得します。

取り消されたリクエスト

コンテンツがキャッシュになく、エッジキャッシュCDNがコンテンツをオリジンから取得中にクライアントがブラウザーを閉じる等をしてセッションを終了すると、 そのコンテンツをキャッシュせず破棄します。

オリジンサーバー応答タイムアウト

オリジンサーバーのタイムアウトは、以下の種類があります。

  • 最初のバイトを受信するまでの待機時間(5s)
  • オリジンサーバーへのコネクションタイムアウト (デフォルト10s)
  • それぞれの byte を取得するまでのタイムアウト(デフォルト150s)

注釈

タイムアウト時間をデフォルト値から変更することが可能です。

カスタムエラーページ

エッジキャッシュCDNがコンテンツを取得出来なかった場合や、CDN側のシステムエラーが発生した際、 通常はエッジキャッシュCDNで定められたエラーページがレスポンスされます。これらのエラーページに任意のHTML BODYを返却するようカスタマイズすることが出来ます。

オリジンサーバーとTCP接続中断時の動作

オリジンサーバーがコンテンツをレスポンスしている最中に、エッジキャッシュCDNとTCP接続が中断した場合、 オリジンサーバーが Content-Length ヘッダーをレスポンスに含めたかどうかによって以下の通り動作が異なります。

  • Content-Length ヘッダーあり – コンテンツをオリジンサーバーから取得した後、コンテンツをクライアントに返します。ただし、Content-Length ヘッダーの値がコンテンツのサイズに一致しない場合はコンテンツをキャッシュしません。
  • Transfer-Encoding: Chunked – コンテンツをオリジンサーバーから取得した後、コンテンツをクライアントに返します。ただし、チャンクレスポンスが完了していない場合はコンテンツをキャッシュしません。
  • Content-Length ヘッダーなし – コンテンツをキャッシュしますが、コンテンツが完全でない場合があります。Content-Length ヘッダーがない場合は、TCP 接続が誤って中断されたか、または故意に中断されたかを判断できません。

警告

Content-Length ヘッダーを追加して、エッジキャッシュCDNが不完全なコンテンツをキャッシュしないように HTTP サーバーを設定することをお勧めします。

転送エンコード

オリジンサーバーが Transfer-Encoding: chunked を返した場合、受け取ったコンテンツをクライアントに返し、そのオブジェクトをチャンク形式でキャッシュします。 クライアントがRange GETに必要なバイトを選択しリクエストすると、HTTPレスポンスコードが200から206に変更されます。 クライアントからキャッシュ済コンテンツの最大サイズを超える範囲のRangeヘッダーを受け取った場合、416 "Request Range Not を返却します。

オリジンサーバーへのリトライリクエスト

オリジンサーバーから500系エラーが返却された場合に限り、エッジキャッシュCDNは 最大3回 オリジンサーバーへのリクエストをリトライします。

注釈

ネガティブレスポンスキャッシュが有効の場合は、3回リスタート後ネガティブレスポンスをキャッシュします。

GEO IPブロック

エッジキャッシュCDNはクライアントIPアドレスの国に基づいてアクセスをブロックすることができます。(デフォルト:無効)

指定可能リージョン

  • africa
  • south-america
  • north-america
  • asia(日本以外)
  • europe
  • australia

注釈

GEOIPデータベースの更新頻度はDailyとなります。ご希望のブロック対象国コードをサポートまでご連絡いただければ、国別に任意のカスタマイズをおこなうことも可能です。