SlideShare a Scribd company logo
1 of 37
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Recent Advances in HTTP,
controlling them using ruby
DeNA Co., Ltd.
Kazuho Oku
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Who am I
๏ฎ lead developer of H2O HTTP/2 server
โƒ one of the most sophisticated HTTP/2 impl.
โƒ initial public release: 2014/10 (license: MITL)
โƒ used by Fastly, etc.
๏ฎ author of Cache-Digests Internet Draft
โƒ considered as an essential work for HTTP/2 push
๏ฎ works at DeNA Co., Ltd.
๏ฎ also developer of: Q4M, Starlet, pisojson, ...
2Recend Advances in HTTP2, controlling them using ruby
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Current State of HTTP
3Recend Advances in HTTP2, controlling them using ruby
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Why use HTTP/2?
๏ฎ latency has become the bottleneck of the Web
๏ฎ HTTP/2 to conceal latency by raising concurrency
โƒ 6 concurrent requests in HTTP/1
โƒ ~100 in HTTP/2
4Recend Advances in HTTP2, controlling them using ruby
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Current state of HTTP
๏ฎ HTTP/2 (RFC 7540) released on May 2015
1: https://github.com/HTTPWorkshop/workshop2016/blob/master/talks/http2-review-data.pdf
5Recend Advances in HTTP2, controlling them using ruby
45
28
37
41
18
31
0% 20% 40% 60% 80% 100%
2015/7
2016/7
# of transactions by Firefox1
HTTP HTTPS (H1) HTTPS (H2)
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Key features of HTTP/2
๏ฎ header compression (HPACK)
๏ฎ multiplexing & prioritization
๏ฎ push
6Recend Advances in HTTP2, controlling them using ruby
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Header compression
๏ฎ working well
๏ฎ according to Mozilla1:
โƒ median โ€“ 90% reduction
โƒ 80th percentile โ€“ 75% reduction
โƒ 90th โ€“ 10% reduction
7Recend Advances in HTTP2, controlling them using ruby
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Multiplexing & prioritization
๏ฎ HTTP/2 multiplexes responses into one TCP conn.
โƒ client gives hint for prioritization
โƒ server uses the hint to schedule the responses
๏ฎ but some client-server pairs donโ€™t do it right
8Recend Advances in HTTP2, controlling them using ruby
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Push
๏ฎ positive reports:
โƒ โ€œ20-30% speedup on page render timeโ€2
๏ฎ negative comments:
โƒ many unnecessary pushes (47% are reset2)
โƒ increased render time in anti-patterns3
โƒ โ€œconsider preload instead of pushโ€3
๏ฎ push from edge
โƒ how?
2: https://github.com/HTTPWorkshop/workshop2016/blob/master/talks/server-push.pdf
3: https://docs.google.com/document/d/1K0NykTXBbbbTlv60t5MyJvXjqKGsCVNYHyLEXIxYMv0/edit
9Recend Advances in HTTP2, controlling them using ruby
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Fixes?
10Recend Advances in HTTP2, controlling them using ruby
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Flow of an ideal HTTP transaction
๏ฎ respond to high-priority requests
immediately
๏ฎ send resources in right order
โƒ first send CSS/JS
โƒ then send the HTML
โƒ then send the images
๏ฎ push only the resources not cached
by the client
11Recend Advances in HTTP2, controlling them using ruby
client server
1RTT
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
The reality
๏ฎ respond to high-priority requests
immediately
โƒ blocked by unsent data in TCP
๏ฎ send resources in right order
โƒ some browsers donโ€™t specify
priority, some servers fail to
respect priority
โƒ issues caused by hidden resources
๏ฎ push only the resources not cached
by the client
โƒ how?
12Recend Advances in HTTP2, controlling them using ruby
client server
1RTT
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
TCP head-of-line blocking
๏ฎ head-of-line (HoL) blocking:
โƒ high-priority data blocked by preceding data in
flight
๏ฎ TCP HoL blocking:
โƒ data in TCP send buffer blocks following data of
higher priority
13Recend Advances in HTTP2, controlling them using ruby
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
TCP head-of-line blocking
14Recend Advances in HTTP2, controlling them using ruby
๏ฎ typical H2 server writes much more than that can be
sent immediately
โƒ unsent data in TCP send buffer (and TLS buffer)
HOL-blocks following data
TCP send buffer
CWND
unacked poll threshold
TLS buf.
TLS Records
sent immediately not immediately sent
HTTP/2 frames
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
TCP head-of-line blocking: the solution
๏ฎ write only what can be sent immediately
โƒ obtain CWND and unacked size using TCP_INFO
๏ฎ adjust poll threshold to delay write notification until
TCP becomes ready to send some data immediately
15Recend Advances in HTTP2, controlling them using ruby
CWND
unacked poll threshold
TLS Records
sent immediately not immediately sent
HTTP/2 frames
TCP send buffer
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
TCP head-of-line blocking: benchmark 1
16Recend Advances in HTTP2, controlling them using ruby
๏ฎ conditions:
โƒ server in Ireland, client in Tokyo (RTT 250ms)
โƒ load tiny js at the top of a large HTML
๏ฎ result: delay decreased from 511ms to 250ms
โƒ i.e. JS fetch latency was 2RTT, became 1 RTT
โ€ข similar results in other environments
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
TCP head-of-line blocking: benchmark 2
๏ฎ using same data as previous
๏ฎ server: Sakura VPS (Ishikari DC)
17Recend Advances in HTTP2, controlling them using ruby
0
50
100
150
200
250
300
HTML JS
milliseconds
downloading HTML (and JS within)
RTT ~25ms
master latopt
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
HTTP/2 prioritization
18Recend Advances in HTTP2, controlling them using ruby
Root
Leader G
Follower G
weight: 1
HTML
weight: 32
Image
weight: 22
Image
weight: 22
Image
weight: 22
CSS
weight: 32
CSS
weight: 32
๏ฎ hybrid approach using weights and chaining
โƒ servers are expected to obey to the priority
specified by the clients
๏ฎ Firefoxโ€™s prioritization graph is shown below
JS
weight: 32
JS
weight: 32
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
HTTP/2 prioritization
๏ฎ some web browsers fail to specify priority
โƒ Safari, Blink
โƒ older versions of Chrome also had issues
โƒ server-side countermeasures required
19Recend Advances in HTTP2, controlling them using ruby
Root
HTML
weight: 16
CSS
weight: 16
JS
weight: 16
Image
weight: 16
Image
weight: 16
Image
weight: 16
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
HTTP/2 prioritization: the solution
๏ฎ bandwidth distribution on server-side:
โƒ use Weighted Fair Queuing (WFQ) or Deficit
Round Robin (DRR)
โƒ some servers do it right:
โ€ข nghttp2 (and Apache) implements WFQ in O(log N)
โ€ข H2O approximates WFQ in O(1)
๏ฎ detect dumb clients and fallback to server-driven
prioritization
โƒ H2O reprioritizes CSS, JS for clients that do not
use priority chains
20Recend Advances in HTTP2, controlling them using ruby
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
HTTP/2 prioritization: benchmark
๏ฎ differences between the times spent until first-paint
(red bar)
21Recend Advances in HTTP2, controlling them using ruby
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Hidden resource
๏ฎ hidden resource: a resource
specified in CSS (@import) or
JavaScript
โƒ was anti-pattern in HTTP/1
โƒ anti-pattern in HTTP/2 as well
๏ฎ solution:
โƒ avoid use of hidden resources
that block rendering (e.g. CSS,
JS)
โƒ or, specify them using link:
rel=preload
22Recend Advances in HTTP2, controlling them using ruby
client server
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Push
๏ฎ three use-cases:
โƒ prioritization
โƒ push while processing request
โƒ push from edge
23Recend Advances in HTTP2, controlling them using ruby
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Pushing for prioritization
24Recend Advances in HTTP2, controlling them using ruby
client server
GET /
GET
/style.css
HTTP/2 200 OK
<html>
<link
rel=style.css...
HTTP/2 200 OK
body: ...
#title: ...
1. send CSS, JS first
2. then send HTML
(can be rendered
progressively)
without push
client server
GET /
GET /style.css HTTP/2
HTTP/2 200 OK
body: ...
#title: ...
with push
HTTP/2 200 OK
<html>
<link rel=style.css ...
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Push while processing request
๏ฎ web applications involving DB access, etc.
25Recend Advances in HTTP2, controlling them using ruby
req.
processrequest
push-asset
HTML
push-asset
push-asset
push-asset
req.
processrequest
asset
HTML
asset
asset
asset
req.
450ms(5RTT+processingme)
250ms(1RTT+processingme)
without push with push
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Push from edge
๏ฎ CDNsโ€™ use-case
โƒ utilize the conn. while waiting for app. response
26Recend Advances in HTTP2, controlling them using ruby
req.
push-asset
HTML
push-asset
push-asset
push-asset
client edge server (CDN) app. server
req.
HTML
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
How to push
๏ฎ H2 server may push preloaded links
โƒ e.g. Link: </style.css>; rel=preload
โƒ H2 server may push preloaded links
โƒ recognized by Apache, H2O, nghttp2
โƒ patch exists for Nginx
๏ฎ use nopush attribute to opt-out
โƒ e.g. Link: </dontpush.jpg>; rel=preload; nopush
๏ฎ note: use of preload as a push indicator is upon the
process of standardization at W3C
27Recend Advances in HTTP2, controlling them using ruby
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
How to push while processing request
28Recend Advances in HTTP2, controlling them using ruby
๏ฎ send Link: rel=preload as interim response
โƒ application sends 100 then processes the request
๏ฎ supported in H2O 2.1
GET / HTTP/1.1
Host: example.com
HTTP/1.1 100 Continue
Link: </style.css>; rel=preload
HTTP/1.1 200 OK
Content-Type: text/html
<!DOCTYPE HTML>
...
HTTP/2 server app. server Web app.
GET /
100 Continue
Link: โ€ฆ
GET /
200 OK
200 OK
processrequest
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
How to push while processing request
๏ฎ configure your H2 server
โƒ in case of H2O:
mruby.handler: |
Proc.new do |env|
push_paths = []
if /(/|.html)$/.match(env["PATH_INFO"])
push_paths << "/style.cssโ€
...
end
[399, push_paths.empty? ? {} : {"link" =>
push_paths.map{|p| "<#{p}>; rel=preload"}.join("n")}, []]
end
file.dir: /path/to/doc-root
29Recend Advances in HTTP2, controlling them using ruby
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
BTW, you can do more by using mruby
๏ฎ HTTP authentication
mruby.handler: |
require "htpasswd.rb"
Htpasswd.new("/path/to/.htpasswd", "realm-name")
๏ฎ DoS mitigation
mruby.handler: |
require "dos_detector.rb"
DoSDetector.new({
:strategy => DoSDetector.CountingStrategy.new({
:period => 10,
:threshold => 100,
:ban_period => 300,
}),
})
30Recend Advances in HTTP2, controlling them using ruby
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
... and more
๏ฎ Access Control
mruby.handler: |
acl {
allow { addr == "127.0.0.1" }
deny {
user_agent.match(/curl/i) && !addr.start_with?("192.168.")
}
respond(503, {}, ["Service Unavailable"]) {
addr == malicious_ip
}
redirect("https://example.com/", 301) {
path =~ /moved/
}
use Htpasswd.new("/path/to/.htpasswd", "realm") {
path.start_with?("/admin")
}
}
31Recend Advances in HTTP2, controlling them using ruby
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
... and more
๏ฎ fast IPv4 address matching using Trie4
mruby.handler: |
require "trie_addr.rb"
trie = TrieAddr.new.add([
"192.168.0.0/16", "172.16.0.0/12", ...]
)
acl {
allow { trie.match?(addr) }
deny
}
4: http://dsas.blog.klab.org/archives/51293338.html
32Recend Advances in HTTP2, controlling them using ruby
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
How to push from edge
๏ฎ depends on CDN
โƒ some CDNs may use RUM-based approach
โƒ others may provide DSL
โ€ข GCP provides http2-push-manifest (JSON-based)
โƒ though cannot be used for pushing from edge
โƒ anybody using (m)ruby on edge?
33Recend Advances in HTTP2, controlling them using ruby
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Push vs. cache
๏ฎ why would you ever push cached resources?
โƒ itโ€™s waste of bandwidth (and time)
๏ฎ several ways to avoid pushing cached resources
โƒ cookie-based
โ€ข supported by H2O
โƒ cache-digest
โ€ข supported by Apache, H2O
โ€ข needs browser support or ServiceWorker script
โ€ข standardization in process at IETF
โƒ implement your own
34Recend Advances in HTTP2, controlling them using ruby
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Avoiding negative effect caused by push
๏ฎ donโ€™t push unless your mechanism is cache-aware
๏ฎ only push resources that block rendering
โƒ reason:
โ€ข H2 endpoints have difficulty in distributing bandwidth
bet. pushed and pulled responses
โ€ข negative effect caused by HoL blocking, prioritization
and hidden resources becomes more apparent with
push
๏ฎ above rules donโ€™t apply to the tiny pushes
โƒ i.e. those used as a replacement for inlining (i.e.
<img src=โ€œdata:...โ€>)
35Recend Advances in HTTP2, controlling them using ruby
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Summary
36Recend Advances in HTTP2, controlling them using ruby
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Summary
๏ฎ HTTP/2 has become popular
๏ฎ the effectiveness varies between implementations
โƒ HoL-blocking avoidance, prioritization, cache-
aware push, ...
โƒ upcoming specs (e.g. TLS/1.3, QUIC) may cause
even more difference
โƒ careful evaluation of servers / CDNs is important
๏ฎ H2O is the leader in HTTP/2 server performance
โƒ and can be configured using mruby
37Recend Advances in HTTP2, controlling them using ruby

More Related Content

What's hot

Promise of Push (HTTP/2 Web Performance)
Promise of Push (HTTP/2 Web Performance)Promise of Push (HTTP/2 Web Performance)
Promise of Push (HTTP/2 Web Performance)
Colin Bendell
ย 

What's hot (19)

Promise of Push (HTTP/2 Web Performance)
Promise of Push (HTTP/2 Web Performance)Promise of Push (HTTP/2 Web Performance)
Promise of Push (HTTP/2 Web Performance)
ย 
HTTP2๏ผšๆ–ฐ็š„ๆœบ้‡ไธŽๆŒ‘ๆˆ˜
HTTP2๏ผšๆ–ฐ็š„ๆœบ้‡ไธŽๆŒ‘ๆˆ˜HTTP2๏ผšๆ–ฐ็š„ๆœบ้‡ไธŽๆŒ‘ๆˆ˜
HTTP2๏ผšๆ–ฐ็š„ๆœบ้‡ไธŽๆŒ‘ๆˆ˜
ย 
HTTP/2: What no one is telling you
HTTP/2: What no one is telling youHTTP/2: What no one is telling you
HTTP/2: What no one is telling you
ย 
HTTP/2 for Developers
HTTP/2 for DevelopersHTTP/2 for Developers
HTTP/2 for Developers
ย 
Grpc present
Grpc presentGrpc present
Grpc present
ย 
HTTP2 and gRPC
HTTP2 and gRPCHTTP2 and gRPC
HTTP2 and gRPC
ย 
Nginx, PHP, Apache and Spelix
Nginx, PHP, Apache and SpelixNginx, PHP, Apache and Spelix
Nginx, PHP, Apache and Spelix
ย 
Introduction to HTTP/2
Introduction to HTTP/2Introduction to HTTP/2
Introduction to HTTP/2
ย 
HTTP/2 Introduction
HTTP/2 IntroductionHTTP/2 Introduction
HTTP/2 Introduction
ย 
Http2 right now
Http2 right nowHttp2 right now
Http2 right now
ย 
RIPE 71 and IETF 94 reports webinar
RIPE 71 and IETF 94 reports webinarRIPE 71 and IETF 94 reports webinar
RIPE 71 and IETF 94 reports webinar
ย 
Load Balancing with HAproxy
Load Balancing with HAproxyLoad Balancing with HAproxy
Load Balancing with HAproxy
ย 
Http2
Http2Http2
Http2
ย 
HTTP/2 Update - FOSDEM 2016
HTTP/2 Update - FOSDEM 2016HTTP/2 Update - FOSDEM 2016
HTTP/2 Update - FOSDEM 2016
ย 
How To Set Up SQL Load Balancing with HAProxy - Slides
How To Set Up SQL Load Balancing with HAProxy - SlidesHow To Set Up SQL Load Balancing with HAProxy - Slides
How To Set Up SQL Load Balancing with HAProxy - Slides
ย 
Are we really ready to turn off IPv4?
Are we really ready to turn off IPv4?Are we really ready to turn off IPv4?
Are we really ready to turn off IPv4?
ย 
Revisiting HTTP/2
Revisiting HTTP/2Revisiting HTTP/2
Revisiting HTTP/2
ย 
HAProxy scale out using open source
HAProxy scale out using open sourceHAProxy scale out using open source
HAProxy scale out using open source
ย 
HTTP/2, HTTP/3 and SSL/TLS State of the Art in Our Servers
HTTP/2, HTTP/3 and SSL/TLS State of the Art in Our ServersHTTP/2, HTTP/3 and SSL/TLS State of the Art in Our Servers
HTTP/2, HTTP/3 and SSL/TLS State of the Art in Our Servers
ย 

Similar to Recent Advances in HTTP, controlling them using ruby

ะกั‚ะตะบ Linux HTTPS/TCP/IP ะดะปั ะทะฐั‰ะธั‚ั‹ ะพั‚ HTTP-DDoS-ะฐั‚ะฐะบ
ะกั‚ะตะบ Linux HTTPS/TCP/IP ะดะปั ะทะฐั‰ะธั‚ั‹ ะพั‚ HTTP-DDoS-ะฐั‚ะฐะบะกั‚ะตะบ Linux HTTPS/TCP/IP ะดะปั ะทะฐั‰ะธั‚ั‹ ะพั‚ HTTP-DDoS-ะฐั‚ะฐะบ
ะกั‚ะตะบ Linux HTTPS/TCP/IP ะดะปั ะทะฐั‰ะธั‚ั‹ ะพั‚ HTTP-DDoS-ะฐั‚ะฐะบ
Positive Hack Days
ย 

Similar to Recent Advances in HTTP, controlling them using ruby (20)

HTTP/2 and QUICK protocols. Optimizing the Web stack for HTTP/2 era
HTTP/2 and QUICK protocols. Optimizing the Web stack for HTTP/2 eraHTTP/2 and QUICK protocols. Optimizing the Web stack for HTTP/2 era
HTTP/2 and QUICK protocols. Optimizing the Web stack for HTTP/2 era
ย 
Linux HTTPS/TCP/IP Stack for the Fast and Secure Web
Linux HTTPS/TCP/IP Stack for the Fast and Secure WebLinux HTTPS/TCP/IP Stack for the Fast and Secure Web
Linux HTTPS/TCP/IP Stack for the Fast and Secure Web
ย 
Reorganizing Website Architecture for HTTP/2 and Beyond
Reorganizing Website Architecture for HTTP/2 and BeyondReorganizing Website Architecture for HTTP/2 and Beyond
Reorganizing Website Architecture for HTTP/2 and Beyond
ย 
ะกั‚ะตะบ Linux HTTPS/TCP/IP ะดะปั ะทะฐั‰ะธั‚ั‹ ะพั‚ HTTP-DDoS-ะฐั‚ะฐะบ
ะกั‚ะตะบ Linux HTTPS/TCP/IP ะดะปั ะทะฐั‰ะธั‚ั‹ ะพั‚ HTTP-DDoS-ะฐั‚ะฐะบะกั‚ะตะบ Linux HTTPS/TCP/IP ะดะปั ะทะฐั‰ะธั‚ั‹ ะพั‚ HTTP-DDoS-ะฐั‚ะฐะบ
ะกั‚ะตะบ Linux HTTPS/TCP/IP ะดะปั ะทะฐั‰ะธั‚ั‹ ะพั‚ HTTP-DDoS-ะฐั‚ะฐะบ
ย 
Introducing HTTP/2
Introducing HTTP/2Introducing HTTP/2
Introducing HTTP/2
ย 
Next generation web protocols
Next generation web protocolsNext generation web protocols
Next generation web protocols
ย 
Http2
Http2Http2
Http2
ย 
Introduction to HTTP/2
Introduction to HTTP/2Introduction to HTTP/2
Introduction to HTTP/2
ย 
HTML5, HTTP2, and You 1.1
HTML5, HTTP2, and You 1.1HTML5, HTTP2, and You 1.1
HTML5, HTTP2, and You 1.1
ย 
The new (is it really ) api stack
The new (is it really ) api stackThe new (is it really ) api stack
The new (is it really ) api stack
ย 
HTTP colon slash slash: end of the road? @ CakeFest 2013 in San Francisco
HTTP colon slash slash: end of the road? @ CakeFest 2013 in San FranciscoHTTP colon slash slash: end of the road? @ CakeFest 2013 in San Francisco
HTTP colon slash slash: end of the road? @ CakeFest 2013 in San Francisco
ย 
CON5898 What Servlet 4.0 Means To You
CON5898 What Servlet 4.0 Means To YouCON5898 What Servlet 4.0 Means To You
CON5898 What Servlet 4.0 Means To You
ย 
Enabling Googley microservices with HTTP/2 and gRPC.
Enabling Googley microservices with HTTP/2 and gRPC.Enabling Googley microservices with HTTP/2 and gRPC.
Enabling Googley microservices with HTTP/2 and gRPC.
ย 
A new Internet? Intro to HTTP/2, QUIC, DoH and DNS over QUIC
A new Internet? Intro to HTTP/2, QUIC, DoH and DNS over QUICA new Internet? Intro to HTTP/2, QUIC, DoH and DNS over QUIC
A new Internet? Intro to HTTP/2, QUIC, DoH and DNS over QUIC
ย 
Servlet 4.0 at GeekOut 2015
Servlet 4.0 at GeekOut 2015Servlet 4.0 at GeekOut 2015
Servlet 4.0 at GeekOut 2015
ย 
Http/2
Http/2Http/2
Http/2
ย 
From Fast To SPDY
From Fast To SPDYFrom Fast To SPDY
From Fast To SPDY
ย 
Improving performance by changing the rules from fast to SPDY
Improving performance by changing the rules   from fast to SPDYImproving performance by changing the rules   from fast to SPDY
Improving performance by changing the rules from fast to SPDY
ย 
Meetup Tech Talk on Web Performance
Meetup Tech Talk on Web PerformanceMeetup Tech Talk on Web Performance
Meetup Tech Talk on Web Performance
ย 
Http 2: Should I care?
Http 2: Should I care?Http 2: Should I care?
Http 2: Should I care?
ย 

More from Kazuho Oku

ใ‚ฆใ‚งใƒ–ใ‚’้€Ÿใใ™ใ‚‹ใŸใ‚ใซDeNAใŒใ‚„ใฃใฆใ„ใ‚‹ใ“ใจ - HTTP/2ใจใ€ใ•ใ‚‰ใซใใฎๅ…ˆ
ใ‚ฆใ‚งใƒ–ใ‚’้€Ÿใใ™ใ‚‹ใŸใ‚ใซDeNAใŒใ‚„ใฃใฆใ„ใ‚‹ใ“ใจ - HTTP/2ใจใ€ใ•ใ‚‰ใซใใฎๅ…ˆใ‚ฆใ‚งใƒ–ใ‚’้€Ÿใใ™ใ‚‹ใŸใ‚ใซDeNAใŒใ‚„ใฃใฆใ„ใ‚‹ใ“ใจ - HTTP/2ใจใ€ใ•ใ‚‰ใซใใฎๅ…ˆ
ใ‚ฆใ‚งใƒ–ใ‚’้€Ÿใใ™ใ‚‹ใŸใ‚ใซDeNAใŒใ‚„ใฃใฆใ„ใ‚‹ใ“ใจ - HTTP/2ใจใ€ใ•ใ‚‰ใซใใฎๅ…ˆ
Kazuho Oku
ย 
JSX - ๅ…ฌ้–‹ใ‹ใ‚‰๏ผ‘ๅนดใ‚’่ฟŽใˆใฆ
JSX - ๅ…ฌ้–‹ใ‹ใ‚‰๏ผ‘ๅนดใ‚’่ฟŽใˆใฆJSX - ๅ…ฌ้–‹ใ‹ใ‚‰๏ผ‘ๅนดใ‚’่ฟŽใˆใฆ
JSX - ๅ…ฌ้–‹ใ‹ใ‚‰๏ผ‘ๅนดใ‚’่ฟŽใˆใฆ
Kazuho Oku
ย 
JSX - developing a statically-typed programming language for the Web
JSX - developing a statically-typed programming language for the WebJSX - developing a statically-typed programming language for the Web
JSX - developing a statically-typed programming language for the Web
Kazuho Oku
ย 
ใ‚ฆใ‚งใƒ–ใƒ–ใƒฉใ‚ฆใ‚ถใฎๆ™‚ไปฃใฏ็ต‚ใ‚ใ‚‹ใฎใ‹ ใ€œใ‚นใƒžใƒ›ใ‚ขใƒ—ใƒชใจHTML5ใฎๆœชๆฅใ€œ
ใ‚ฆใ‚งใƒ–ใƒ–ใƒฉใ‚ฆใ‚ถใฎๆ™‚ไปฃใฏ็ต‚ใ‚ใ‚‹ใฎใ‹ ใ€œใ‚นใƒžใƒ›ใ‚ขใƒ—ใƒชใจHTML5ใฎๆœชๆฅใ€œใ‚ฆใ‚งใƒ–ใƒ–ใƒฉใ‚ฆใ‚ถใฎๆ™‚ไปฃใฏ็ต‚ใ‚ใ‚‹ใฎใ‹ ใ€œใ‚นใƒžใƒ›ใ‚ขใƒ—ใƒชใจHTML5ใฎๆœชๆฅใ€œ
ใ‚ฆใ‚งใƒ–ใƒ–ใƒฉใ‚ฆใ‚ถใฎๆ™‚ไปฃใฏ็ต‚ใ‚ใ‚‹ใฎใ‹ ใ€œใ‚นใƒžใƒ›ใ‚ขใƒ—ใƒชใจHTML5ใฎๆœชๆฅใ€œ
Kazuho Oku
ย 
JSX Optimizer
JSX OptimizerJSX Optimizer
JSX Optimizer
Kazuho Oku
ย 
JSX Design Overview (ๆ—ฅๆœฌ่ชž)
JSX Design Overview (ๆ—ฅๆœฌ่ชž)JSX Design Overview (ๆ—ฅๆœฌ่ชž)
JSX Design Overview (ๆ—ฅๆœฌ่ชž)
Kazuho Oku
ย 

More from Kazuho Oku (20)

QUICๆจ™ๆบ–ๅŒ–ๅ‹•ๅ‘ ใ€œ2017/7
QUICๆจ™ๆบ–ๅŒ–ๅ‹•ๅ‘ ใ€œ2017/7QUICๆจ™ๆบ–ๅŒ–ๅ‹•ๅ‘ ใ€œ2017/7
QUICๆจ™ๆบ–ๅŒ–ๅ‹•ๅ‘ ใ€œ2017/7
ย 
HTTP/2ใฎ่ชฒ้กŒใจๅฐ†ๆฅ
HTTP/2ใฎ่ชฒ้กŒใจๅฐ†ๆฅHTTP/2ใฎ่ชฒ้กŒใจๅฐ†ๆฅ
HTTP/2ใฎ่ชฒ้กŒใจๅฐ†ๆฅ
ย 
TLS 1.3 ใจ 0-RTT ใฎใ“ใ‚ใ€œใ„่ฉฑ
TLS 1.3 ใจ 0-RTT ใฎใ“ใ‚ใ€œใ„่ฉฑTLS 1.3 ใจ 0-RTT ใฎใ“ใ‚ใ€œใ„่ฉฑ
TLS 1.3 ใจ 0-RTT ใฎใ“ใ‚ใ€œใ„่ฉฑ
ย 
TLS & LURK @ IETF 95
TLS & LURK @ IETF 95TLS & LURK @ IETF 95
TLS & LURK @ IETF 95
ย 
HTTPใจใ‚ตใƒผใƒๆŠ€่ก“ใฎๆœ€ๆ–ฐๅ‹•ๅ‘
HTTPใจใ‚ตใƒผใƒๆŠ€่ก“ใฎๆœ€ๆ–ฐๅ‹•ๅ‘HTTPใจใ‚ตใƒผใƒๆŠ€่ก“ใฎๆœ€ๆ–ฐๅ‹•ๅ‘
HTTPใจใ‚ตใƒผใƒๆŠ€่ก“ใฎๆœ€ๆ–ฐๅ‹•ๅ‘
ย 
ใ‚ฆใ‚งใƒ–ใ‚’้€Ÿใใ™ใ‚‹ใŸใ‚ใซDeNAใŒใ‚„ใฃใฆใ„ใ‚‹ใ“ใจ - HTTP/2ใจใ€ใ•ใ‚‰ใซใใฎๅ…ˆ
ใ‚ฆใ‚งใƒ–ใ‚’้€Ÿใใ™ใ‚‹ใŸใ‚ใซDeNAใŒใ‚„ใฃใฆใ„ใ‚‹ใ“ใจ - HTTP/2ใจใ€ใ•ใ‚‰ใซใใฎๅ…ˆใ‚ฆใ‚งใƒ–ใ‚’้€Ÿใใ™ใ‚‹ใŸใ‚ใซDeNAใŒใ‚„ใฃใฆใ„ใ‚‹ใ“ใจ - HTTP/2ใจใ€ใ•ใ‚‰ใซใใฎๅ…ˆ
ใ‚ฆใ‚งใƒ–ใ‚’้€Ÿใใ™ใ‚‹ใŸใ‚ใซDeNAใŒใ‚„ใฃใฆใ„ใ‚‹ใ“ใจ - HTTP/2ใจใ€ใ•ใ‚‰ใซใใฎๅ…ˆ
ย 
HTTP/2ๆ™‚ไปฃใฎใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆ่จญ่จˆ
HTTP/2ๆ™‚ไปฃใฎใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆ่จญ่จˆHTTP/2ๆ™‚ไปฃใฎใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆ่จญ่จˆ
HTTP/2ๆ™‚ไปฃใฎใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆ่จญ่จˆ
ย 
H2O - making HTTP better
H2O - making HTTP betterH2O - making HTTP better
H2O - making HTTP better
ย 
JSON SQL Injection and the Lessons Learned
JSON SQL Injection and the Lessons LearnedJSON SQL Injection and the Lessons Learned
JSON SQL Injection and the Lessons Learned
ย 
JSX ้€Ÿใ•ใฎ็ง˜ๅฏ† - ้ซ˜้€ŸใชJavaScriptใ‚’ๆ›ธใๆ–นๆณ•
JSX ้€Ÿใ•ใฎ็ง˜ๅฏ† - ้ซ˜้€ŸใชJavaScriptใ‚’ๆ›ธใๆ–นๆณ•JSX ้€Ÿใ•ใฎ็ง˜ๅฏ† - ้ซ˜้€ŸใชJavaScriptใ‚’ๆ›ธใๆ–นๆณ•
JSX ้€Ÿใ•ใฎ็ง˜ๅฏ† - ้ซ˜้€ŸใชJavaScriptใ‚’ๆ›ธใๆ–นๆณ•
ย 
JSX ใฎ็พๅœจใจๆœชๆฅ - Oct 26 2013
JSX ใฎ็พๅœจใจๆœชๆฅ - Oct 26 2013JSX ใฎ็พๅœจใจๆœชๆฅ - Oct 26 2013
JSX ใฎ็พๅœจใจๆœชๆฅ - Oct 26 2013
ย 
Using the Power to Prove
Using the Power to ProveUsing the Power to Prove
Using the Power to Prove
ย 
JSX - ๅ…ฌ้–‹ใ‹ใ‚‰๏ผ‘ๅนดใ‚’่ฟŽใˆใฆ
JSX - ๅ…ฌ้–‹ใ‹ใ‚‰๏ผ‘ๅนดใ‚’่ฟŽใˆใฆJSX - ๅ…ฌ้–‹ใ‹ใ‚‰๏ผ‘ๅนดใ‚’่ฟŽใˆใฆ
JSX - ๅ…ฌ้–‹ใ‹ใ‚‰๏ผ‘ๅนดใ‚’่ฟŽใˆใฆ
ย 
JSX - developing a statically-typed programming language for the Web
JSX - developing a statically-typed programming language for the WebJSX - developing a statically-typed programming language for the Web
JSX - developing a statically-typed programming language for the Web
ย 
ใ‚ฆใ‚งใƒ–ใƒ–ใƒฉใ‚ฆใ‚ถใฎๆ™‚ไปฃใฏ็ต‚ใ‚ใ‚‹ใฎใ‹ ใ€œใ‚นใƒžใƒ›ใ‚ขใƒ—ใƒชใจHTML5ใฎๆœชๆฅใ€œ
ใ‚ฆใ‚งใƒ–ใƒ–ใƒฉใ‚ฆใ‚ถใฎๆ™‚ไปฃใฏ็ต‚ใ‚ใ‚‹ใฎใ‹ ใ€œใ‚นใƒžใƒ›ใ‚ขใƒ—ใƒชใจHTML5ใฎๆœชๆฅใ€œใ‚ฆใ‚งใƒ–ใƒ–ใƒฉใ‚ฆใ‚ถใฎๆ™‚ไปฃใฏ็ต‚ใ‚ใ‚‹ใฎใ‹ ใ€œใ‚นใƒžใƒ›ใ‚ขใƒ—ใƒชใจHTML5ใฎๆœชๆฅใ€œ
ใ‚ฆใ‚งใƒ–ใƒ–ใƒฉใ‚ฆใ‚ถใฎๆ™‚ไปฃใฏ็ต‚ใ‚ใ‚‹ใฎใ‹ ใ€œใ‚นใƒžใƒ›ใ‚ขใƒ—ใƒชใจHTML5ใฎๆœชๆฅใ€œ
ย 
JSX
JSXJSX
JSX
ย 
JSX Optimizer
JSX OptimizerJSX Optimizer
JSX Optimizer
ย 
JSX Design Overview (ๆ—ฅๆœฌ่ชž)
JSX Design Overview (ๆ—ฅๆœฌ่ชž)JSX Design Overview (ๆ—ฅๆœฌ่ชž)
JSX Design Overview (ๆ—ฅๆœฌ่ชž)
ย 
JSX
JSXJSX
JSX
ย 
Unix Programming with Perl 2
Unix Programming with Perl 2Unix Programming with Perl 2
Unix Programming with Perl 2
ย 

Recently uploaded

valsad Escorts Service โ˜Ž๏ธ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...
valsad Escorts Service โ˜Ž๏ธ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...valsad Escorts Service โ˜Ž๏ธ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...
valsad Escorts Service โ˜Ž๏ธ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...
Call Girls In Delhi Whatsup 9873940964 Enjoy Unlimited Pleasure
ย 
VIP Model Call Girls NIBM ( Pune ) Call ON 8005736733 Starting From 5K to 25K...
VIP Model Call Girls NIBM ( Pune ) Call ON 8005736733 Starting From 5K to 25K...VIP Model Call Girls NIBM ( Pune ) Call ON 8005736733 Starting From 5K to 25K...
VIP Model Call Girls NIBM ( Pune ) Call ON 8005736733 Starting From 5K to 25K...
SUHANI PANDEY
ย 
Lucknow โคCALL GIRL 88759*99948 โคCALL GIRLS IN Lucknow ESCORT SERVICEโคCALL GIRL
Lucknow โคCALL GIRL 88759*99948 โคCALL GIRLS IN Lucknow ESCORT SERVICEโคCALL GIRLLucknow โคCALL GIRL 88759*99948 โคCALL GIRLS IN Lucknow ESCORT SERVICEโคCALL GIRL
Lucknow โคCALL GIRL 88759*99948 โคCALL GIRLS IN Lucknow ESCORT SERVICEโคCALL GIRL
imonikaupta
ย 
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
dharasingh5698
ย 
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting High Prof...
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting  High Prof...VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting  High Prof...
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting High Prof...
singhpriety023
ย 
6.High Profile Call Girls In Punjab +919053900678 Punjab Call GirlHigh Profil...
6.High Profile Call Girls In Punjab +919053900678 Punjab Call GirlHigh Profil...6.High Profile Call Girls In Punjab +919053900678 Punjab Call GirlHigh Profil...
6.High Profile Call Girls In Punjab +919053900678 Punjab Call GirlHigh Profil...
@Chandigarh #call #Girls 9053900678 @Call #Girls in @Punjab 9053900678
ย 
Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...
Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...
Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...
SUHANI PANDEY
ย 
VVIP Pune Call Girls Mohammadwadi WhatSapp Number 8005736733 With Elite Staff...
VVIP Pune Call Girls Mohammadwadi WhatSapp Number 8005736733 With Elite Staff...VVIP Pune Call Girls Mohammadwadi WhatSapp Number 8005736733 With Elite Staff...
VVIP Pune Call Girls Mohammadwadi WhatSapp Number 8005736733 With Elite Staff...
SUHANI PANDEY
ย 

Recently uploaded (20)

valsad Escorts Service โ˜Ž๏ธ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...
valsad Escorts Service โ˜Ž๏ธ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...valsad Escorts Service โ˜Ž๏ธ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...
valsad Escorts Service โ˜Ž๏ธ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...
ย 
Dubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls Dubai
Dubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls DubaiDubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls Dubai
Dubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls Dubai
ย 
VIP Model Call Girls NIBM ( Pune ) Call ON 8005736733 Starting From 5K to 25K...
VIP Model Call Girls NIBM ( Pune ) Call ON 8005736733 Starting From 5K to 25K...VIP Model Call Girls NIBM ( Pune ) Call ON 8005736733 Starting From 5K to 25K...
VIP Model Call Girls NIBM ( Pune ) Call ON 8005736733 Starting From 5K to 25K...
ย 
Pune Airport ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready...
Pune Airport ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready...Pune Airport ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready...
Pune Airport ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready...
ย 
Lucknow โคCALL GIRL 88759*99948 โคCALL GIRLS IN Lucknow ESCORT SERVICEโคCALL GIRL
Lucknow โคCALL GIRL 88759*99948 โคCALL GIRLS IN Lucknow ESCORT SERVICEโคCALL GIRLLucknow โคCALL GIRL 88759*99948 โคCALL GIRLS IN Lucknow ESCORT SERVICEโคCALL GIRL
Lucknow โคCALL GIRL 88759*99948 โคCALL GIRLS IN Lucknow ESCORT SERVICEโคCALL GIRL
ย 
Call Now โ˜Ž 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.
Call Now โ˜Ž 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.Call Now โ˜Ž 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.
Call Now โ˜Ž 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.
ย 
Real Escorts in Al Nahda +971524965298 Dubai Escorts Service
Real Escorts in Al Nahda +971524965298 Dubai Escorts ServiceReal Escorts in Al Nahda +971524965298 Dubai Escorts Service
Real Escorts in Al Nahda +971524965298 Dubai Escorts Service
ย 
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
ย 
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting High Prof...
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting  High Prof...VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting  High Prof...
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting High Prof...
ย 
Real Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirtReal Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirt
ย 
6.High Profile Call Girls In Punjab +919053900678 Punjab Call GirlHigh Profil...
6.High Profile Call Girls In Punjab +919053900678 Punjab Call GirlHigh Profil...6.High Profile Call Girls In Punjab +919053900678 Punjab Call GirlHigh Profil...
6.High Profile Call Girls In Punjab +919053900678 Punjab Call GirlHigh Profil...
ย 
Katraj ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready For S...
Katraj ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready For S...Katraj ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready For S...
Katraj ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready For S...
ย 
Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...
Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...
Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...
ย 
Al Barsha Night Partner +0567686026 Call Girls Dubai
Al Barsha Night Partner +0567686026 Call Girls  DubaiAl Barsha Night Partner +0567686026 Call Girls  Dubai
Al Barsha Night Partner +0567686026 Call Girls Dubai
ย 
Call Now โ˜Ž 8264348440 !! Call Girls in Shahpur Jat Escort Service Delhi N.C.R.
Call Now โ˜Ž 8264348440 !! Call Girls in Shahpur Jat Escort Service Delhi N.C.R.Call Now โ˜Ž 8264348440 !! Call Girls in Shahpur Jat Escort Service Delhi N.C.R.
Call Now โ˜Ž 8264348440 !! Call Girls in Shahpur Jat Escort Service Delhi N.C.R.
ย 
Call Now โ˜Ž 8264348440 !! Call Girls in Rani Bagh Escort Service Delhi N.C.R.
Call Now โ˜Ž 8264348440 !! Call Girls in Rani Bagh Escort Service Delhi N.C.R.Call Now โ˜Ž 8264348440 !! Call Girls in Rani Bagh Escort Service Delhi N.C.R.
Call Now โ˜Ž 8264348440 !! Call Girls in Rani Bagh Escort Service Delhi N.C.R.
ย 
Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...
Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...
Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...
ย 
Enjoy NightโšกCall Girls Samalka Delhi >เผ’8448380779 Escort Service
Enjoy NightโšกCall Girls Samalka Delhi >เผ’8448380779 Escort ServiceEnjoy NightโšกCall Girls Samalka Delhi >เผ’8448380779 Escort Service
Enjoy NightโšกCall Girls Samalka Delhi >เผ’8448380779 Escort Service
ย 
VVVIP Call Girls In Connaught Place โžก๏ธ Delhi โžก๏ธ 9999965857 ๐Ÿš€ No Advance 24HRS...
VVVIP Call Girls In Connaught Place โžก๏ธ Delhi โžก๏ธ 9999965857 ๐Ÿš€ No Advance 24HRS...VVVIP Call Girls In Connaught Place โžก๏ธ Delhi โžก๏ธ 9999965857 ๐Ÿš€ No Advance 24HRS...
VVVIP Call Girls In Connaught Place โžก๏ธ Delhi โžก๏ธ 9999965857 ๐Ÿš€ No Advance 24HRS...
ย 
VVIP Pune Call Girls Mohammadwadi WhatSapp Number 8005736733 With Elite Staff...
VVIP Pune Call Girls Mohammadwadi WhatSapp Number 8005736733 With Elite Staff...VVIP Pune Call Girls Mohammadwadi WhatSapp Number 8005736733 With Elite Staff...
VVIP Pune Call Girls Mohammadwadi WhatSapp Number 8005736733 With Elite Staff...
ย 

Recent Advances in HTTP, controlling them using ruby

  • 1. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Recent Advances in HTTP, controlling them using ruby DeNA Co., Ltd. Kazuho Oku
  • 2. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Who am I ๏ฎ lead developer of H2O HTTP/2 server โƒ one of the most sophisticated HTTP/2 impl. โƒ initial public release: 2014/10 (license: MITL) โƒ used by Fastly, etc. ๏ฎ author of Cache-Digests Internet Draft โƒ considered as an essential work for HTTP/2 push ๏ฎ works at DeNA Co., Ltd. ๏ฎ also developer of: Q4M, Starlet, pisojson, ... 2Recend Advances in HTTP2, controlling them using ruby
  • 3. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Current State of HTTP 3Recend Advances in HTTP2, controlling them using ruby
  • 4. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Why use HTTP/2? ๏ฎ latency has become the bottleneck of the Web ๏ฎ HTTP/2 to conceal latency by raising concurrency โƒ 6 concurrent requests in HTTP/1 โƒ ~100 in HTTP/2 4Recend Advances in HTTP2, controlling them using ruby
  • 5. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Current state of HTTP ๏ฎ HTTP/2 (RFC 7540) released on May 2015 1: https://github.com/HTTPWorkshop/workshop2016/blob/master/talks/http2-review-data.pdf 5Recend Advances in HTTP2, controlling them using ruby 45 28 37 41 18 31 0% 20% 40% 60% 80% 100% 2015/7 2016/7 # of transactions by Firefox1 HTTP HTTPS (H1) HTTPS (H2)
  • 6. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Key features of HTTP/2 ๏ฎ header compression (HPACK) ๏ฎ multiplexing & prioritization ๏ฎ push 6Recend Advances in HTTP2, controlling them using ruby
  • 7. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Header compression ๏ฎ working well ๏ฎ according to Mozilla1: โƒ median โ€“ 90% reduction โƒ 80th percentile โ€“ 75% reduction โƒ 90th โ€“ 10% reduction 7Recend Advances in HTTP2, controlling them using ruby
  • 8. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Multiplexing & prioritization ๏ฎ HTTP/2 multiplexes responses into one TCP conn. โƒ client gives hint for prioritization โƒ server uses the hint to schedule the responses ๏ฎ but some client-server pairs donโ€™t do it right 8Recend Advances in HTTP2, controlling them using ruby
  • 9. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Push ๏ฎ positive reports: โƒ โ€œ20-30% speedup on page render timeโ€2 ๏ฎ negative comments: โƒ many unnecessary pushes (47% are reset2) โƒ increased render time in anti-patterns3 โƒ โ€œconsider preload instead of pushโ€3 ๏ฎ push from edge โƒ how? 2: https://github.com/HTTPWorkshop/workshop2016/blob/master/talks/server-push.pdf 3: https://docs.google.com/document/d/1K0NykTXBbbbTlv60t5MyJvXjqKGsCVNYHyLEXIxYMv0/edit 9Recend Advances in HTTP2, controlling them using ruby
  • 10. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Fixes? 10Recend Advances in HTTP2, controlling them using ruby
  • 11. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Flow of an ideal HTTP transaction ๏ฎ respond to high-priority requests immediately ๏ฎ send resources in right order โƒ first send CSS/JS โƒ then send the HTML โƒ then send the images ๏ฎ push only the resources not cached by the client 11Recend Advances in HTTP2, controlling them using ruby client server 1RTT
  • 12. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. The reality ๏ฎ respond to high-priority requests immediately โƒ blocked by unsent data in TCP ๏ฎ send resources in right order โƒ some browsers donโ€™t specify priority, some servers fail to respect priority โƒ issues caused by hidden resources ๏ฎ push only the resources not cached by the client โƒ how? 12Recend Advances in HTTP2, controlling them using ruby client server 1RTT
  • 13. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. TCP head-of-line blocking ๏ฎ head-of-line (HoL) blocking: โƒ high-priority data blocked by preceding data in flight ๏ฎ TCP HoL blocking: โƒ data in TCP send buffer blocks following data of higher priority 13Recend Advances in HTTP2, controlling them using ruby
  • 14. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. TCP head-of-line blocking 14Recend Advances in HTTP2, controlling them using ruby ๏ฎ typical H2 server writes much more than that can be sent immediately โƒ unsent data in TCP send buffer (and TLS buffer) HOL-blocks following data TCP send buffer CWND unacked poll threshold TLS buf. TLS Records sent immediately not immediately sent HTTP/2 frames
  • 15. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. TCP head-of-line blocking: the solution ๏ฎ write only what can be sent immediately โƒ obtain CWND and unacked size using TCP_INFO ๏ฎ adjust poll threshold to delay write notification until TCP becomes ready to send some data immediately 15Recend Advances in HTTP2, controlling them using ruby CWND unacked poll threshold TLS Records sent immediately not immediately sent HTTP/2 frames TCP send buffer
  • 16. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. TCP head-of-line blocking: benchmark 1 16Recend Advances in HTTP2, controlling them using ruby ๏ฎ conditions: โƒ server in Ireland, client in Tokyo (RTT 250ms) โƒ load tiny js at the top of a large HTML ๏ฎ result: delay decreased from 511ms to 250ms โƒ i.e. JS fetch latency was 2RTT, became 1 RTT โ€ข similar results in other environments
  • 17. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. TCP head-of-line blocking: benchmark 2 ๏ฎ using same data as previous ๏ฎ server: Sakura VPS (Ishikari DC) 17Recend Advances in HTTP2, controlling them using ruby 0 50 100 150 200 250 300 HTML JS milliseconds downloading HTML (and JS within) RTT ~25ms master latopt
  • 18. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. HTTP/2 prioritization 18Recend Advances in HTTP2, controlling them using ruby Root Leader G Follower G weight: 1 HTML weight: 32 Image weight: 22 Image weight: 22 Image weight: 22 CSS weight: 32 CSS weight: 32 ๏ฎ hybrid approach using weights and chaining โƒ servers are expected to obey to the priority specified by the clients ๏ฎ Firefoxโ€™s prioritization graph is shown below JS weight: 32 JS weight: 32
  • 19. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. HTTP/2 prioritization ๏ฎ some web browsers fail to specify priority โƒ Safari, Blink โƒ older versions of Chrome also had issues โƒ server-side countermeasures required 19Recend Advances in HTTP2, controlling them using ruby Root HTML weight: 16 CSS weight: 16 JS weight: 16 Image weight: 16 Image weight: 16 Image weight: 16
  • 20. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. HTTP/2 prioritization: the solution ๏ฎ bandwidth distribution on server-side: โƒ use Weighted Fair Queuing (WFQ) or Deficit Round Robin (DRR) โƒ some servers do it right: โ€ข nghttp2 (and Apache) implements WFQ in O(log N) โ€ข H2O approximates WFQ in O(1) ๏ฎ detect dumb clients and fallback to server-driven prioritization โƒ H2O reprioritizes CSS, JS for clients that do not use priority chains 20Recend Advances in HTTP2, controlling them using ruby
  • 21. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. HTTP/2 prioritization: benchmark ๏ฎ differences between the times spent until first-paint (red bar) 21Recend Advances in HTTP2, controlling them using ruby
  • 22. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Hidden resource ๏ฎ hidden resource: a resource specified in CSS (@import) or JavaScript โƒ was anti-pattern in HTTP/1 โƒ anti-pattern in HTTP/2 as well ๏ฎ solution: โƒ avoid use of hidden resources that block rendering (e.g. CSS, JS) โƒ or, specify them using link: rel=preload 22Recend Advances in HTTP2, controlling them using ruby client server
  • 23. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Push ๏ฎ three use-cases: โƒ prioritization โƒ push while processing request โƒ push from edge 23Recend Advances in HTTP2, controlling them using ruby
  • 24. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Pushing for prioritization 24Recend Advances in HTTP2, controlling them using ruby client server GET / GET /style.css HTTP/2 200 OK <html> <link rel=style.css... HTTP/2 200 OK body: ... #title: ... 1. send CSS, JS first 2. then send HTML (can be rendered progressively) without push client server GET / GET /style.css HTTP/2 HTTP/2 200 OK body: ... #title: ... with push HTTP/2 200 OK <html> <link rel=style.css ...
  • 25. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Push while processing request ๏ฎ web applications involving DB access, etc. 25Recend Advances in HTTP2, controlling them using ruby req. processrequest push-asset HTML push-asset push-asset push-asset req. processrequest asset HTML asset asset asset req. 450ms(5RTT+processingme) 250ms(1RTT+processingme) without push with push
  • 26. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Push from edge ๏ฎ CDNsโ€™ use-case โƒ utilize the conn. while waiting for app. response 26Recend Advances in HTTP2, controlling them using ruby req. push-asset HTML push-asset push-asset push-asset client edge server (CDN) app. server req. HTML
  • 27. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. How to push ๏ฎ H2 server may push preloaded links โƒ e.g. Link: </style.css>; rel=preload โƒ H2 server may push preloaded links โƒ recognized by Apache, H2O, nghttp2 โƒ patch exists for Nginx ๏ฎ use nopush attribute to opt-out โƒ e.g. Link: </dontpush.jpg>; rel=preload; nopush ๏ฎ note: use of preload as a push indicator is upon the process of standardization at W3C 27Recend Advances in HTTP2, controlling them using ruby
  • 28. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. How to push while processing request 28Recend Advances in HTTP2, controlling them using ruby ๏ฎ send Link: rel=preload as interim response โƒ application sends 100 then processes the request ๏ฎ supported in H2O 2.1 GET / HTTP/1.1 Host: example.com HTTP/1.1 100 Continue Link: </style.css>; rel=preload HTTP/1.1 200 OK Content-Type: text/html <!DOCTYPE HTML> ... HTTP/2 server app. server Web app. GET / 100 Continue Link: โ€ฆ GET / 200 OK 200 OK processrequest
  • 29. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. How to push while processing request ๏ฎ configure your H2 server โƒ in case of H2O: mruby.handler: | Proc.new do |env| push_paths = [] if /(/|.html)$/.match(env["PATH_INFO"]) push_paths << "/style.cssโ€ ... end [399, push_paths.empty? ? {} : {"link" => push_paths.map{|p| "<#{p}>; rel=preload"}.join("n")}, []] end file.dir: /path/to/doc-root 29Recend Advances in HTTP2, controlling them using ruby
  • 30. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. BTW, you can do more by using mruby ๏ฎ HTTP authentication mruby.handler: | require "htpasswd.rb" Htpasswd.new("/path/to/.htpasswd", "realm-name") ๏ฎ DoS mitigation mruby.handler: | require "dos_detector.rb" DoSDetector.new({ :strategy => DoSDetector.CountingStrategy.new({ :period => 10, :threshold => 100, :ban_period => 300, }), }) 30Recend Advances in HTTP2, controlling them using ruby
  • 31. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. ... and more ๏ฎ Access Control mruby.handler: | acl { allow { addr == "127.0.0.1" } deny { user_agent.match(/curl/i) && !addr.start_with?("192.168.") } respond(503, {}, ["Service Unavailable"]) { addr == malicious_ip } redirect("https://example.com/", 301) { path =~ /moved/ } use Htpasswd.new("/path/to/.htpasswd", "realm") { path.start_with?("/admin") } } 31Recend Advances in HTTP2, controlling them using ruby
  • 32. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. ... and more ๏ฎ fast IPv4 address matching using Trie4 mruby.handler: | require "trie_addr.rb" trie = TrieAddr.new.add([ "192.168.0.0/16", "172.16.0.0/12", ...] ) acl { allow { trie.match?(addr) } deny } 4: http://dsas.blog.klab.org/archives/51293338.html 32Recend Advances in HTTP2, controlling them using ruby
  • 33. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. How to push from edge ๏ฎ depends on CDN โƒ some CDNs may use RUM-based approach โƒ others may provide DSL โ€ข GCP provides http2-push-manifest (JSON-based) โƒ though cannot be used for pushing from edge โƒ anybody using (m)ruby on edge? 33Recend Advances in HTTP2, controlling them using ruby
  • 34. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Push vs. cache ๏ฎ why would you ever push cached resources? โƒ itโ€™s waste of bandwidth (and time) ๏ฎ several ways to avoid pushing cached resources โƒ cookie-based โ€ข supported by H2O โƒ cache-digest โ€ข supported by Apache, H2O โ€ข needs browser support or ServiceWorker script โ€ข standardization in process at IETF โƒ implement your own 34Recend Advances in HTTP2, controlling them using ruby
  • 35. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Avoiding negative effect caused by push ๏ฎ donโ€™t push unless your mechanism is cache-aware ๏ฎ only push resources that block rendering โƒ reason: โ€ข H2 endpoints have difficulty in distributing bandwidth bet. pushed and pulled responses โ€ข negative effect caused by HoL blocking, prioritization and hidden resources becomes more apparent with push ๏ฎ above rules donโ€™t apply to the tiny pushes โƒ i.e. those used as a replacement for inlining (i.e. <img src=โ€œdata:...โ€>) 35Recend Advances in HTTP2, controlling them using ruby
  • 36. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Summary 36Recend Advances in HTTP2, controlling them using ruby
  • 37. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Summary ๏ฎ HTTP/2 has become popular ๏ฎ the effectiveness varies between implementations โƒ HoL-blocking avoidance, prioritization, cache- aware push, ... โƒ upcoming specs (e.g. TLS/1.3, QUIC) may cause even more difference โƒ careful evaluation of servers / CDNs is important ๏ฎ H2O is the leader in HTTP/2 server performance โƒ and can be configured using mruby 37Recend Advances in HTTP2, controlling them using ruby

Editor's Notes

  1. median โ€“ 90% reduction 80th percentile โ€“ 75% reduction 90th โ€“ 10% reduction TODO add source
  2. unicorn ใฎๅ ดๅˆใ‚‚ raw socket ใ‚’ๅ–ๅพ—ใ—ใฆ