More Related Content
Similar to CDNの仕組み(JANOG36) (20)
More from J-Stream Inc. (10)
CDNの仕組み(JANOG36)
- 4. CDN:Content Delivery Network
▶Content (デジタルデータ/不可算名詞)
▶Not Contents(入れ物/可算名詞)
▶Delivery (配達):コンテンツをクライアントに届けること
▶Not Distribution(流通):コンテンツを配信網内に分散させること
▶Network (実際には仮想ネットワーク)
▶Not 配信専用の物理Tire1ネットワーク(昔はあった)
4
© 2015 J-Stream Inc. All Rights Reserved.
- 17. キャッシュ:HTTPヘッダ
▶HTTPの基本
© 2015 J-Stream Inc. All Rights Reserved.
HTTPリクエスト
HTTPレスポンス
GET /index.html HTTP/1.1
Accept: image/gif, image/jpeg, */*
…
HTTP/1.1 200 OK
Date: Thu, 26 Oct 2012 16:51:49 GMT
Server: Apache/1.3.14 (Unix)
….
HTML本体
HTTPヘッダ
- 18. キャッシュ:HTTPヘッダ
リクエスト レスポンス
© 2015 J-Stream Inc. All Rights Reserved. 18
GET /index.html HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg,…
Accept-Language: ja
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (compatible; MSIE 5.5;…
Host: example.jp
Connection: Keep-Alive
HTTP/1.1 200 OK
Date: Thu, 26 Oct 2000 16:51:49 GMT
Server: Apache/1.3.14 (Unix)
Last-Modified: Thu, 18 Mar 1999 05:31:05 GMT
ETag: "f012-491-36f08f99"
Accept-Ranges: bytes
Content-Length: 1169
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html> <head>
<title>サンプルサーバ</title>
…
HTTPヘッダ
- 19. キャッシュ:HTTPヘッダ
▶CDNにおける分類
© 2015 J-Stream Inc. All Rights Reserved. 19
③レスポンス
HTTPヘッダ
②リクエスト
HTTPヘッダ
④レスポンス
HTTPヘッダ
①リクエスト
HTTPヘッダ
ブラウザ CDNサーバ オリジンサーバ
リクエスト
①CDNサーバ、オリジンサー
バに対するキャッシュ指示
②オリジンサーバに対する
キャッシュ指示
ー
レスポンス ー
④ブラウザに対するキャッ
シュ指示
③CDNサーバ、ブラウザに
対するキャッシュ指示
オリジンサーバCDNサーバ
- 20. HTTPヘッダ:③オリジン生成(レスポンス)
▶オリジンサーバが生成するCDN関連ヘッダ
© 2015 J-Stream Inc. All Rights Reserved. 20
HTTPヘッダ 概要 サンプル
キャッシュ
コントロール
Cache-Control キャッシュ設定一般 各種パラメータ指定
Expires 有効期限 Thu, 01 Dec 2015 16:00:00 JST
Vary URLに対し複数のオブジェクト User-Agent
設定が必須(無いと
キャッシュされない)
Content-Length オブジェクト長 4427
Last-Modified 最終更新時間 Thu, 01 Dec 2014 16:00:00 JST
設定しない方が良い(あ
るとキャッシュされない
場合がある)
ETag オブジェクトのユニークiD 686897696a7c876b7e
httpのサーバ圧縮 Content-Encoding エンコーディング gzip, deflate, sdch※
※sdch: Shared Dictionary Compression over HTTP (Chrome)
- 21. HTTPヘッダ:③オリジン生成(レスポンス)
▶Cache-Controlパラメータ
© 2015 J-Stream Inc. All Rights Reserved. 21
用途 パラメータ 概要
キャッシュ許可
public キャッシュ許可
private ブラウザ等に対し許可(キャッシュサーバでは禁止)
no-cache キャッシュ不許可
no-store 一時的な(内部処理としての)コピーも禁止
改変許可 no-transform 改変不可
最新性のチェック
max-age 無チェック時間の最大値
s-maxage 無チェック時間の最大値(キャッシュサーバ上)
must-revalidate 毎回、チェック
proxy-revalidate プロキシー、CDNサーバでは毎回チェック
- 22. HTTPヘッダ:③オリジン生成(レスポンス)
▶サンプル
© 2015 J-Stream Inc. All Rights Reserved. 22
Cache-Control 用途
no-cache, no-transform
・キャッシュ不可
・改変不可
private
・ブラウザではキャッシュ可
・CDNではキャッシュ不可
public, max-age=3600
・キャッシュ可
・ブラウザおよびキャッシュサーバは1時間以上保持したオブジェクトの最新性を
チェック
public, s-maxage=3600
・キャッシュ可
・キャッシュサーバは1時間以上保持したオブジェクトの最新性をチェック
・ブラウザは、最新性チェック設定(毎回、起動時等)に従う
- 26. HTTPヘッダ:②④CDNサーバ生成
▶CDNサーバが生成
© 2015 J-Stream Inc. All Rights Reserved. 26
HTTPヘッダ 概要 サンプル
②リクエスト
(対オリジン)
X-Forwarded-for ブラウザIPアドレス 192.168.0.100
Forwarded 同上 192.168.0.100
④レスポンス
(対ブラウザ)
AGE オブジェクトの無チェック時間 3623
Via 中継サーバの名前※ our-proxy
※中継サーバ名前:中継サーバで設定された名前(偽造容易)
③レスポンス
HTTPヘッダ
②リクエスト
HTTPヘッダ
④レスポンス
HTTPヘッダ
①リクエスト
HTTPヘッダ
オリジンサーバCDNサーバ
- 27. HTTPヘッダ:①ブラウザ生成
▶ブラウザが生成(キャッシュサーバへの指示関連)
© 2015 J-Stream Inc. All Rights Reserved. 27
HTTPヘッダ 概要
キャッシュ関連 Cache-Control 各種設定
最新性チェック
If-Modified-Since 指定時間から変更があった場合
If-Unmodified-Since 指定時間から変更が無かった場合
Etag関連
If-Match Etagがマッチした場合
If-None-Match Etagがマッチしない場合
If-Range Etagがマッチした場合Rangeを実行
Vary関連
User-Agent ブラウザ名
Accept-Charset 受け付けるCharset
Accept-Encoding 受け付けるEncoding(HTTP圧縮:gzip、deflate、sdch)
Accept-Language 受け付けるLanguage
Pragma (HTTP/1.0) Pragma:no-cache キャッシュ不可
- 28. HTTPヘッダ:①ブラウザ生成
▶Cache-Control
© 2015 J-Stream Inc. All Rights Reserved. 28
用途 パラメータ 概要
キャッシュされたコンテンツの
送信許可(対キャッシュサーバ)
no-cache
キャッシュされたコンテンツの配信を不許可
得られたコンテンツをキャッシュ不可
no-store 同上(一時的なストアも不許可)
改変不可(対キャッシュサーバ) no-transform 改変不可、改変されたコンテンツの配信を不許可
キャッシュ存否 only-if-cached キャッシュされていた場合のみ
最新性のチェック
(条件を満たさない場合、受け
取りを拒否)
max-age 無チェック時間の最大値
max-stale 無効となってからの最大時間
min-fresh 有効である時間の最小時間※
※例 min-fresh=3600:1時間以内に無効となるコンテンツを受け付けない
- 29. キャッシュ:応答コード抜粋
系列 Code 概要
100系 100 通知
200系 200 処理成功
206
Range成功
部分コンテンツ配信
300系
301
リダイレクト(恒久)
サイト移設、常時SSL
302
リダイレクト(臨時)
Apacheデフォルト
304 オブジェクト無変更
307
リダイレクト(臨時)
メソッド変更禁止※
© 2015 J-Stream Inc. All Rights Reserved. 29
系列 Code 概要
400系 400 リクエスト不正
401 パスワードエラー
403 権限エラー
404 オブジェクトNot Found
407 プロキシ認証必要
412 マッチング条件失敗※※
500系 500 サーバ内エラー
502 CDN:オリジンエラー
503 サービスダウン(高負荷)
504 CDN:オリジンタイムアウト
※PostなのにGetで処理するブラウザ対策 ※※If-Unmodified-Since
- 33. キャッシュ:部分ファイル対応
▶HTTP Rangeヘッダ方式
▶Range例
▶応答コード
© 2015 J-Stream Inc. All Rights Reserved. 33
GET /test.mp4
Host: example.jp
Range:bytes=1025-2048
HTTP/1.1 206 Partial Content
…
Accept-Ranges:Bytes
Content-Length: 1024
Content-Range:bytes 1025-2048/40960
Code 概要 コンテンツの扱い
200 Range失敗 全体が返される
206 Range成功 指定部分が返される
リクエスト レスポンス
- 35. キャッシュ:Cookieの基本
1回目リクエスト 2回目以降リクエスト
© 2015 J-Stream Inc. All Rights Reserved.
HTTPリクエスト
HTTPレスポンス
GET /index.html HTTP/1.1
HTTP/1.1 200 OK
…
Set-Cookie:id=kosho;path=/;expires=…
はじめまして。
HTTPリクエスト
GET /index.html HTTP/1.1
…
Cookie:id=kosho
HTTPレスポンス
HTTP/1.1 200 OK
…
koshoさん、こんにちは
- 54. SSL CDN:SSL化の動向
▶動向
© 2015 J-Stream Inc. All Rights Reserved. 54
大項目
マーケターニーズ
Google検索のランクダウン
SSLサイトからのリファラ取得
HTTP/2 基本的にTLSが使用される(非暗号版が実装されるか未定)
ブラウザ実装
FireFox:非SSLサイトへの機能制約(予定)
Chrome:非SSLサイトへのワーニング表示(ベータ機能)
動画のHTTPS化
Youtube:対応済み
Netflix:2015年9月より開始、2016年中に完了
米国連邦政府 連邦機関の全サイトをSSL化(期限:2016年12月31日)
iOS9アプリ ATS(TLS1.2+ forward secrecy必須)がデフォルトで有効化
- 55. SSL CDN:SNI
▶SSL SNI (Server Name Indicator)
▶SSLにおけるバーチャルホスト機能
▶非対応
▶Android 2.x、Windows XP、Java6、古めのテレビ
▶SSL ハンドシェイク
▶SNIを使わない場合、ホスト名は使わない
© 2015 J-Stream Inc. All Rights Reserved. 55
・Client Hello (サポートしている暗号方式)
接続したいホスト名 (SNI)
・Server Hello (使用する暗号方式)
・Server Certificate (サーバのSSL証明書)
www.example.jp
198.51.100.10
198.51.100.10
名前引き
- 60. HTTP/2 CDN
▶HTTP/2アクセラレータ
© 2015 J-Stream Inc. All Rights Reserved. 60
クライアント
HTTP/2
HTTP/1.1
複数のリクエスト
を1本のTCP化
サーバプッシュ
レスポンスHTTPヘッダ
プッシュ指定
link:<screen.css>; rel=preload; as=stylesheet
CDN設定
プッシュ指定(ファイル)
プライオリティ指定
オリジンサーバCDNサーバ