h2oで手軽にHTTP2.0を体験してみる

rebuild.fmEpisode99で出ていたh2oを試してみた。
HTTP/2対応をするのに1番楽そうなのがh2oと思っています。

HTTP/2については・・・

このあたりの資料が良い感じだと思う。

「HTTP/2」制定の背景や「HTTP/1」との違い、Akamaiのマーク・ノッティンガム氏が説明を読むとわかったふりができる!!!

Latencyの大きいUS Regionのサーバを利用するとかいうシチュエーションだと効果があるかも

Amazon Linux上にh2oをインストールする。

  1. Development Tools Install
  2. cmake Install
  3. h2o Install

上記3工程でインストールは完了です。

Development Tools Install

h2oのパッケージはないためにSourceからインストールを行います。
そのためにDevelopment Toolsをインストールします。

# yum groupinstall “Development Tools”

cmake Install

# yum install libyaml-devel

h2o Install

# cd /usr/local/src
# git clone https://github.com/kazuho/h2o.git
# cd h2o
# git submodule update –init –recursive
# cmake .
# make h2o

h2o.confの中身はこんな感じ。

listen: 80
hosts:
default:
paths:
/:
proxy.reverse.url: http://apache.barasu.org/
access-log: /var/log/h2o-access.log

listen:
port: 443
ssl:
certificate-file: /home/ec2-user/ssl.crt
key-file: /home/ec2-user/server.key
hosts:
default:
paths:
/:
proxy.reverse.url: http://apache.barasu.org/
access-log: /var/log/h2o-ssl-access.log

起動は

# /usr/local/src/h2o/h2o -c /home/ec2-user/h2o.conf &

HTTP/2で動いているかの確認

HTTP/2対応ブラウザで見てみます。
“GET / HTTP/2” 200 21674 “-” “Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36”

未対応ブラウザでみるとちゃんとHTTP/1.1で通信している。
“GET /favicon.ico HTTP/1.1” 200 3638 “-” “Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0”

フロントにリバースプロキシのHTTP/2対応サーバを置いて、裏のAPサーバへはHTTP/1.1で良いような気がする。

これでTLSが普通になる世界がきたらいいと思う。
今はキャリアさんの「通信の最適化」があるし・・・^^;;

通信の最適化は「ハッハッ、見ろ!第1種電気通信事業がゴミのようだ!! #通信の最適化() 」あたりを読んで^^;;

考えるのめんどくさいからALL TLSでいいよ(思考停止)

zabbixとかCactiとかのグラフ見るのが早くなるかもしれないから良いかもしれないと思っている。

host毎にSSL証明書を取るのはさすがに面倒なのとお金的に大変だからドメイン丸ごとの証明書が欲しくなるよね。

速度的には
HTTP/1.1 だと 5.153秒。HTTP/2 だと5.098秒
変わりませんでした!!!
個人的には15%ぐらい早くなっていて欲しいんだけど・・・・

ELB(Elastic Lord Balancer)とかApacheやnginxがHTTP/2対応してくれたら速攻広がると思います。
現段階(ELB,Apache,nginxが未対応の状態)で実運用でHTTP/2を利用していくかは不明。

ただブラウザ的にはだいたいのブラウザはHTTP/2対応している

  • Google Chrome
  • Mozilla Firefox
  • Windows 10上のInternet Explorer 11
  • Microsoft Edge
  • Opera

Safari以外は対応している感じだな。
SafariもiOS 9やEl CapitanからはHTTP/2対応だし。
今年の秋頃にiOS 9とか El Capitanがリリースされてそれに含まれるSafariはUpdateされるからはほとんどのブラウザが対応するのね。

モバイルアプリのWeb Viewとかの対応はどうなっているのかな?

ちなみにiOS 9βでもちゃんとHTTP/2で通信出来ていることをLogからもわかります
“GET /styles/themes/originalblue/images/bg_h-hard_85.png HTTP/2” 200 94 “https://www.example.com/” “Mozilla/5.0 (iPhone; CPU iPhone OS 9_0 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13A4325c Safari/601.1”

いろいろな意味で証明書のコストを負担できたらHTTP/2は十分選択できるよね。