読者です 読者をやめる 読者になる 読者になる

HTTP

hxxp URIスキームの仕様化

追記 20170510 draft-01 より、hxxpsも予約されました 「The "hxxp" and "hxxps" URI Schemes」 hxxpの背景 hxxp URIを定義する「The "hxxp" URI Scheme」という仕様が提案されています。hxxp://... は、例えばセキュリティの話をする際にURLがリンクとして…

Cookieの仕様改定版、RFC6265bisの議論

Cookieの仕様と拡張仕様 HTTPのCookieの仕様は RFC 6265 - HTTP State Management Mechanism で定義されております。2015年頃より、IETFのHTTPbisワーキンググループではCookieのセキュリティを向上させる目的で拡張仕様が3つほど議論されていました。 Cooki…

WebサーバとのコネクションでDNS通信もする拡張仕様

追記 20170510 この提案仕様は、draft01でauthor自ら廃案とされました。 昨日の「DNS over QUICの提案仕様が出た」引き続きDNS関連の記事 DNSとHTTP 近年注目されている、"DNS over HTTP"は例えば「DNS-over-HTTPS」としてGoogleが提供していたり、IETF97で…

varnishtestのHTTP/2対応 アップデート

これは、http2 Advent Calendar 2016の10日目の記事です。 今年の頭に書いた「varnishtestがHTTP2対応して超便利!」で紹介しましたvarnishtestのHTTP/2対応ですが、シンタックスの一部変更で当時のサンプルが使えなくなっていたのでアップデートについて軽…

Apache mod_http2 で 103 EarlyHints を試す

これは、http2 Advent Calendar 2016の5日目の記事です。 20161208 今回はtoy serverを使用しましたが、103 EarlyHintsを送信できるNginxモジュールを書きました 103 EarlyHintsを送信するNginxモジュール書いた 103 Early Hints 103 Early Hintsは、@kazuho…

CloudFlareの提案するHTTP/2の圧縮辞書拡張

IETFのHTTPbis wgでCloudFlareの方より「Compression Dictionaries for HTTP/2」(URL)という仕様が提案されている。 これは、Content-Encodingヘッダで指定される圧縮アルゴリズム向けの初期ウィンドウに使用される辞書データを事前に送る拡張を定義する。 C…

HTTP/2のデバック用情報エンドポイントの仕様

HTTP/2 Implementation Debug State 「HTTP/2 Implementation Debug State」というHTTP/2用のデバッグ情報を表示するエンドポイントの仕様が、IETFに提出されています。https://tools.ietf.org/html/draft-benfield-http2-debug-state-01 サーバの「.well-kn…

CloudFlareのNGINX HTTP/2 + SPDY両対応するパッチを試す

CloudFlareから、「Open sourcing our NGINX HTTP/2 + SPDY code」という記事にて、NginxをHTTP2とSPDYに両方に対応するパッチが公開されました。 NginxはHTTP2対応に伴い、SPDYのコードは削除されました。しかし、一部古いブラウザはSPDYまでしか対応してな…

HTTP/2における証明書に基づいたリアクティブなクライアント認証 その2

この記事は Secondary Certificate Authentication in HTTP/2 という仕様にマージされました 「HTTP/2における証明書に基づいたリアクティブなクライアント認証 その1」(2015-10-23) 「Reactive Certificate-Based Client Authentication in HTTP/2」 の dr…

apache2 mod_http2のhttp2-status

HTTP/2のデバック用情報エンドポイントの仕様 http://d.hatena.ne.jp/ASnoKaze/20160907/1473180491 HTTP/2デバッグ用エンドポイントの仕様が議論されており、mod-h2のhttp2-statusの出力もそれに準拠するようになりました(2016/09/07) mod_http2の1.2.0で新…

varnishtestがHTTP2対応して超便利!

既に記法が変わっています。サンプルコードはそのままでは使用できません。リポジトリ内のテストコードを参考にしてください (2016/04/04) 20161210 「varnishtestのHTTP/2対応 アップデート」にて、更新項目について書きました Varnish-Cacheのvarnishtest…

Apache 2.4.18 のHTTP2 ServerPushを試す

Apache 2.4.18より HTTP/2のサーバプッシュを試す。 http://ftp.riken.jp/net/apache//httpd/CHANGES_2.4.18 ビルド 「Apache 2.4.17のmod_http2試す」を参考に、環境を整えておきます。 wget http://ftp.riken.jp/net/apache//httpd/httpd-2.4.18.tar.gz ta…

HTTP/2 GZIPPED_DATA フレームとは

このエントリは、 http2 advent calendar の 8 日目の穴埋めです。 HTTP/2にGZIPPED_DATAフレームという拡張フレームを追加する提案が提出されている。フレームの追加に伴って、エラーコード・Settingsも追加される。 HTTP/2 Gzipped Data https://tools.iet…

Chrome デベロッパーツールに表示される Priority と HTTP/2

このエントリは、 http2 advent calendar の 5 日目です。 ここまで豪華執筆陣による記事が続いてるところに恐縮です。 (あとChromeのコードへの理解が足りず、間違いがあるかもしれません。ご注意下さい) Chrome デベロッパーツールのPriority 先日、Chro…

HTTP/2に「ORIGINフレーム」を追加する拡張仕様

HTTP/2では、一定の条件が満たされれば異なるオリジンとの通信を一つのコネクション上で行うことが出来ます。サーバは、クライアントが要求したオリジンに対する権威がない場合は421 (Misdirected Request)を返します。 (条件等は、rfc7540#section-9.1参照…

サーバプッシュのための「Accept-Push-Policyヘッダ」とは

HTTP/2ではサーバプッシュと呼ばれる機能があります。サーバはクライアントからのリクエストを受信しなくても先んじてレスポンスを返すことができる仕組みになります。 たとえば、HTTP/1.1においてリソースをインライン化していた部分をサーバプッシュとして…

HTTP/2における証明書に基づいたリアクティブなクライアント認証 その1

draft 01で大きくな変更が加えられました。証明書を要求するフローは以下より大きく変わりました。ご注意ください (2016/01/27) 「HTTP/2における証明書に基づいたリアクティブなクライアント認証 その2」でdraft02について書きました(2016/05/04) HTTP/2に…

Apache 2.4.17のmod_http2試す

mod_h2が Apache2.4.17でデフォルトで組み込まれたのでビルドして試してみる。 今回はopenssl1.0.2を使いたいのでubuntu15.10を使います。 以前のubuntuだとうまくいかないかもしれない nghttp2のインストール nghttp2をインストールしておく必要があります …

Nginx 1.9.5 でHTTP2を試そう!

opensslのバージョンに注意してください。NPNやALPNを使うのでバージョンを確認してください(追記) 本日公開されたNginx 1.9.5でHTTP2に対応しました!早速試しましょう!! ( http://nginx.org/en/CHANGES ) 今回もUbuntu14.04 (別のOSでも、パッケージor…

Nginxのhttp2_streams_index_sizeパラメータについて

Nginxのhttp2の設定項目にhttp2_streams_index_sizeがある。直感的には分かりにくかったのでちょっと調べる。 そのほかのパラメータは過去に書いたとおり、「Nginx 1.9.4 HTTP/2パッチのconf パラメータ設定項目」 streams_index配列 各ストリームに関する情…

Nginx HTTP/2の受信フレーム集計

こんな感じで、Nginxの受信フレームをグラフ化する。 デバッグログからFluentdでMackerel APIを叩く感じ。 ビルド NginxのHTTP/2パッチがTrunkに取り込まれたので、改めてビルド。 wget http://hg.nginx.org/nginx/archive/tip.tar.gz tar zxvf ./tip.tar.gz…

Nginx 1.9.4 HTTP/2 のconf パラメータ設定項目

Nginx 1.9.5でHTTP2がサポートされました。パラメータ自体は本記事から変わりません。(2015/09/23) http2_max_field_sizeの挙動が変わったようです (2015/11/12) http://hg.nginx.org/nginx/rev/1f26bf65b1bc Nginx 1.9.4 + patch.http2-v5_1.9.4.txtで使え…

HAProxyでHTTP/2のTLS終端する際のALPN設定

HAProxy 1.5でALPNに対応していた。 HTTP/2 over TLSの通信を、HAProxyでTLSを終端することで、TLS対応を行わないであろうVarnishなどでもh2c接続が可能となる。 (HAProxy自体のhttp2対応はまだ先) 今回はバックエンドにNginxをh2cでリッスンさせて試してみ…

nginxでアクセスログにhttp2の通信か出力する

「nginxでアクセスログにspdyのバージョンを出す」の時と同様にlog_formatで出力できる。 nginx 1.9.3 + patch.http2-v2で試す 環境構築は「nginx1.9.3 HTTP/2 パッチを試す」 設定 http { log_format main '$remote_addr - $remote_user [$time_local] "$re…

ssl_prefer_server_ciphersを有効にしたらERR_SPDY_INADEQUATE_TRANSPORT_SECURITYが出るようになった。

ubuntu14.04で、Nginx1.9.3 + patch.http2-v2 + openssl1.0.2d 環境構築は「nginx1.9.3 HTTP/2 パッチを試す」 server { listen 443 ssl http2 ; ssl_prefer_server_ciphers on; #★offにすると繋がる server_name localhost; ssl_certificate xxx.crt; ssl_c…

nginx1.9.3 HTTP/2 パッチを読むメモ(day1

patch v2が公開されました、すでに内容は古くなっています(2015/08/16) 前回の「nginx1.9.3 HTTP/2 パッチを試す」に引き続き、nginxのhttp/2パッチを読んでみる。 ただし、nginx初心者なのでnginx的な部分については全然理解していない...基本的には自分用…

nginx1.9.3 HTTP/2 パッチを試す

1.9.5でHTTP2がサポートされました。Nginx 1.9.5 でHTTP2を試そう!(2015/0923) nginx 1.9.3のHTTP/2アルファパッチが公開されました。 https://www.nginx.com/blog/early-alpha-patch-http2/ 基本的には書いてあるとおりにヤレば簡単に動作します。 ubuntu1…

MPEG‐DASHにおけるHTTP/2の使用、DASH-PUSHの提案

MPEG-DASHとHTTP/2 MPEG-DASH(Dynamic Adaptive Streaming over HTTP)と呼ばれるHTTP上で環境に合わせてビットレートを変更しながらストリーミングできる仕組みがある。このMPEG-DASHにHTTP/2を使うという話がいくつか出てきている。 たとえば、BBCの「Adapt…

mod_h2を使って、ApacheをHTTP/2対応する

mod_h2はapache2.5 devに組み込まれました。 以下の手順では正しくビルドできなくなりました。ご注意下さい。 (09/04追記) mod_h2はapache2.4.17に組み込まれました そちらでのビルド手順を、後日記事を書こうと思います (10/14追記) http://www.apache.org/…

HTTP/2 Connection Prefaceの理由と経緯

HTTP/2 Connection Prefaceとは HTTP/2では通信の最初に「コネクションプリフェイス(Connection Preface)」というメッセージを送信します。 クライアント側は「クライアントコネクションプリフェイス」と呼ばれる以下のメッセージを送信します。 0x505249202…

h2-ping - HTTP/2のPINGフレームを送り続けるだけのスクリプト

h2-ping http-2 gemの使い方をお勉強するために、HTTP/2のPINGフレームを送り続けるだけのスクリプトを書きました。 機能も出力もお粗末ですが、http-2 gemのexampleが非常に分かりやすく、かつ便利なので殆どコピペしただけで出来てしまいました。https://g…

HTTP/2における、ストリーム並列数別パケットロス率が与える影響測定

この記事は HTTP2 Advent Calendar の 23 日目の記事です。 本記事では、個人的興味からHTTP/2の並列数別のパケットロス率影響度を測定した。 余談ではあるが、 現在の仕様では "HTTP2.0" ではなく "HTTP/2" もしくは "HTTP2" としている。 背景 HTTP/2ではH…

WiresharkでHTTP/2をパケットキャプチャする

Wireshark で HTTP/2 over TLS の通信をダンプする方法 https://gist.github.com/summerwind/a482dd1f8e9887d26199 HTTP/2の鍵交換はPFSなので、上記も参考にして下さい(20151030追記) この記事は HTTP2 Advent Calendar の 9 日目の投稿です。 初めましてゆ…

Windows Server Technical PreviewのIISがHTTP/2に対応してた

Windows 10とWindows ServerのTechnical Preview版が公開されました。 Windows 10のInternet ExplorerがHTTP/2(h2-14)に対応していましたが、Windows ServerのIISもHTTP/2に対応していました。 実際に試してみましょう。 Windows Server を起動する TechNet …

HTTP/2 リンク集

定期的に更新します 公式 IETF WGページ:draft一覧、憲章など HTTP/2リポジトリ 仕様群:編集中の仕様群 実装リスト 運用ガイド FAQ(日本語訳) WGリポジトリ ミーティング議事録 関連仕様:alt-svcとhttp2-encryption ML httpbis http-devops webpush 関連I…

HTTP/2 draft 13が出ました

既にHTTP/2の実装は多く存在し、実際に試すことが出来るようになってきましたが、6/17に新しいドラフトであるdraft13が出ました。(nghttp2はすでに対応済みだそうです) githubのリポジトリ上では「Adding -lc suffix and last call note」というコミットが行…

HTTP/2の運用に関する考察のI-D

5月末に、「HTTP/2: Operational Considerations for Servers」というI-Dが公開された。 サーバでHTTP/2対応する際の、パフォーマンスや運用性に関する注意点などが述べられている。 主な項目は以下の通りである TCPの設定 TLSの設定 ロードバランスとフェイ…

HTTP2に導入された dependency-based stream prioritization

HTTP2 draft11 4/3にHTTP2のdraft11が公開された。 ALTSVCフレームの追加や、"connection header"から"connection preface"への名称変更などが含まれている。 なかでもストリームのpriorityについて大きな変更が入った。 HTTP/2のpriority HTTP2ではクライア…

SPDY/3.2とか

SPDYの脆弱性 SSLで暗号化+圧縮を行こなっている通信に対して、Cookie等の値を解析するCRIME攻撃やBREACH攻撃が知られている。 幾つかのサイトで解説記事が書かれている。 App Engine セキュリティー情報 - BREACH attack について BREACH攻撃(てきとうなメ…

h2loadを用いてSPDYの負荷テストをする

h2loadはtatsuhiro_t氏によって公開されている、HTTP2・SPDY用のベンチマークツールである。 非常に有用なツールなので、実際に試してみた。 試した環境はUbuntu 13.10である。 必要な物をインストールする ビルドに必要なパッケージをインストールする。 su…

HTTP2でWebがどうなるか9つのこと(自分用メモ

宣伝 2015/11 追記 ソフトウェアデザイン 11月号に HTTP/2の特集記事を書かせていただきました。より詳しく書きましたので、本記事より参考になるかと思います。 http://www.amazon.co.jp/dp/B01494YKUI HTTP2は2014年4月のWG Last Callに向けて、仕様策定が…

WiresharkがHTTP2に対応してたので試してみた

この記事は古くなっています。こちらを御覧ください WiresharkでHTTP/2をパケットキャプチャする Wiresharkがhttp2-draft09に対応していたので、早速パケットをキャプチャしてみた。 Wireshark開発版ではdraft04までの対応だったので、ソースコードを落とし…

http2を簡単に試せるように、vagrantfile書いた

準備 virtualboxとvagrantがインストールされてない場合は、公式サイトからダウンロードします。https://www.virtualbox.org/wiki/Downloads http://www.vagrantup.com/downloads.html VMの起動 GitHubから落としてきます $ git clone https://github.com/fl…

HTTP2.0ミニハッカソンに参加してきました

12月15日、VOYAGE GROUP様の会議室で http2.0 ミニハッカソン #2が行われました。恐れ多くも参加してきましたが、端っこのほうでひっそりしていました。 議論は最新仕様についての知識共有と、実装方法の話がメインだったかと思います。 よくプロトコル実装…

HTTP2.0 draft04が公開されました + その他

7月8日に5つめとなるHTTP2.0 draft 04が公開されました。 http://tools.ietf.org/html/draft-ietf-httpbis-http2-04 今までの非常にざっくりした流れはこのようになっています。 仕様の中でも触れられている通り、出すとしていたimplementation draftと呼ば…

HTTP2.0 draft03が公開されました + その他

HTTP2.0 draft03 5月29日にHTTP2.0のdraft03が公開されました。 4月3日に公開されたdraft02より何点か変更が加わっています。 HEADERSフレームのフラグに、「CONTINUES」を追加。情報が継続することを示す "セッション"を"コネクション"に変更(クッキーのよ…

「High Perfomance Browser Networking」の12章 HTTP2.0 を読んで

High Perfomance Browser Networking オライリーのサイトで、「High Perfomance Browser Networking」のEarly Release版が無料で読める(URL)。 ネットワークの観点で、Webのパフォーマンスについて書かれた本である。 その12章にHTTP2.0の話が書かれているの…

HTTP2.0 draft02が公開された

4月3日にHTTP2.0のdraft02が公開された(URL)draft01より多くの変更点が加えられており、前回の記事「HTTP2.0のdraft01からの変更点について」に加え以下の変更が行われた PUSH_PROMISEフレームの変更 「IANA Considerations」の項目の追加 フレームヘッダの…

HTTP2.0のdraft01からの変更点について

HTTP2.0の仕様は現在githubで編集されており,誰でも最新版を閲覧できる。(URL) SPDY draft03のコピーから開始されたHTTP2.0の策定だが、最新版ではHTTP2.0 draft01(URL)より何点か変更されている。(現在の最新版"March 29, 2013"で説明します。) 全てを追い…

HTTP2.0におけるヘッダ圧縮 Binary Optimized Header Encoding

この記事は古いです。 HTTP2は、HPACKというヘッダ圧縮方式が採用されています。(2016/06/24) HTTP2.0におけるヘッダ圧縮 HTTP2.0の大きなテーマとしてヘッダ圧縮が挙げられる。HTTP1のヘッダには非効率な点が二つる 同一のヘッダを何回も送信する(User-Age…