{"id":16797,"date":"2021-05-28T18:04:12","date_gmt":"2021-05-28T16:04:12","guid":{"rendered":"https:\/\/daniel.haxx.se\/blog\/?p=16797"},"modified":"2021-05-28T18:04:12","modified_gmt":"2021-05-28T16:04:12","slug":"taking-hyper-curl-further","status":"publish","type":"post","link":"https:\/\/daniel.haxx.se\/blog\/2021\/05\/28\/taking-hyper-curl-further\/","title":{"rendered":"Taking hyper-curl further"},"content":{"rendered":"\n<p>Thanks to funding by <a href=\"https:\/\/www.abetterinternet.org\/\">ISRG<\/a> (via Google), we merged <a href=\"https:\/\/daniel.haxx.se\/blog\/2021\/02\/04\/webinar-curl-hyper-and-rust\/\" data-type=\"post\">the hyper powered HTTP back-end into curl<\/a> earlier this year as an alternative HTTP\/1 and HTTP\/2 implementation. Previously, there was only one way to do HTTP\/1 and 2 in curl.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Backends<\/h2>\n\n\n\n<p>Core libcurl functionality can be powered by optional and alternative backends in a way that doesn&#8217;t change the API or directly affect the application. This is done by featuring internal APIs that can be implemented by independent components. See the illustration below (click for higher resolution).<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><a href=\"https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2021\/05\/slide-libcurl-backends.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"2000\" height=\"1125\" src=\"https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2021\/05\/slide-libcurl-backends.jpg\" alt=\"\" class=\"wp-image-16858\"\/><\/a><\/figure><\/div>\n\n\n\n<p><em>This is a slide from Daniel&#8217;s <a href=\"https:\/\/youtu.be\/T7Pv5lQ1dAc\">libcurl under the hood<\/a> presentation.<\/em><\/p>\n\n\n\n<p><a href=\"https:\/\/daniel.haxx.se\/blog\/2021\/02\/03\/curl-7-75-0-is-smaller\/\" data-type=\"post\" data-id=\"15664\">curl 7.75.0<\/a> became the first curl release that could be built with <a href=\"https:\/\/hyper.rs\/\">hyper<\/a>. The support for it was labeled &#8220;experimental&#8221; as while most of all common and basic use cases were supported, we still couldn&#8217;t run the full test suite when built with it and some edge cases even crashed.<\/p>\n\n\n\n<p>We&#8217;ve subsequently fixed a few of the worst flaws so the Hyper powered curl has gradually and slowly improved since then.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Going further<\/h2>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignright size-large is-resized\"><a href=\"https:\/\/www.abetterinternet.org\/\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2021\/05\/ISRG-Logo-Blue.png\" alt=\"\" class=\"wp-image-16885\" width=\"213\" height=\"69\"\/><\/a><\/figure><\/div>\n\n\n\n<p>Our best friends at ISRG has now once again put up funding and I&#8217;ll spend more work hours on making sure that more (preferably all) tests can run with hyper.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignright size-large is-resized\"><a href=\"https:\/\/www.wolfssl.com\/\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2019\/01\/wolfssl-logo.png\" alt=\"\" class=\"wp-image-11938\" width=\"199\" height=\"153\" srcset=\"https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2019\/01\/wolfssl-logo.png 1011w, https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2019\/01\/wolfssl-logo-200x155.png 200w, https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2019\/01\/wolfssl-logo-450x348.png 450w, https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2019\/01\/wolfssl-logo-768x594.png 768w\" sizes=\"auto, (max-width: 199px) 100vw, 199px\" \/><\/a><\/figure><\/div>\n\n\n\n<p>I&#8217;ve already started. Right now I&#8217;m sitting and staring at test case 154 which is doing a <code>HTTP PUT<\/code> using Digest authentication and an <code>Expect: 100-continue<\/code> header and this test case currently doesn&#8217;t work correctly when built to use Hyper. I&#8217;ll report back in a few weeks and let you know how it goes &#8211; and then I don&#8217;t mean with just test 154!<\/p>\n\n\n\n<p>Consider yourself invited to join <a href=\"https:\/\/curl.se\/docs\/irc.html\">the #curl IRC channel<\/a> and chat if you want live reports or want to help out!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fund<\/h2>\n\n\n\n<p>You too can fund me to do curl work. <a href=\"https:\/\/curl.se\/support.html\">Get in touch<\/a>!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Thanks to funding by ISRG (via Google), we merged the hyper powered HTTP back-end into curl earlier this year as an alternative HTTP\/1 and HTTP\/2 implementation. Previously, there was only one way to do HTTP\/1 and 2 in curl. Backends Core libcurl functionality can be powered by optional and alternative backends in a way that &hellip; <a href=\"https:\/\/daniel.haxx.se\/blog\/2021\/05\/28\/taking-hyper-curl-further\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Taking hyper-curl further<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":5,"featured_media":13959,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[33,406,500,471],"class_list":["post-16797","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-curl","tag-curl-and-libcurl","tag-funding","tag-hyper","tag-wolfssl"],"_links":{"self":[{"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/posts\/16797","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/comments?post=16797"}],"version-history":[{"count":20,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/posts\/16797\/revisions"}],"predecessor-version":[{"id":16889,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/posts\/16797\/revisions\/16889"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/media\/13959"}],"wp:attachment":[{"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/media?parent=16797"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/categories?post=16797"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/tags?post=16797"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}