SlideShare uma empresa Scribd logo
1 de 24
Baixar para ler offline
Node の HTTP/2.0 モジュール
iij-http2 の実装苦労話
IIJ 大津 繁樹
2013年8月21日
第10回東京Node学園
自己紹介
• 株式会社インターネットイニシアティブ(IIJ)
プロダクト本部 戦略的開発部所属
• twitter: @jovi0608
• github: https://github.com/shigeki/
• ブログ: http://d.hatena.ne.jp/jovi0608/
• Node とか、HTML5とか、HTTP/2.0とか、流行そうな
技術の評価検証してます。
• 最近、HTTP/2.0仕様修正やNode.js のHTTP/2.0モ
ジュールの開発をしています。
ちょっとNodeの最新トピックス(PR5464)
var EventEmitter = require("events") ;
var emitter = new EventEmitter();
と書けるようになりました!(ただしv0.11.6~)
あと、ストリームについては、3か月前
こうでした。
http://www.slideshare.net/shigeki_ohtsu/stream2-kihon
もう時代は先に (v0.11.5~)
• old mode/new mode はなくなり flowing mode/paused mode に、
• stream1 + stream2 = streams3
• data イベント復活
• ただし以前のAPIと互換性はありますのでご安心を
今回のiij-http2は Streams3 を利用
さて本題へ、
Nodeを使って新しいプロトコル(HTTP/2.0)を実
装したというお話です。
(コードはまだ未公開です。テスト追加やらドキュメント整備やらリファクタやら・・・)
SPDY、HTTP/2.0について
http://www.iij.ad.jp/company/development/tech/activities/spdy/
これ読んでください。
テキストベースのプロトコルからバイナリープロトコルへ
年 月 トピック
2012年1月 IETF httpbis WGでHTTP/2.0の仕様検討開始することを決定
2012年11月 3つの候補案からSPDY仕様をベースにすることを決定
draft-00(SPDY/3仕様をそのまま)リリース
2013年1月 第1回中間会議(東京)
draft-01リリース(HTTPからのUpgrade方法を追加)
2013年4月 draft-02リリース(フレームフォーマット・タイプの大幅な変更)
2013年5月 draft-03リリース(中間会議に向けて修正点の整理・まとめ)
2013年6月 第2回中間会議(サンフランシスコ)
2候補案を合わせたヘッダ圧縮仕様の採用を決定
2013年7月 draft-04リリース(最初の実装仕様)
2013年8月 第3回中間会議(ハンブルグ)
最初のHTTP/2.0相互接続試験を実施
draft-05リリース(接続試験結果を反映)
これまでの HTTP/2.0 仕様策定作業の主な歩み
今ここ、
iij-http2 を持ち込んだ
2014年春に仕様化完了を目指す
相互試験の細かい話は、
http://www.slideshare.net/shigeki_ohtsu/httpbis-interim-http20-25197160
あと、今朝 「HTTP/2.0 Draft 04 日本語訳」も公開されました。GJ!
http://summerwind.jp/docs/draft-ietf-httpbis-http2-04/
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
Length(16) Type(8) Flags(8)
R Stream Identifier(31)
Frame Payload
HTTP/2.0 Frame Format
Type Name 役割
0x0 DATA リクエスト・レスポンスボディ
0x1 HEADERS リクエスト・レスポンスヘッダ
0x2 PRIORITY レスポンスの優先度設定
0x3 RST_STREAM ストリームのリセット
0x4 SETTINGS 設定情報
0x5 PUSH_PROMISE サーバプッシュの予約
0x6 PING 生死確認
0x7 GOAWAY 終了宣言
0x9 WINDOW_UPDATE フロー制御ウィンドウの更新
0x8は欠番
重要なのは
この二つ
最初の8バイト分を
見れば大丈夫
HTTP/2.0のフレー
ムヘッダは8バイト
iij-http2の設計方針
• 7/8に draft-04がリリース。実装期間は約4週間弱。
• node-spdyはクライアントがない。spdy/3フレーム
フォーマットに大きく依存した実装なのでヤメ。
• Chromeのspdyスタック(Visitorパターン)を参考
– コネクション生成→フレーム解析→コールバック→ストリー
ム処理
• Nodeのhttpモジュールを最大限に流用
(Outgoing/Incomingクラスを利用、後で後悔)
• HTTP/2.0サーバの初期ハンドシェイク(後述)
は、とりあえずTLS+NPNとDirectの2種だけに。
iij-http2 の基本構成
(HTTPバインディング部分は除く)
Connection
(TCP接続)
OnDATA(frame)
OnHEADERS(frame)
・・・・
onWINDOW_UPDATE(frame)
Frame
HEADERSDATA WINDOW_UPDATE・・・・
Stream
(多重化)
stream_id
priority
_state
ストリー
ム生成
ソケットデータを
フレーム解析&
コールバック
ストリーム状態
遷移を管理
WritableStreamを
利用
HTTP Server のおさらい(v0.11)
TCP socket サーバに
HTTP/HTTPS サーバが
ぶらさがっているのよ
HTTP Serverのコア
lib/_http_server.js (v0.11)
function Server(requestListener) {
(中略)
this.addListener('connection', connectionListener);
}
util.inherits(Server, net.Server);
function connectionListener(socket) {
// とんでもない処理
// (おそらくNode.jsコアの中で最難関の一つ)
}
HTTP/2.0向けにconnectionListener をどう書くかがキモ
HTTPSサーバと共通化しているのでSSL化は楽
Hello World! with HTTP/1.1
var http = require(‘http’);
var server = http.createServer(function(req, res) {
res.writeHead(200, {‘content-type’: ‘text/plain’});
res.end(‘Hello World!’);
});
server.listen(8080);
目標:HTTP/2.0でこれと同じ処理ができるようにしよう
HTTP/2.0の接続方法(第1段階目)
パターンは3種類
あらかじめサーバがHTTP/2.0対応とわかって
いる場合、直接第2段階の接続方法を行う。
HTTP/1.1の接続後 Upgradeヘッダを使って、
HTTP/2.0 に接続をアップグレードする。
TLS接続時にALPN拡張フィールドを利用して
HTTP/2.0に接続を行う。(1) TLS + ALPN
(2) HTTP Upgrade
(3) Direct接続
opensslが当時非
対応だったので
NPNを利用
WebSocketと一緒
今回は未実装
DNSやAlternate-Protocolを想定
実装が一番簡単
iij-http2は、サーバは 1 と 3 、クライアントは 1,2,3 を実装
HTTP/2.0の接続方法(第2段階目)
505249202a20485454502f322e300d0a0d0a534d0d0a0d0a
PRI * HTTP/2.0¥r¥n
¥r¥n
SM¥r¥n
¥r¥n
クライアントから謎の24byteのマジックコードをサー
バに送り、最終チェックする。
SETTINGS(初期設定値の交換)
HEADERS(HTTPレスポンス)
HEADERS(HTTPリクエスト)
iij-http2コネクションリスナ実装概要
function connectionListener(socket) {
var self = this;
var connection = new Connection(socket, 'http_server', {});
socket.pipe(connection);
connection.on('Incoming', function(req) {
var res = new ServerResponse(req, req._stream);
res.assignSocket(connection);
self.emit('request', req, res);
});
}
pipeでソケットデータを渡す
リクエストヘッダの処理完了
Hello Worldのコールバックを emit
レスポンスオブジェクト生成
Connectionクラス
function Connection(socket, endpoint_type, opts) {
node_stream.Writable.call(this, opts);
(中略)
this.on('ConnectionHeader', OnConnectionHeader);
this.on('FrameHeader', OnFrameHeader);
this.on('FramePayload', OnFramePayload);
this.on('DATA', OnDATA);
this.on('HEADERS', OnHEADERS);
this.on('PRIORITY', OnPRIORITY);
this.on('RST_STREAM', OnRST_STREAM);
this.on('SETTINGS', OnSETTINGS);
this.on('PUSH_PROMISE', OnPUSH_PROMISE);
this.on('PING', OnPING);
this.on('GOAWAY', OnGOAWAY);
this.on('WINDOW_UPDATE', OnWINDOW_UPDATE);
}
結局バカでかいクラスに。 Chrome も同じでした。
初期接続処理
Connection.prototype._write = function(chunk, encoding, cb) {
this._buf_list.push(chunk);
if(!this._recv_connection_header) {
if(this._buf_list.total >= connection_header.length) {
var b = Buffer.concat(this._buf_list);
this.emit('ConnectionHeader', b.slice(0, connection_header.length));
back = b.slice(connection_header.length);
backBuffer(this, back);
} else {
cb();
return;
}
}
(いろいろ後略)
};
マジックコード長だけ
切り出し、コールバッ
ク内でHTTP/2.0の文
字列チェック
初期接続済フラグ
WritableStream
HTTP/2.0フレームヘッダのパース
(バイナリーデータの解析)
function parseFrameHeader(buf) {
var offset = 0;
var length = buf.readUInt16BE(offset);
offset += 2;
var type = buf.readUInt8(offset);
offset++;
var flags = buf.readUInt8(offset);
offset++;
var stream_id = buf.readUInt32BE(offset) & kUInt31;
return {'length': length, 'type': type, 'flags': flags, 'stream_id': stream_id};
}
バイナリーフレームのデータ解析は Buffer API が必須
ペイロードをパースしたら各フレーム型に応じたコールバックを起動
HTTPバインディング
Nodeコアモジュールと連携
• 結局ほぼ書き直すことに・・・
– 既存のoutgoing/incoming クラスの跡形もなく・・・
• 時間が足りなく dirty hack の嵐 (涙目)
• ServerPush も実装したんだが・・・
• 海外出張直前のバタバタ、一番苦労したとこ
ろ。でも一身上の都合で今回発表は見合わ
せます。(全部作り直してやる)
で、 Hello World! with iij-http2
var http2 = require(‘./lib/http2.js’);
var server = http2.createServer(function(req, res) {
res.writeHead(200, {‘content-type’: ‘text/plain’});
res.end(‘Hello World!’);
});
server.listen(8080);
(SSLサーバでは、証明書とNPN関係のオプション指定を行う)
iij-http2 <-> HTTP/2.0 Chrome
成功!
(TLS+NPNの場合ですが)

Mais conteúdo relacionado

Mais procurados

HTTP/2: ぼくたちのWebはどう変わるのか
HTTP/2: ぼくたちのWebはどう変わるのかHTTP/2: ぼくたちのWebはどう変わるのか
HTTP/2: ぼくたちのWebはどう変わるのかKaoru Maeda
 
HTTP 2.0のヘッダ圧縮(HPACK)
HTTP 2.0のヘッダ圧縮(HPACK)HTTP 2.0のヘッダ圧縮(HPACK)
HTTP 2.0のヘッダ圧縮(HPACK)Jun Fujisawa
 
HTTP2 時代の Web - web over http2
HTTP2 時代の Web - web over http2HTTP2 時代の Web - web over http2
HTTP2 時代の Web - web over http2Jxck Jxck
 
HTTP/2 でリバプロするだけでグラフツールを 高速化できた話
HTTP/2 でリバプロするだけでグラフツールを 高速化できた話HTTP/2 でリバプロするだけでグラフツールを 高速化できた話
HTTP/2 でリバプロするだけでグラフツールを 高速化できた話Naotoshi Seo
 
IETF93 Prague報告Web関連+QUIC
IETF93 Prague報告Web関連+QUICIETF93 Prague報告Web関連+QUIC
IETF93 Prague報告Web関連+QUICKaoru Maeda
 
HTTP2 RFC 発行記念祝賀会
HTTP2 RFC 発行記念祝賀会HTTP2 RFC 発行記念祝賀会
HTTP2 RFC 発行記念祝賀会Jxck Jxck
 
LibreOffice を Windows 上でビルドする UPDATE2
LibreOffice を Windows 上でビルドする UPDATE2LibreOffice を Windows 上でビルドする UPDATE2
LibreOffice を Windows 上でビルドする UPDATE2Tomofumi Yagi
 
最新Webプロトコル傾向と対策
最新Webプロトコル傾向と対策最新Webプロトコル傾向と対策
最新Webプロトコル傾向と対策Kensaku Komatsu
 
LibreOfficeをWindows上でビルドする
LibreOfficeをWindows上でビルドするLibreOfficeをWindows上でビルドする
LibreOfficeをWindows上でビルドするTomofumi Yagi
 
LibreOfficeをビルドしてみよう(Windows)
LibreOfficeをビルドしてみよう(Windows)LibreOfficeをビルドしてみよう(Windows)
LibreOfficeをビルドしてみよう(Windows)Masataka Kondo
 
http2study 20160423 IETF95 Report
http2study 20160423 IETF95 Reporthttp2study 20160423 IETF95 Report
http2study 20160423 IETF95 ReportKaoru Maeda
 
いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0Masakazu Matsushita
 
Gitのよく使うコマンド
Gitのよく使うコマンドGitのよく使うコマンド
Gitのよく使うコマンドYUKI Kaoru
 
Git & GitHub を使いこなしてハッピーになろう! - WordBench 名古屋 & concrete5 名古屋 合同勉強会
Git & GitHub を使いこなしてハッピーになろう! - WordBench 名古屋 & concrete5 名古屋 合同勉強会Git & GitHub を使いこなしてハッピーになろう! - WordBench 名古屋 & concrete5 名古屋 合同勉強会
Git & GitHub を使いこなしてハッピーになろう! - WordBench 名古屋 & concrete5 名古屋 合同勉強会Katz Ueno
 
LibreOffice を Windows 上でビルドする UPDATE
LibreOffice を Windows 上でビルドする UPDATELibreOffice を Windows 上でビルドする UPDATE
LibreOffice を Windows 上でビルドする UPDATETomofumi Yagi
 
node.js koとhtml5とwebsocketsと
node.js koとhtml5とwebsocketsとnode.js koとhtml5とwebsocketsと
node.js koとhtml5とwebsocketsとscdn
 
The Basic of How to build LibreOffice / LibreOffice開発版ビルドの基礎 for Windows
The Basic of How to build LibreOffice / LibreOffice開発版ビルドの基礎 for WindowsThe Basic of How to build LibreOffice / LibreOffice開発版ビルドの基礎 for Windows
The Basic of How to build LibreOffice / LibreOffice開発版ビルドの基礎 for WindowsNaruhiko Ogasawara
 
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜Takashi Uemura
 

Mais procurados (20)

HTTP/2: ぼくたちのWebはどう変わるのか
HTTP/2: ぼくたちのWebはどう変わるのかHTTP/2: ぼくたちのWebはどう変わるのか
HTTP/2: ぼくたちのWebはどう変わるのか
 
HTTP 2.0のヘッダ圧縮(HPACK)
HTTP 2.0のヘッダ圧縮(HPACK)HTTP 2.0のヘッダ圧縮(HPACK)
HTTP 2.0のヘッダ圧縮(HPACK)
 
HTTP/2 入門
HTTP/2 入門HTTP/2 入門
HTTP/2 入門
 
HTTP2 時代の Web - web over http2
HTTP2 時代の Web - web over http2HTTP2 時代の Web - web over http2
HTTP2 時代の Web - web over http2
 
HTTP/2 でリバプロするだけでグラフツールを 高速化できた話
HTTP/2 でリバプロするだけでグラフツールを 高速化できた話HTTP/2 でリバプロするだけでグラフツールを 高速化できた話
HTTP/2 でリバプロするだけでグラフツールを 高速化できた話
 
IETF93 Prague報告Web関連+QUIC
IETF93 Prague報告Web関連+QUICIETF93 Prague報告Web関連+QUIC
IETF93 Prague報告Web関連+QUIC
 
HTTP2 RFC 発行記念祝賀会
HTTP2 RFC 発行記念祝賀会HTTP2 RFC 発行記念祝賀会
HTTP2 RFC 発行記念祝賀会
 
LibreOffice を Windows 上でビルドする UPDATE2
LibreOffice を Windows 上でビルドする UPDATE2LibreOffice を Windows 上でビルドする UPDATE2
LibreOffice を Windows 上でビルドする UPDATE2
 
最新Webプロトコル傾向と対策
最新Webプロトコル傾向と対策最新Webプロトコル傾向と対策
最新Webプロトコル傾向と対策
 
LibreOfficeをWindows上でビルドする
LibreOfficeをWindows上でビルドするLibreOfficeをWindows上でビルドする
LibreOfficeをWindows上でビルドする
 
LibreOfficeをビルドしてみよう(Windows)
LibreOfficeをビルドしてみよう(Windows)LibreOfficeをビルドしてみよう(Windows)
LibreOfficeをビルドしてみよう(Windows)
 
http2study 20160423 IETF95 Report
http2study 20160423 IETF95 Reporthttp2study 20160423 IETF95 Report
http2study 20160423 IETF95 Report
 
HTTP2入門
HTTP2入門HTTP2入門
HTTP2入門
 
いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0
 
Gitのよく使うコマンド
Gitのよく使うコマンドGitのよく使うコマンド
Gitのよく使うコマンド
 
Git & GitHub を使いこなしてハッピーになろう! - WordBench 名古屋 & concrete5 名古屋 合同勉強会
Git & GitHub を使いこなしてハッピーになろう! - WordBench 名古屋 & concrete5 名古屋 合同勉強会Git & GitHub を使いこなしてハッピーになろう! - WordBench 名古屋 & concrete5 名古屋 合同勉強会
Git & GitHub を使いこなしてハッピーになろう! - WordBench 名古屋 & concrete5 名古屋 合同勉強会
 
LibreOffice を Windows 上でビルドする UPDATE
LibreOffice を Windows 上でビルドする UPDATELibreOffice を Windows 上でビルドする UPDATE
LibreOffice を Windows 上でビルドする UPDATE
 
node.js koとhtml5とwebsocketsと
node.js koとhtml5とwebsocketsとnode.js koとhtml5とwebsocketsと
node.js koとhtml5とwebsocketsと
 
The Basic of How to build LibreOffice / LibreOffice開発版ビルドの基礎 for Windows
The Basic of How to build LibreOffice / LibreOffice開発版ビルドの基礎 for WindowsThe Basic of How to build LibreOffice / LibreOffice開発版ビルドの基礎 for Windows
The Basic of How to build LibreOffice / LibreOffice開発版ビルドの基礎 for Windows
 
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
 

Destaque

HTTP/2.0 HPAC-03 エンコーディング手法 by tatsuhiro_t
HTTP/2.0 HPAC-03 エンコーディング手法 by tatsuhiro_tHTTP/2.0 HPAC-03 エンコーディング手法 by tatsuhiro_t
HTTP/2.0 HPAC-03 エンコーディング手法 by tatsuhiro_tshigeki_ohtsu
 
Node.js で SPDYのベンチマーク体験サイトを作りました
Node.js で SPDYのベンチマーク体験サイトを作りましたNode.js で SPDYのベンチマーク体験サイトを作りました
Node.js で SPDYのベンチマーク体験サイトを作りましたshigeki_ohtsu
 
SPDYの中身を見てみよう
SPDYの中身を見てみようSPDYの中身を見てみよう
SPDYの中身を見てみようshigeki_ohtsu
 
node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成shigeki_ohtsu
 
Bidirektionale Verbindungen für Webanwendungen
Bidirektionale Verbindungen für WebanwendungenBidirektionale Verbindungen für Webanwendungen
Bidirektionale Verbindungen für WebanwendungenMarco Rico Gomez
 
Node-v0.12のTLSを256倍使いこなす方法
Node-v0.12のTLSを256倍使いこなす方法Node-v0.12のTLSを256倍使いこなす方法
Node-v0.12のTLSを256倍使いこなす方法shigeki_ohtsu
 
Node-v0.12の新機能について
Node-v0.12の新機能についてNode-v0.12の新機能について
Node-v0.12の新機能についてshigeki_ohtsu
 
Node最新トピックス
Node最新トピックスNode最新トピックス
Node最新トピックスshigeki_ohtsu
 
サーバPUSHざっくりまとめ
サーバPUSHざっくりまとめサーバPUSHざっくりまとめ
サーバPUSHざっくりまとめYasuhiro Mawarimichi
 
ピッチをする前に知っておきたかったこと スタートアップの資金調達
ピッチをする前に知っておきたかったこと スタートアップの資金調達ピッチをする前に知っておきたかったこと スタートアップの資金調達
ピッチをする前に知っておきたかったこと スタートアップの資金調達Takaaki Umada
 
資金調達入門“以前” スタートアップが資金調達の前に考えること
資金調達入門“以前” スタートアップが資金調達の前に考えること資金調達入門“以前” スタートアップが資金調達の前に考えること
資金調達入門“以前” スタートアップが資金調達の前に考えることTakaaki Umada
 

Destaque (13)

HTTP/2.0 HPAC-03 エンコーディング手法 by tatsuhiro_t
HTTP/2.0 HPAC-03 エンコーディング手法 by tatsuhiro_tHTTP/2.0 HPAC-03 エンコーディング手法 by tatsuhiro_t
HTTP/2.0 HPAC-03 エンコーディング手法 by tatsuhiro_t
 
Node.js で SPDYのベンチマーク体験サイトを作りました
Node.js で SPDYのベンチマーク体験サイトを作りましたNode.js で SPDYのベンチマーク体験サイトを作りました
Node.js で SPDYのベンチマーク体験サイトを作りました
 
SPDYの中身を見てみよう
SPDYの中身を見てみようSPDYの中身を見てみよう
SPDYの中身を見てみよう
 
node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成
 
Bidirektionale Verbindungen für Webanwendungen
Bidirektionale Verbindungen für WebanwendungenBidirektionale Verbindungen für Webanwendungen
Bidirektionale Verbindungen für Webanwendungen
 
Node-v0.12のTLSを256倍使いこなす方法
Node-v0.12のTLSを256倍使いこなす方法Node-v0.12のTLSを256倍使いこなす方法
Node-v0.12のTLSを256倍使いこなす方法
 
Node-v0.12の新機能について
Node-v0.12の新機能についてNode-v0.12の新機能について
Node-v0.12の新機能について
 
Node最新トピックス
Node最新トピックスNode最新トピックス
Node最新トピックス
 
サーバPUSHざっくりまとめ
サーバPUSHざっくりまとめサーバPUSHざっくりまとめ
サーバPUSHざっくりまとめ
 
Stream2の基本
Stream2の基本Stream2の基本
Stream2の基本
 
ピッチをする前に知っておきたかったこと スタートアップの資金調達
ピッチをする前に知っておきたかったこと スタートアップの資金調達ピッチをする前に知っておきたかったこと スタートアップの資金調達
ピッチをする前に知っておきたかったこと スタートアップの資金調達
 
資金調達入門“以前” スタートアップが資金調達の前に考えること
資金調達入門“以前” スタートアップが資金調達の前に考えること資金調達入門“以前” スタートアップが資金調達の前に考えること
資金調達入門“以前” スタートアップが資金調達の前に考えること
 
Node js 入門
Node js 入門Node js 入門
Node js 入門
 

Semelhante a Node の HTTP/2.0 モジュール iij-http2 の実装苦労話

WebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocketWebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocketYu Nobuoka
 
HttpとTelnetをつなぐ何か
HttpとTelnetをつなぐ何かHttpとTelnetをつなぐ何か
HttpとTelnetをつなぐ何かShigekiYamada
 
HTTPとサーブレット
HTTPとサーブレットHTTPとサーブレット
HTTPとサーブレットTakashi Makino
 
20161017 みんてくapacheでhttp/2
20161017 みんてくapacheでhttp/220161017 みんてくapacheでhttp/2
20161017 みんてくapacheでhttp/2Tomohide Murata
 
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作るgumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作るgumilab
 
hubotで快適BOT生活
hubotで快適BOT生活 hubotで快適BOT生活
hubotで快適BOT生活 Kazufumi Otani
 
IETF91 Honolulu httpbis WG Report
IETF91 Honolulu httpbis WG ReportIETF91 Honolulu httpbis WG Report
IETF91 Honolulu httpbis WG ReportKaoru Maeda
 
Html5, Web Applications 2
Html5, Web Applications 2Html5, Web Applications 2
Html5, Web Applications 2totty jp
 
ハイパフォーマンスブラウザネットワーキング 12章「HTTP 2.0」と現在の仕様
ハイパフォーマンスブラウザネットワーキング 12章「HTTP 2.0」と現在の仕様ハイパフォーマンスブラウザネットワーキング 12章「HTTP 2.0」と現在の仕様
ハイパフォーマンスブラウザネットワーキング 12章「HTTP 2.0」と現在の仕様hagino 3000
 
Rtshell入門
Rtshell入門Rtshell入門
Rtshell入門openrtm
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力ThinReports
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!Shinpei Ohtani
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented featuretamtam180
 
ヒカルのGo 資料 Webアプリケーションの作り方
ヒカルのGo 資料 Webアプリケーションの作り方ヒカルのGo 資料 Webアプリケーションの作り方
ヒカルのGo 資料 Webアプリケーションの作り方Yosuke Furukawa
 
20170527 inside .NET Core on Linux
20170527 inside .NET Core on Linux20170527 inside .NET Core on Linux
20170527 inside .NET Core on LinuxTakayoshi Tanaka
 
HTTPを理解する
HTTPを理解するHTTPを理解する
HTTPを理解するIIJ
 
第9回rest勉強会 ダウンロード・アップロード編
第9回rest勉強会 ダウンロード・アップロード編第9回rest勉強会 ダウンロード・アップロード編
第9回rest勉強会 ダウンロード・アップロード編ksimoji
 

Semelhante a Node の HTTP/2.0 モジュール iij-http2 の実装苦労話 (20)

WebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocketWebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocket
 
HttpとTelnetをつなぐ何か
HttpとTelnetをつなぐ何かHttpとTelnetをつなぐ何か
HttpとTelnetをつなぐ何か
 
HTTPとサーブレット
HTTPとサーブレットHTTPとサーブレット
HTTPとサーブレット
 
20161017 みんてくapacheでhttp/2
20161017 みんてくapacheでhttp/220161017 みんてくapacheでhttp/2
20161017 みんてくapacheでhttp/2
 
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作るgumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
 
後期02
後期02後期02
後期02
 
hubotで快適BOT生活
hubotで快適BOT生活 hubotで快適BOT生活
hubotで快適BOT生活
 
IETF91 Honolulu httpbis WG Report
IETF91 Honolulu httpbis WG ReportIETF91 Honolulu httpbis WG Report
IETF91 Honolulu httpbis WG Report
 
Html5, Web Applications 2
Html5, Web Applications 2Html5, Web Applications 2
Html5, Web Applications 2
 
ハイパフォーマンスブラウザネットワーキング 12章「HTTP 2.0」と現在の仕様
ハイパフォーマンスブラウザネットワーキング 12章「HTTP 2.0」と現在の仕様ハイパフォーマンスブラウザネットワーキング 12章「HTTP 2.0」と現在の仕様
ハイパフォーマンスブラウザネットワーキング 12章「HTTP 2.0」と現在の仕様
 
Rtshell入門
Rtshell入門Rtshell入門
Rtshell入門
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
 
Cms on SELinux
Cms on SELinuxCms on SELinux
Cms on SELinux
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented feature
 
ヒカルのGo 資料 Webアプリケーションの作り方
ヒカルのGo 資料 Webアプリケーションの作り方ヒカルのGo 資料 Webアプリケーションの作り方
ヒカルのGo 資料 Webアプリケーションの作り方
 
20170527 inside .NET Core on Linux
20170527 inside .NET Core on Linux20170527 inside .NET Core on Linux
20170527 inside .NET Core on Linux
 
HTTPを理解する
HTTPを理解するHTTPを理解する
HTTPを理解する
 
第9回rest勉強会 ダウンロード・アップロード編
第9回rest勉強会 ダウンロード・アップロード編第9回rest勉強会 ダウンロード・アップロード編
第9回rest勉強会 ダウンロード・アップロード編
 
HTTP/2, QUIC入門
HTTP/2, QUIC入門HTTP/2, QUIC入門
HTTP/2, QUIC入門
 

Node の HTTP/2.0 モジュール iij-http2 の実装苦労話