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
PRO

October 20, 2017
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. 1
    HTTP/2
    ARTEM MALYSHEV
    @PROOFIT404

    View Slide

  2. 2
    WHY?
    HTTP/1 is the power
    running Internet

    View Slide

  3. 3
    HTTP/1 PROBLEMS
    Designed over 20 years ago
    Have 6 RFC at that moment
    Network inef cient
    Text-based

    View Slide

  4. 4
    BUT WE LIKE WORKAROUNDS
    Image sprites
    Custom fonts
    Inline resources
    Resource concatenation
    Sharding

    View Slide

  5. 5
    HTTP/2
    Replacement for how HTTP/1
    is expressed “on the wire”

    View Slide

  6. 6
    HISTORY
    Proposed Standard in December 2014
    SPDY successor
    Initially developed by Google

    View Slide

  7. 7
    PRINCIPLES
    Binary protocol
    Multiplexing
    Prioritization
    Flow control
    Headers compression
    Stream termination support
    Server push

    View Slide

  8. 8

    View Slide

  9. 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

    View Slide

  10. 10

    View Slide

  11. 11
    CORY BENFIELD

    View Slide

  12. 12
    GENERATING TLS SERT
    openssl req -x509 \
    -newkey rsa:4096 \
    -days 365 -nodes \
    -keyout key.pem \
    -out cert.pem

    View Slide

  13. 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:
    ...

    View Slide

  14. 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

    View Slide

  15. 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()

    View Slide

  16. 16
    MITMPROXY

    View Slide

  17. 17

    View Slide

  18. 18
    RUNNING DAPHNE
    daphne \
    --ssl \
    --port=8000 \
    --privateKey=key.pem \
    --certKey=cert.pem \
    project.asgi:channel_layer

    View Slide

  19. 19
    DJANGO ADMIN

    View Slide

  20. 20
    TRUE STORY

    View Slide

  21. 21
    RESOURCES
    http2.github.io
    Hyper H2
    How to serve http 2 using python
    An overview of HTTP/2 with Daniel Sommermann

    View Slide

  22. 22
    QUESTIONS?

    View Slide