Upgrade to Pro — share decks privately, control downloads, hide ads and more …

HTTP/2 глазами потребителя

HTTP/2 глазами потребителя

Артём Малышев (Software Engineer @ Advance) @ Moscow Python Conf 2017
"Протокол HTTP/2 поддерживается всеми современными браузерами. Google performance team пропагандирует его адаптацию. Всё больше известных сайтов начинают предоставлять его поддержку наравне с обычным HTTP. Доклад о том, зачем нам это всё надо, какие преимущества в целом даёт и как это готовить в питоне. Да, про Django тоже будет".
Видео: https://conf.python.ru/http2-glazami-potrebitelya/

Moscow Python Meetup

October 20, 2017
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. 3 HTTP/1 PROBLEMS Designed over 20 years ago Have 6

    RFC at that moment Network inef cient Text-based
  2. 4 BUT WE LIKE WORKAROUNDS Image sprites Custom fonts Inline

    resources Resource concatenation Sharding
  3. 8

  4. 9 IMPLEMENTATIONS Ace Aerys Akamai GHost Apache Tomcat http4s-blaze Brocade

    Traf c Manager Chatterbox Chromium libcurl Deuterium E2 Systems PATH Ericsson MSP F5 GFE H2O hpack http2dotnet HttpTwo httpbis hyper Shaka Jetty LiteSpeed Enterprise Microsoft Internet Explorer mod_h2 Mozilla Firefox Netty nghttp2 Radware node-http2 OkHttp River Sasazka second-transfer ShimmerCat SuaveIO Swoole Trusterd Twitter Undertow Vert.x WASD Warp Wireshark WKWebView cashpack proxygen re y
  5. 10

  6. 12 GENERATING TLS SERT openssl req -x509 \ -newkey rsa:4096

    \ -days 365 -nodes \ -keyout key.pem \ -out cert.pem
  7. 13 H2 from h2.connection import H2Connection conn = H2Connection(client_side=False) conn.initiate_connection()

    sock.sendall(conn.data_to_send()) data = sock.recv(65535) events = conn.receive_data(data) for event in events: ...
  8. 14 QUART from quart import * app = Quart(__name__) @app.route('/')

    async def index(): result = await render_template('index.html') response = await make_response(result) response.push_promises.update([ url_for('static', 'bootstrap.min.css'), url_for('static', 'bootstrap.min.js'), url_for('static', 'jquery.min.js'), ]) return response
  9. 15 TWISTED from twisted import * root = Resource() root.putChild(b'',

    File('index.html')) root.putChild(b'static', File('static')) site = server.Site(root) server = endpoints.serverFromString( reactor, "ssl:privateKey=key.pem:certKey=cert.pem", ) server.listen(site) reactor.run()
  10. 17

  11. 18 RUNNING DAPHNE daphne \ --ssl \ --port=8000 \ --privateKey=key.pem

    \ --certKey=cert.pem \ project.asgi:channel_layer
  12. 21 RESOURCES http2.github.io Hyper H2 How to serve http 2

    using python An overview of HTTP/2 with Daniel Sommermann