ãµã‚‰ã£ã¨æœ¬å±‹ã«ç«‹ã¡å¯„ã£ã¦ã‚¦ã‚§ãƒ–DBプレスã®HTTP/2.0ã®ç‰¹é›†ãŒç›®ã«æ¢ã¾ã£ãŸã®ã§æ—©é€Ÿè³¼å…¥ï¼ ã¨ã„ã†ã“ã¨ã§ã€è¨˜äº‹ã®ã‚µãƒžãƒªã‚’ã”紹介ã—ã¾ã™ã€‚ ã•ã‚‰ã«èˆˆå‘³ãŒã‚ã‚‹æ–¹ã¯æ˜¯éžè³¼å…¥ä¸‹ã•ã„。
「SPDY(スピーディー)ã€ã¨ã¯ã€Googleã®ã‚¨ãƒ³ã‚¸ãƒ‹ã‚¢ãŒé–‹ç™ºã—ãŸWebã®ãƒ‘フォーマンス改善を目的ã¨ã—ãŸãƒ—ãƒãƒˆã‚³ãƒ«ã§ã™ã€‚ ã“ã®ãƒ—ãƒãƒˆã‚³ãƒ«ã¯Googleã®ã‚µãƒ¼ãƒ“スã¯ã‚‚ã¡ã‚ã‚“ã®ã“ã¨ã€Facebookã€Twitterã€LINEも対応を始ã‚ã¦ã„ã‚‹ãã†ã§ã™ã€‚ ã¾ãŸã€HTTP/2.0ã®ä»•æ§˜ã®ãƒ™ãƒ¼ã‚¹ã¯ã€ŒSPDYã€ãŒæŽ¡ç”¨ã•ã‚ŒãŸã‚ˆã†ã§ã™ã€‚
ãªãœGoogleã¯ç‹¬è‡ªãƒ—ãƒãƒˆã‚³ãƒ«ã®SPDYを用ã„ã¦ã‚µãƒ¼ãƒ“ス展開ã§ããŸã®ã‹ã¨ã„ã†ã¨ã€Chromeã•ã‚“ã‚’æŒã£ã¦ãŸã‹ã‚‰å¯èƒ½ã ã£ãŸã‚ˆã†ã§ã™ã€‚ ãŸã—ã‹ã«ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚½ãƒ•ãƒˆã‚’自社開発ã—ã¦ã„ã‚Œã°ã€ç‹¬è‡ªãƒ—ãƒãƒˆã‚³ãƒ«ã«ã—ã¦ã‚‚全然å•é¡Œãªã„ã§ã™ã。
Webã®åˆæœŸã®ç›®çš„ã¯ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ä¸Šã§æ–‡æ›¸ã‚’共有ã™ã‚‹ã“ã¨ã§ã—ãŸã€‚ HTTPã§ã“ã®ä»•çµ„ã¿ã‚’実ç¾ã§ãã‚Œã°è‰¯ã‹ã£ãŸã‚ã‘ã§ã™ã。 今見ãŸã„ãªãƒªãƒƒãƒã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã ã¨ã‹ã€æ•°ä¸‡è¦æ¨¡ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’実ç¾ã™ã‚‹ã‚ˆã†ãªæŠ€è¡“çš„è¦æ±‚ã¯ç„¡ã‹ã£ãŸã‚ã‘ã§ã™ã€‚
HTTP/1.0ã®ç‰¹å¾´ã¯ä»¥ä¸‹ã®ç‚¹ã«ã‚ã‚Šã¾ã™ã€‚
・TCP接続時ã®3-way-handshake クライアントãŒãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’投ã’ã‚‹ãŸã‚ã®TCP接続ã®ãŸã‚ã«ã‚µãƒ¼ãƒã¨ï¼“回やりã¨ã‚Šã‚’ã—ã¾ã™ã€‚ ã“ã‚Œã¯ãƒªã‚¯ã‚¨ã‚¹ãƒˆãŒç™ºç”Ÿã™ã‚‹åº¦ã«è¡Œã„ã¾ã™ã€‚
・TCP通信時ã®è¼»è¼³åˆ¶å¾¡ 一度ã«å¤§é‡ã®ãƒ‡ãƒ¼ã‚¿ã‚’é€ä¿¡ã—ã¦é€šä¿¡ãŒæˆç«‹ã—ãªããªã‚‹ã®ã‚’防æ¢ã™ã‚‹ãŸã‚ã€å°»ä¸ŠãŒã‚Šã«é€ä¿¡ã§ãるデータé‡ãŒå¢—ã‚„ã—ã¦ã„ãã¾ã™ã€‚ ã“ã‚Œã¯TCP接続ãŒåˆ‡æ–ã•ã‚Œã‚‹ã¨ãƒªã‚»ãƒƒãƒˆã•ã‚Œã¾ã™ã€‚
3-way-handshakeや輻輳制御ã«ã‚ˆã‚‹ãƒœãƒˆãƒ«ãƒãƒƒã‚¯ã‚’軽減ã•ã›ã‚‹ä»•çµ„ã¿ãŒæä¾›ã•ã‚Œã¦ã„ã¾ã™ã€‚
・Keep-Alive ã“ã®æ©Ÿèƒ½ã‚’有効ã«ã™ã‚‹ã¨ã€ä¸€åº¦ç¢ºç«‹ã—ãŸTCP接続を複数回ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆ/レスãƒãƒ³ã‚¹é–“ã§ä½¿ã„ã¾ã‚ã™ã“ã¨ãŒã§ãã¾ã™ã€‚ ã“ã‚Œã«ã‚ˆã‚Šã€3-way-handshakeã®å®Ÿæ–½å›žæ•°ã®æ¸›å°‘ã‚„ã€é€ä¿¡ã§ãるデータé‡ãŒãƒªã‚»ãƒƒãƒˆã•ã‚Œãªã„ãŸã‚ã€ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã‚‚å‘上ã—ã¾ã™ã€‚ ã§ã‚‚ã“ã‚Œã ã‘ã§ã¯é«˜é€ŸåŒ–ã¨ã—ã¦ã¯ä¸å分。 ãªãœãªã‚‰ã€HTTP/1.0ã§ã¯ã€Œå…ˆè¡Œã™ã‚‹ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«å¯¾ã™ã‚‹ãƒ¬ã‚¹ãƒãƒ³ã‚¹ãŒå®Œäº†ã™ã‚‹ã¾ã§ã€ 次ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’発行ã—ã¦ã¯ãªã‚‰ãªã„。ã€ã¨ã„ã†ãªã‚“ã¨ã‚‚èžé€šã®ãã‹ãªã„è¦ç´„ãŒã‚ã‚Šã¾ã™ã€‚ ãã®ãŸã‚ã€Keep-Aliveを有効ã«ã—ãŸã¨ã“ã‚ã§ã€æœ€åˆã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«å¯¾ã™ã‚‹ãƒ¬ã‚¹ãƒãƒ³ã‚¹ãŒã‚ã¡ã‚ƒæ™‚é–“ãŒæŽ›ã‹ã‚‹ã¨ 後続ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆãŒæŠ•ã’られãªã„ã‚ã‘ã§ã™orz
・パイプライン化 上記ã®å•é¡Œã‚’解決ã™ã‚‹ã®ãŒã€ãƒ‘イプライン化ã§ã™ã€‚ HTTP/1.1ã‹ã‚‰ã€ŒKeep-AliveãŒæœ‰åŠ¹ãªæŽ¥ç¶šä¸Šã§ã¯ãƒ‘イプライン化ãŒå¯èƒ½ã§ã‚る。ã€ã¨ã„ã†ä»•æ§˜ãŒå®šç¾©ã•ã‚Œã¾ã—ãŸã€‚ パイプライン化ã¨ã¯ã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¯ãƒ¬ã‚¹ãƒãƒ³ã‚¹å¾…ãŸãšã«ã©ã‚“ã©ã‚“投ã’れるよï¼ã¨ã„ã†ã‚‚ã®ã§ã™ã€‚ ã—ã‹ã—ã€ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã¯ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¨åŒã˜é †ã§è¿”ã—ã¦ã„ãã¾ã™ã€‚。 ã¤ã¾ã‚Šã€ãƒ‘イプライン化をã—ãŸã¨ã“ã‚ã§ã€å…ˆé ã®ãƒ¬ã‚¹ãƒãƒ³ã‚¹ãŒé…ã‘ã‚Œã°å¾Œç¶šã®ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã‚‚é…ããªã‚‹ã‚ã‘ã§ã™orz
・Accept-Encoding HTTPã¯ãƒ†ã‚ストベースã®ãƒ—ãƒãƒˆã‚³ãƒ«ã§ã™ã€‚ リクエスト/レスãƒãƒ³ã‚¹ã®ãƒ˜ãƒƒãƒ€ã¯å…¨ã¦ãƒ†ã‚ストデータã®ãŸã‚ã€ãƒ‘ケットサイズãŒå¤§ãããªã‚Šã¾ã™ã€‚ HTTP/1.1ã§ã¯ãƒ˜ãƒƒãƒ€ã«Accept-Encodingを定義ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ã‚µãƒ¼ãƒã‹ã‚‰åœ§ç¸®ã—ãŸãƒ¬ã‚¹ãƒãƒ³ã‚¹ãŒå—ä¿¡å¯èƒ½ã«ãªã‚Šã¾ã™ã€‚ 転é€åŠ¹çŽ‡ã¯å‘上ã—ã¾ã™ã€‚ã—ã‹ã—ã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆã®åœ§ç¸®ã¯ã§ãã¾ã›ã‚“。。
ã‚ã¨ã€Keep-Aliveやパイプライン化ã¯ã„ãã¤ã‹ã®èª²é¡ŒãŒã‚ã‚Šã¾ã™ã€‚ ・パイプライン化éžå¯¾å¿œã®ã‚µã‚¤ãƒˆã§ãƒ‘イプライン有効ãªã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‹ã‚‰æŽ¥ç¶šã™ã‚‹ã¨è¡¨ç¤ºãŒå´©ã‚Œã‚‹ ・複数ã®TCP接続をKeep-Aliveã§ç¢ºç«‹ã™ã‚‹ã¨ã‚µãƒ¼ãƒãŒè€ãˆã‚‰ã‚Œãªããªã‚‹å¯èƒ½æ€§ã‚ã‚Š ・確立ã—ãŸæŽ¥ç¶šãŒé€šä¿¡ã—ã¦ã„ãªã„ã®ã«æ®‹ã£ãŸã¾ã¾ã«ãªã‚‹å ´åˆæœ‰ã‚Š ・åŒæ™‚ã«é€ä¿¡ã™ã‚‹ãƒªã‚½ãƒ¼ã‚¹ã®ä¸Šé™ã‚„タイムアウトã®é©åˆ‡ãªè¨å®šãŒå¿…è¦ã«ãªã‚‹
SPDYもトランスãƒãƒ¼ãƒˆå±¤ã«TCPを利用ã—ã¦ã„ã¾ã™ã€‚SPDYã§ã¯ã‚µãƒ¼ãƒã¨TCP接続を一度確立ã™ã‚‹ã¨ã€ ãれを複数ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆ/レスãƒãƒ³ã‚¹ã§ä½¿ã„ã¾ã‚ã—ã¾ã™ã€‚
ã“ã‚Œã«ã‚ˆã‚Šã€å¾“æ¥ã®HTTPã®ã‚ˆã†ãªKeep-Alive+パイプライン化ã¨åŒæ§˜ã®åŠ¹æžœã‚’生ã¿å‡ºã—ã¾ã™ã€‚
ç•°ãªã‚‹ç‚¹ã¯ã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆ/レスãƒãƒ³ã‚¹ãŒå…¨ã¦å¤šé‡åŒ–ã—ã¦ã„ã‚‹ãŸã‚ã€åŒæ™‚ã«ã„ãã¤ã§ã‚‚リクエストを 投ã’ã‚‹ã“ã¨ãŒã§ãã€å¾“æ¥ã®è¦ç´„ã«ã¯ãªã„レスãƒãƒ³ã‚¹ã®é †åºã‚‚自分ã§è¨å®šã™ã‚‹ã“ã¨ãŒã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚
é…ãã¦å„ªå…ˆé †ä½ã®ä½Žã„レスãƒãƒ³ã‚¹ã¯å¾Œå›žã—ã«ã™ã‚‹ã¨ã„ã†å·¥å¤«ãŒã§ãã¾ã™ã。
SPDYã¯ã‚»ãƒƒã‚·ãƒ§ãƒ³å±¤ã§TLSを利用ã™ã‚‹ã“ã¨ãŒå‰æã¨ãªã£ã¦ã„ã¾ã™ã€‚ãã®ãŸã‚ã€URLã¯HTTPSã‹ã‚‰å§‹ã¾ã‚Šã€ SSLã®è¨¼æ˜Žæ›¸ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚ ãªãœTLSãŒå¿…è¦ã«ãªã‚‹ã®ã‹ã€‚ãã‚Œã¯ã€TLSã®æ‹¡å¼µã®NPNã¨ã„ã†ä»•çµ„ã¿ã‚’使ã£ã¦ã„ã‚‹ã‹ã‚‰ã§ã™ã€‚ NPNã¯ä½•è€…ã‹ï¼Ÿã“れを使ã†ã“ã¨ã§ã€æŽ¥ç¶šç¢ºç«‹æ™‚ã«SPDYを使ã†ã®ã‹ã€HTTPを使ã†ã®ã‹ã‚’é¸æŠžã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ クライアントã‹ã‚µãƒ¼ãƒãŒSPDYã«å¯¾å¿œã—ã¦ã„ãªã„å ´åˆã€HTTPを採用ã™ã‚‹ã¨ã„ã†ã‚ˆã†ãªã“ã¨ãŒã§ãã¾ã™ã。
HTTPメソッドã€ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚³ãƒ¼ãƒ‰ã€ãªã©ã®ãƒ˜ãƒƒãƒ€æƒ…å ±ã‚„ãƒœãƒ‡ã‚£æƒ…å ±ã¯SPDYã®ãƒ•ãƒ¬ãƒ¼ãƒ ã«å«ã‚ã¦é€å—ä¿¡ã§ãã‚‹ãŸã‚〠従æ¥ã®ã‚¢ãƒ—リケーションã®ç§»è¡Œã¯æ¯”較的難ã—ããªã„ã¨è¨€ãˆã¾ã™ã€‚
HTTPã¯Pullåž‹ã®ãƒ—ãƒãƒˆã‚³ãƒ«ã§ã—ãŸãŒã€SPDYã¯ãƒªã‚½ãƒ¼ã‚¹ã‚’サーãƒã‹ã‚‰Pushã™ã‚‹ä»•çµ„ã¿ã‚’採用ã—ã¦ã„ã¾ã™ã€‚
ã“ã‚Œã«ã‚ˆã‚Šã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆã•ã‚Œã¦ã„ãªã„リソースをサーãƒã‹ã‚‰äº‹å‰ã«ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¸é€ä¿¡ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
例ãˆã°ã€HTMLã®ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã‚’クライアントãŒå¾…ã¤å‰ã«ã€JSã‚„CSSãªã©ã‚’事å‰ã«Pushã—ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ã‚ャッシュã«ä¿å˜ã—ã¾ã™ã€‚ ãã‚Œã«ã‚ˆã‚Šã€HTMLã®ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã‚’クライアントãŒå—ã‘å–ã‚‹ã¨ã€JSã‚„CSSã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’サーãƒã«å•ã„åˆã‚ã›ã‚‹å‰ã« ã‚ャッシュã«ãƒ’ットã™ã‚‹ãŸã‚クライアントã¯ã‚µãƒ¼ãƒã¸ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹å¿…è¦ãŒç„¡ããªã‚Šã¾ã™ã€‚
SPDYã§ã¯ãƒªã‚¯ã‚¨ã‚¹ãƒˆ/レスãƒãƒ³ã‚¹ã”ã¨ã«ï¼‘ã¤ã®è«–ç†çš„ãªæŽ¥ç¶šã‚’確立ã—ã¾ã™ï¼ˆã‚¹ãƒˆãƒªãƒ¼ãƒ ã®ç”Ÿæˆï¼‰ã€‚
ストリームã¯å¤šé‡åŒ–ã•ã‚Œã¦ã„ã‚‹ãŸã‚ã€é †åºã®ä¾å˜é–¢ä¿‚ãŒã‚ã‚Šã¾ã›ã‚“。ãã‚Œã«ã‚ˆã‚Šã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆã—ãŸé †ã§ãªãã¦ã‚‚ レスãƒãƒ³ã‚¹ã‚’è¿”ã™ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚ ã—ã‹ã—ã€é †ä¸åŒãªãŸã‚ã€ä¸éƒ½åˆãŒç”Ÿã˜ã‚‹å ´åˆãŒã‚ã‚‹ã‹ã¨æ€ã„ã¾ã™ã€‚ãã“ã§ã€ã‚¹ãƒˆãƒªãƒ¼ãƒ ã«å„ªå…ˆåº¦ã‚’ã¤ã‘ã‚‹ã“ã¨ã§ クライアントã®æ¬²ã—ã„é †ã«ã‚µãƒ¼ãƒãŒè¿”ã™ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚
ç§ã‚‚ãã†ã ã£ãŸã®ã§ã™ãŒã€ã€ŒServer Pushã£ã¦WebSocketã¦åŒã˜ã˜ã‚ƒã?ã€ã¨æ€ã£ã¦ã„ã¾ã—ãŸã€‚ ã“ã®è¨˜äº‹ã‚’èªã‚“ã§ç´å¾—ã—ã¾ã—ãŸã€‚é•ã„ã¯ãã‚‚ãã‚‚ã®ç›®çš„ã«ã‚ã‚Šã¾ã—ãŸã€‚
WebSocket:サーãƒã¨ã®é€šä¿¡ã‚’より柔軟ã«è¡Œã†
→å‹•çš„ãªã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®é€šä¿¡ãŒå¯èƒ½
SPDY:コンテンツã®ã‚„ã‚Šã¨ã‚Šã‚’効率良ãè¡Œã†
→é™çš„ãªã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®é€šä¿¡ã‚’想定
以上ãŒSPDYã®ç‰¹å¾´ã«ãªã‚Šã¾ã™ã€‚
ã“ã®SPDYã®ä»•æ§˜ã‚’ベースã«HTML/2.0ãŒå‡ºæ¥ä¸ŠãŒã‚Šãã†ã§ã™ã®ã§ã€Webエンジニアã¯æ˜¯éžæŠ¼ã•ãˆã¦ãŠããŸã„話ã ã¨æ€ã„ã¾ã™ã€‚ 詳ã—ã„説明ã«ã¤ãã¾ã—ã¦ã¯ã€ã‚¦ã‚§ãƒ–DBプレスをã”一èªä¸‹ã•ã„。
※内容ã«èª¤ã‚Šãªã©ã‚ã‚Šã¾ã—ãŸã‚‰ã”ã‚ã‚“ãªã•ã„。。。