PageSourceSearch

https://uvicorn.dev/server-behavior/

html uvicorn.dev collected 2026-09-24 17:15:14 UTC 50,257 bytes, 1,528 lines download raw bytes

1
2<!doctype html>
3<html lang="en" class="no-js">
4  <head>
5    
6      <meta charset="utf-8">
7      <meta name="viewport" content="width=device-width,initial-scale=1">
8      
9        <meta name="description" content="The lightning-fast ASGI server.">
10      
11      
12      
13        <link rel="canonical" href="https://uvicorn.dev/server-behavior/">
14      
15      
16        <link rel="prev" href="../settings/">
17      
18      
19        <link rel="next" href="../concepts/asgi/">
20      
21      
22        
23      
24      
25      <link rel="icon" href="../uvicorn.png">
26      <meta name="generator" content="zensical-0.0.57">
27    
28    
29      
30        <title>Server Behavior - Uvicorn</title>
31      
32    
33    
34      
35        
36      
37      <link rel="stylesheet" href="../assets/stylesheets/modern/main.5da3a30f.min.css">
38      
39        
40          
41        
42        <link rel="stylesheet" href="../assets/stylesheets/modern/palette.812a03bb.min.css">
43      
44      
45
46
47    
48    
49      
50    
51    
52      
53        
54        
55        <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
56        <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Inter:300,300i,400,400i,500,500i,700,700i%7CJetBrains+Mono:400,400i,700,700i&amp;display=fallback">
57        <style>:root{--md-text-font:"Inter";--md-code-font:"JetBrains Mono"}</style>
58      
59    
60    
61      <link rel="stylesheet" href="../css/extra.css">
62    
63    
63<script>__md_scope=new URL("..",location),__md_scope.pathname.endsWith("/")||(__md_scope=new URL(__md_scope.pathname+"/",location)),__md_hash=e=>[...e].reduce(((e,t)=>(e<<5)-e+t.charCodeAt(0)),0),__md_get=(e,t=localStorage,_=__md_scope)=>JSON.parse(t.getItem(_.pathname+"."+e)),__md_set=(e,t,_=localStorage,a=__md_scope)=>{try{_.setItem(a.pathname+"."+e,JSON.stringify(t))}catch(e){}},document.documentElement.setAttribute("data-platform",navigator.platform)</script>
63
64    
65      
66  
67
68
69  
70  
71
72<script id="__analytics">function __md_analytics(){function e(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],e("js",new Date),e("config","G-KTS6TXPD85"),document.addEventListener("DOMContentLoaded",(function(){document.forms.search&&document.forms.search.query.addEventListener("blur",(function(){this.value&&e("event","search",{search_term:this.value})}));document$.subscribe((function(){var t=document.forms.feedback;if(void 0!==t)for(var a of t.querySelectorAll("[type=submit]"))a.addEventListener("click",(function(a){a.preventDefault();var n=document.location.pathname,d=this.getAttribute("data-md-value");e("event","feedback",{page:n,data:d}),t.firstElementChild.disabled=!0;var r=t.querySelector(".md-feedback__note [data-md-value='"+d+"']");r&&(r.hidden=!1)})),t.hidden=!1})),location$.subscribe((function(t){e("config","G-KTS6TXPD85",{page_path:t.pathname})}))}));var t=document.createElement("script");t.async=!0,t.src="https://www.googletagmanager.com/gtag/js?id=G-KTS6TXPD85",document.getElementById("__analytics").insertAdjacentElement("afterEnd",t)}</script>
72
73  
74    
74<script>"undefined"!=typeof __md_analytics&&__md_analytics()</script>
74
75  
76
77    
78    
79  
80  
80<script>
81    // Redirect starlette.io to starlette.dev
82    if (window.location.hostname === 'www.uvicorn.org' || window.location.hostname === 'uvicorn.org') {
83      const newUrl = window.location.href.replace(/^https?:\/\/(www\.)?uvicorn\.org/, 'https://uvicorn.dev');
84      window.location.replace(newUrl);
85    }
86  </script>
86
87
88  </head>
89  
90  
91    
92    
93      
94    
95    
96    
97    
98    <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo">
99  
100    
101    <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
102    <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
103    <label class="md-overlay" for="__drawer" aria-label="Navigation"></label>
104    <div data-md-component="skip">
105      
106        
107        <a href="#server-behavior" class="md-skip">
108          Skip to content
109        </a>
110      
111    </div>
112    <div data-md-component="announce">
113      
114    </div>
115    
116    
117      
118
119  
120
121<header class="md-header md-header--shadow" data-md-component="header">
122  <nav class="md-header__inner md-grid" aria-label="Header">
123    <a href="./.." title="Uvicorn" class="md-header__button md-logo" aria-label="Uvicorn" data-md-component="logo">
124      
125  <img src="../uvicorn.png" alt="Uvicorn">
126
127    </a>
128    <label class="md-header__button md-icon" for="__drawer" aria-label="Navigation">
129      
130      <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-menu" viewBox="0 0 24 24"><path d="M4 5h16M4 12h16M4 19h16"/></svg>
131    </label>
132    <div class="md-header__title" data-md-component="header-title">
133      <div class="md-header__ellipsis">
134        <div class="md-header__topic">
135          <span class="md-ellipsis">
136            Uvicorn
137          </span>
138        </div>
139        <div class="md-header__topic" data-md-component="header-topic">
140          <span class="md-ellipsis">
141            
142              Server Behavior
143            
144          </span>
145        </div>
146      </div>
147    </div>
148    
149      
150        <form class="md-header__option" data-md-component="palette">
151  
152    
153    
154    
155    <input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo"  aria-label="Switch to dark mode"  type="radio" name="__palette" id="__palette_0">
156    
157      <label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_1" hidden>
158        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2a7 7 0 0 0-7 7c0 2.38 1.19 4.47 3 5.74V17a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-2.26c1.81-1.27 3-3.36 3-5.74a7 7 0 0 0-7-7M9 21a1 1 0 0 0 1 1h4a1 1 0 0 0 1-1v-1H9z"/></svg>
159      </label>
160    
161  
162    
163    
164    
165    <input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="blue" data-md-color-accent="indigo"  aria-label="Switch to light mode"  type="radio" name="__palette" id="__palette_1">
166    
167      <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_0" hidden>
168        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2a7 7 0 0 1 7 7c0 2.38-1.19 4.47-3 5.74V17a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1v-2.26C6.19 13.47 5 11.38 5 9a7 7 0 0 1 7-7M9 21v-1h6v1a1 1 0 0 1-1 1h-4a1 1 0 0 1-1-1m3-17a5 5 0 0 0-5 5c0 2.05 1.23 3.81 3 4.58V16h4v-2.42c1.77-.77 3-2.53 3-4.58a5 5 0 0 0-5-5"/></svg>
169      </label>
170    
171  
172</form>
173      
174    
175    
176      
176<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
176
177    
178    
179    
180      
181      
182        <label class="md-header__button md-icon" for="__search" aria-label="Search">
183          
184          <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-search" viewBox="0 0 24 24"><path d="m21 21-4.34-4.34"/><circle cx="11" cy="11" r="8"/></svg>
185        </label>
186        <div class="md-search" data-md-component="search" role="dialog" aria-label="Search">
187  <button type="button" class="md-search__button">
188    Search
189  </button>
190</div>
191      
192    
193    <div class="md-header__source">
194      
195        <a href="https://github.com/Kludex/uvicorn" title="Go to repository" class="md-source" data-md-component="source">
196  <div class="md-source__icon md-icon">
197    
198    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.3.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2026 Fonticons, Inc.--><path fill="currentColor" d="M216.5 362.5c-66-8-112.5-55.5-112.5-117 0-25 9-52 24-70-6.5-16.5-5.5-51.5 2-66 20-2.5 47 8 63 22.5 19-6 39-9 63.5-9s44.5 3 62.5 8.5c15.5-14 43-24.5 63-22 7 13.5 8 48.5 1.5 65.5 16 19 24.5 44.5 24.5 70.5 0 61.5-46.5 108-113.5 116.5 17 11 28.5 35 28.5 62.5v52c0 15 12.5 23.5 27.5 17.5C441 459.5 512 369 512 257 512 115.5 397 0 255.5 0S0 115.5 0 257c0 111 70.5 203 165.5 237.5 13.5 5 26.5-4 26.5-17.5v-40c-7 3-16 5-24 5-33 0-52.5-18-66.5-51.5-5.5-13.5-11.5-21.5-23-23-6-.5-8-3-8-6 0-6 10-10.5 20-10.5 14.5 0 27 9 40 27.5 10 14.5 20.5 21 33 21s20.5-4.5 32-16c8.5-8.5 15-16 21-21"/></svg>
199  </div>
200  <div class="md-source__repository">
201    Kludex/uvicorn
202  </div>
203</a>
204      
205    </div>
206  </nav>
207  
208</header>
209    
210    <div class="md-container" data-md-component="container">
211      
212      
213        
214          
215        
216      
217      <main class="md-main" data-md-component="main">
218        <div class="md-main__inner md-grid">
219          
220            
221              
222              <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
223                <div class="md-sidebar__scrollwrap">
224                  <div class="md-sidebar__inner">
225                    
226
227
228
229<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
230  <label class="md-nav__title" for="__drawer">
231    <a href="./.." title="Uvicorn" class="md-nav__button md-logo" aria-label="Uvicorn" data-md-component="logo">
232      
233  <img src="../uvicorn.png" alt="Uvicorn">
234
235    </a>
236    Uvicorn
237  </label>
238  
239    <div class="md-nav__source">
240      <a href="https://github.com/Kludex/uvicorn" title="Go to repository" class="md-source" data-md-component="source">
241  <div class="md-source__icon md-icon">
242    
243    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.3.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2026 Fonticons, Inc.--><path fill="currentColor" d="M216.5 362.5c-66-8-112.5-55.5-112.5-117 0-25 9-52 24-70-6.5-16.5-5.5-51.5 2-66 20-2.5 47 8 63 22.5 19-6 39-9 63.5-9s44.5 3 62.5 8.5c15.5-14 43-24.5 63-22 7 13.5 8 48.5 1.5 65.5 16 19 24.5 44.5 24.5 70.5 0 61.5-46.5 108-113.5 116.5 17 11 28.5 35 28.5 62.5v52c0 15 12.5 23.5 27.5 17.5C441 459.5 512 369 512 257 512 115.5 397 0 255.5 0S0 115.5 0 257c0 111 70.5 203 165.5 237.5 13.5 5 26.5-4 26.5-17.5v-40c-7 3-16 5-24 5-33 0-52.5-18-66.5-51.5-5.5-13.5-11.5-21.5-23-23-6-.5-8-3-8-6 0-6 10-10.5 20-10.5 14.5 0 27 9 40 27.5 10 14.5 20.5 21 33 21s20.5-4.5 32-16c8.5-8.5 15-16 21-21"/></svg>
244  </div>
245  <div class="md-source__repository">
246    Kludex/uvicorn
247  </div>
248</a>
249    </div>
250  
251  <ul class="md-nav__list" data-md-scrollfix>
252    
253      
254      
255  
256  
257  
258  
259    <li class="md-nav__item">
260      <a href="./.." class="md-nav__link">
261        
262  
263  
264  <span class="md-ellipsis">
265    
266  
267  Welcome
268
269    
270  </span>
271  
272  
273
274      </a>
275    </li>
276  
277
278    
279      
280      
281  
282  
283  
284  
285    <li class="md-nav__item">
286      <a href="../installation/" class="md-nav__link">
287        
288  
289  
290  <span class="md-ellipsis">
291    
292  
293  Installation
294
295    
296  </span>
297  
298  
299
300      </a>
301    </li>
302  
303
304    
305      
306      
307  
308  
309  
310  
311    <li class="md-nav__item">
312      <a href="../settings/" class="md-nav__link">
313        
314  
315  
316  <span class="md-ellipsis">
317    
318  
319  Settings
320
321    
322  </span>
323  
324  
325
326      </a>
327    </li>
328  
329
330    
331      
332      
333  
334  
335    
336  
337  
338  
339    <li class="md-nav__item md-nav__item--active">
340      
341      
342      
343      
344        
345      
346      
347        <label class="md-nav__link md-nav__link--active" for="__toc">
348          
349  
350  
351  <span class="md-ellipsis">
352    
353  
354  Server Behavior
355
356    
357  </span>
358  
359  
360
361          <span class="md-nav__icon md-icon"></span>
362        </label>
363      
364      <a href="././" class="md-nav__link md-nav__link--active">
365        
366  
367  
368  <span class="md-ellipsis">
369    
370  
371  Server Behavior
372
373    
374  </span>
375  
376  
377
378      </a>
379      
380        
381
382
383<nav class="md-nav md-nav--secondary" aria-label="On this page">
384  
385  
386  
387    
388  
389  
390    <label class="md-nav__title" for="__toc">
391      <span class="md-nav__icon md-icon"></span>
392      On this page
393    </label>
394    <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
395      
396        <li class="md-nav__item">
397  <a href="#http-headers" class="md-nav__link">
398    <span class="md-ellipsis">
399      <span class="md-typeset">
400        HTTP Headers
401      </span>
402    </span>
403  </a>
404  
405</li>
406      
407        <li class="md-nav__item">
408  <a href="#flow-control" class="md-nav__link">
409    <span class="md-ellipsis">
410      <span class="md-typeset">
411        Flow Control
412      </span>
413    </span>
414  </a>
415  
416    <nav class="md-nav" aria-label="Flow Control">
417      <ul class="md-nav__list">
418        
419          <li class="md-nav__item">
420  <a href="#write-flow-control" class="md-nav__link">
421    <span class="md-ellipsis">
422      <span class="md-typeset">
423        Write flow control
424      </span>
425    </span>
426  </a>
427  
428</li>
429        
430          <li class="md-nav__item">
431  <a href="#read-flow-control" class="md-nav__link">
432    <span class="md-ellipsis">
433      <span class="md-typeset">
434        Read flow control
435      </span>
436    </span>
437  </a>
438  
439</li>
440        
441      </ul>
442    </nav>
443  
444</li>
445      
446        <li class="md-nav__item">
447  <a href="#request-and-response-bodies" class="md-nav__link">
448    <span class="md-ellipsis">
449      <span class="md-typeset">
450        Request and Response bodies
451      </span>
452    </span>
453  </a>
454  
455    <nav class="md-nav" aria-label="Request and Response bodies">
456      <ul class="md-nav__list">
457        
458          <li class="md-nav__item">
459  <a href="#response-completion" class="md-nav__link">
460    <span class="md-ellipsis">
461      <span class="md-typeset">
462        Response completion
463      </span>
464    </span>
465  </a>
466  
467</li>
468        
469          <li class="md-nav__item">
470  <a href="#expect-100-continue" class="md-nav__link">
471    <span class="md-ellipsis">
472      <span class="md-typeset">
473        Expect: 100-Continue
474      </span>
475    </span>
476  </a>
477  
478</li>
479        
480          <li class="md-nav__item">
481  <a href="#head-requests" class="md-nav__link">
482    <span class="md-ellipsis">
483      <span class="md-typeset">
484        HEAD requests
485      </span>
486    </span>
487  </a>
488  
489</li>
490        
491      </ul>
492    </nav>
493  
494</li>
495      
496        <li class="md-nav__item">
497  <a href="#timeouts" class="md-nav__link">
498    <span class="md-ellipsis">
499      <span class="md-typeset">
500        Timeouts
501      </span>
502    </span>
503  </a>
504  
505</li>
506      
507        <li class="md-nav__item">
508  <a href="#resource-limits" class="md-nav__link">
509    <span class="md-ellipsis">
510      <span class="md-typeset">
511        Resource Limits
512      </span>
513    </span>
514  </a>
515  
516    <nav class="md-nav" aria-label="Resource Limits">
517      <ul class="md-nav__list">
518        
519          <li class="md-nav__item">
520  <a href="#concurrency-and-backlog" class="md-nav__link">
521    <span class="md-ellipsis">
522      <span class="md-typeset">
523        Concurrency and backlog
524      </span>
525    </span>
526  </a>
527  
528</li>
529        
530      </ul>
531    </nav>
532  
533</li>
534      
535        <li class="md-nav__item">
536  <a href="#server-errors" class="md-nav__link">
537    <span class="md-ellipsis">
538      <span class="md-typeset">
539        Server Errors
540      </span>
541    </span>
542  </a>
543  
544    <nav class="md-nav" aria-label="Server Errors">
545      <ul class="md-nav__list">
546        
547          <li class="md-nav__item">
548  <a href="#exceptions" class="md-nav__link">
549    <span class="md-ellipsis">
550      <span class="md-typeset">
551        Exceptions
552      </span>
553    </span>
554  </a>
555  
556</li>
557        
558          <li class="md-nav__item">
559  <a href="#invalid-responses" class="md-nav__link">
560    <span class="md-ellipsis">
561      <span class="md-typeset">
562        Invalid responses
563      </span>
564    </span>
565  </a>
566  
567</li>
568        
569      </ul>
570    </nav>
571  
572</li>
573      
574        <li class="md-nav__item">
575  <a href="#graceful-process-shutdown" class="md-nav__link">
576    <span class="md-ellipsis">
577      <span class="md-typeset">
578        Graceful Process Shutdown
579      </span>
580    </span>
581  </a>
582  
583</li>
584      
585        <li class="md-nav__item">
586  <a href="#http-pipelining" class="md-nav__link">
587    <span class="md-ellipsis">
588      <span class="md-typeset">
589        HTTP Pipelining
590      </span>
591    </span>
592  </a>
593  
594</li>
595      
596    </ul>
597  
598</nav>
599      
600    </li>
601  
602
603    
604      
605      
606  
607  
608  
609  
610    
611    
612    
613    
614      
615        
616        
617      
618    
619    
620    <li class="md-nav__item md-nav__item--section md-nav__item--nested">
621      
622        
623        
624        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
625        
626          
627          <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="">
628            
629  
630  
631  <span class="md-ellipsis">
632    
633  
634  Concepts
635
636    
637  </span>
638  
639  
640
641            <span class="md-nav__icon md-icon"></span>
642          </label>
643        
644        <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
645          <label class="md-nav__title" for="__nav_5">
646            <span class="md-nav__icon md-icon"></span>
647            
648  
649  Concepts
650
651          </label>
652          <ul class="md-nav__list" data-md-scrollfix>
653            
654              
655                
656  
657  
658  
659  
660    <li class="md-nav__item">
661      <a href="../concepts/asgi/" class="md-nav__link">
662        
663  
664  
665  <span class="md-ellipsis">
666    
667  
668  ASGI
669
670    
671  </span>
672  
673  
674
675      </a>
676    </li>
677  
678
679              
680            
681              
682                
683  
684  
685  
686  
687    <li class="md-nav__item">
688      <a href="../concepts/lifespan/" class="md-nav__link">
689        
690  
691  
692  <span class="md-ellipsis">
693    
694  
695  Lifespan
696
697    
698  </span>
699  
700  
701
702      </a>
703    </li>
704  
705
706              
707            
708              
709                
710  
711  
712  
713  
714    <li class="md-nav__item">
715      <a href="../concepts/http2/" class="md-nav__link">
716        
717  
718  
719  <span class="md-ellipsis">
720    
721  
722  HTTP/2
723
724    
725  </span>
726  
727  
728
729      </a>
730    </li>
731  
732
733              
734            
735              
736                
737  
738  
739  
740  
741    <li class="md-nav__item">
742      <a href="../concepts/logging/" class="md-nav__link">
743        
744  
745  
746  <span class="md-ellipsis">
747    
748  
749  Logging
750
751    
752  </span>
753  
754  
755
756      </a>
757    </li>
758  
759
760              
761            
762              
763                
764  
765  
766  
767  
768    <li class="md-nav__item">
769      <a href="../concepts/http-protocols/" class="md-nav__link">
770        
771  
772  
773  <span class="md-ellipsis">
774    
775  
776  HTTP Protocols
777
778    
779  </span>
780  
781  
782
783      </a>
784    </li>
785  
786
787              
788            
789              
790                
791  
792  
793  
794  
795    <li class="md-nav__item">
796      <a href="../concepts/websockets/" class="md-nav__link">
797        
798  
799  
800  <span class="md-ellipsis">
801    
802  
803  WebSockets
804
805    
806  </span>
807  
808  
809
810      </a>
811    </li>
812  
813
814              
815            
816              
817                
818  
819  
820  
821  
822    <li class="md-nav__item">
823      <a href="../concepts/event-loop/" class="md-nav__link">
824        
825  
826  
827  <span class="md-ellipsis">
828    
829  
830  Event Loop
831
832    
833  </span>
834  
835  
836
837      </a>
838    </li>
839  
840
841              
842            
843          </ul>
844        </nav>
845      
846    </li>
847  
848
849    
850      
851      
852  
853  
854  
855  
856    
857    
858    
859    
860      
861        
862        
863      
864    
865    
866    <li class="md-nav__item md-nav__item--section md-nav__item--nested">
867      
868        
869        
870        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" >
871        
872          
873          <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="">
874            
875  
876  
877  <span class="md-ellipsis">
878    
879  
880  Deployment
881
882    
883  </span>
884  
885  
886
887            <span class="md-nav__icon md-icon"></span>
888          </label>
889        
890        <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
891          <label class="md-nav__title" for="__nav_6">
892            <span class="md-nav__icon md-icon"></span>
893            
894  
895  Deployment
896
897          </label>
898          <ul class="md-nav__list" data-md-scrollfix>
899            
900              
901                
902  
903  
904  
905  
906    <li class="md-nav__item">
907      <a href="../deployment/" class="md-nav__link">
908        
909  
910  
911  <span class="md-ellipsis">
912    
913  
914  Deployment
915
916    
917  </span>
918  
919  
920
921      </a>
922    </li>
923  
924
925              
926            
927              
928                
929  
930  
931  
932  
933    <li class="md-nav__item">
934      <a href="../deployment/docker/" class="md-nav__link">
935        
936  
937  
938  <span class="md-ellipsis">
939    
940  
941  Docker
942
943    
944  </span>
945  
946  
947
948      </a>
949    </li>
950  
951
952              
953            
954          </ul>
955        </nav>
956      
957    </li>
958  
959
960    
961      
962      
963  
964  
965  
966  
967    <li class="md-nav__item">
968      <a href="../release-notes/" class="md-nav__link">
969        
970  
971  
972  <span class="md-ellipsis">
973    
974  
975  Release Notes
976
977    
978  </span>
979  
980  
981
982      </a>
983    </li>
984  
985
986    
987      
988      
989  
990  
991  
992  
993    <li class="md-nav__item">
994      <a href="../contributing/" class="md-nav__link">
995        
996  
997  
998  <span class="md-ellipsis">
999    
1000  
1001  Contributing
1002
1003    
1004  </span>
1005  
1006  
1007
1008      </a>
1009    </li>
1010  
1011
1012    
1013  </ul>
1014  <div class="md-nav__sponsors">
1015    <p class="md-nav__sponsors-title">Sponsors</p>
1016    <a href="https://fastapi.tiangolo.com" title="FastAPI" class="md-nav__sponsor">
1017      <img src="../img/fastapi-logo.png" alt="FastAPI">
1018    </a>
1019    <a href="https://github.com/sponsors/Kludex" class="md-nav__sponsor-cta">
1020      Become a sponsor! ❤️
1021    </a>
1022  </div>
1023</nav>
1024                  </div>
1025                </div>
1026              </div>
1027            
1028            
1029              
1030              <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
1031                <div class="md-sidebar__scrollwrap">
1032                  
1033                    
1034                    
1035                    
1036                      
1037                    
1038                    
1039                      <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
1040                      <div class="md-sidebar-button__wrapper">
1041                        <label class="md-sidebar-button" for="__toc"></label>
1042                      </div>
1043                    
1044                  
1045                  <div class="md-sidebar__inner">
1046                    
1047
1048
1049<nav class="md-nav md-nav--secondary" aria-label="On this page">
1050  
1051  
1052  
1053    
1054  
1055  
1056    <label class="md-nav__title" for="__toc">
1057      <span class="md-nav__icon md-icon"></span>
1058      On this page
1059    </label>
1060    <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
1061      
1062        <li class="md-nav__item">
1063  <a href="#http-headers" class="md-nav__link">
1064    <span class="md-ellipsis">
1065      <span class="md-typeset">
1066        HTTP Headers
1067      </span>
1068    </span>
1069  </a>
1070  
1071</li>
1072      
1073        <li class="md-nav__item">
1074  <a href="#flow-control" class="md-nav__link">
1075    <span class="md-ellipsis">
1076      <span class="md-typeset">
1077        Flow Control
1078      </span>
1079    </span>
1080  </a>
1081  
1082    <nav class="md-nav" aria-label="Flow Control">
1083      <ul class="md-nav__list">
1084        
1085          <li class="md-nav__item">
1086  <a href="#write-flow-control" class="md-nav__link">
1087    <span class="md-ellipsis">
1088      <span class="md-typeset">
1089        Write flow control
1090      </span>
1091    </span>
1092  </a>
1093  
1094</li>
1095        
1096          <li class="md-nav__item">
1097  <a href="#read-flow-control" class="md-nav__link">
1098    <span class="md-ellipsis">
1099      <span class="md-typeset">
1100        Read flow control
1101      </span>
1102    </span>
1103  </a>
1104  
1105</li>
1106        
1107      </ul>
1108    </nav>
1109  
1110</li>
1111      
1112        <li class="md-nav__item">
1113  <a href="#request-and-response-bodies" class="md-nav__link">
1114    <span class="md-ellipsis">
1115      <span class="md-typeset">
1116        Request and Response bodies
1117      </span>
1118    </span>
1119  </a>
1120  
1121    <nav class="md-nav" aria-label="Request and Response bodies">
1122      <ul class="md-nav__list">
1123        
1124          <li class="md-nav__item">
1125  <a href="#response-completion" class="md-nav__link">
1126    <span class="md-ellipsis">
1127      <span class="md-typeset">
1128        Response completion
1129      </span>
1130    </span>
1131  </a>
1132  
1133</li>
1134        
1135          <li class="md-nav__item">
1136  <a href="#expect-100-continue" class="md-nav__link">
1137    <span class="md-ellipsis">
1138      <span class="md-typeset">
1139        Expect: 100-Continue
1140      </span>
1141    </span>
1142  </a>
1143  
1144</li>
1145        
1146          <li class="md-nav__item">
1147  <a href="#head-requests" class="md-nav__link">
1148    <span class="md-ellipsis">
1149      <span class="md-typeset">
1150        HEAD requests
1151      </span>
1152    </span>
1153  </a>
1154  
1155</li>
1156        
1157      </ul>
1158    </nav>
1159  
1160</li>
1161      
1162        <li class="md-nav__item">
1163  <a href="#timeouts" class="md-nav__link">
1164    <span class="md-ellipsis">
1165      <span class="md-typeset">
1166        Timeouts
1167      </span>
1168    </span>
1169  </a>
1170  
1171</li>
1172      
1173        <li class="md-nav__item">
1174  <a href="#resource-limits" class="md-nav__link">
1175    <span class="md-ellipsis">
1176      <span class="md-typeset">
1177        Resource Limits
1178      </span>
1179    </span>
1180  </a>
1181  
1182    <nav class="md-nav" aria-label="Resource Limits">
1183      <ul class="md-nav__list">
1184        
1185          <li class="md-nav__item">
1186  <a href="#concurrency-and-backlog" class="md-nav__link">
1187    <span class="md-ellipsis">
1188      <span class="md-typeset">
1189        Concurrency and backlog
1190      </span>
1191    </span>
1192  </a>
1193  
1194</li>
1195        
1196      </ul>
1197    </nav>
1198  
1199</li>
1200      
1201        <li class="md-nav__item">
1202  <a href="#server-errors" class="md-nav__link">
1203    <span class="md-ellipsis">
1204      <span class="md-typeset">
1205        Server Errors
1206      </span>
1207    </span>
1208  </a>
1209  
1210    <nav class="md-nav" aria-label="Server Errors">
1211      <ul class="md-nav__list">
1212        
1213          <li class="md-nav__item">
1214  <a href="#exceptions" class="md-nav__link">
1215    <span class="md-ellipsis">
1216      <span class="md-typeset">
1217        Exceptions
1218      </span>
1219    </span>
1220  </a>
1221  
1222</li>
1223        
1224          <li class="md-nav__item">
1225  <a href="#invalid-responses" class="md-nav__link">
1226    <span class="md-ellipsis">
1227      <span class="md-typeset">
1228        Invalid responses
1229      </span>
1230    </span>
1231  </a>
1232  
1233</li>
1234        
1235      </ul>
1236    </nav>
1237  
1238</li>
1239      
1240        <li class="md-nav__item">
1241  <a href="#graceful-process-shutdown" class="md-nav__link">
1242    <span class="md-ellipsis">
1243      <span class="md-typeset">
1244        Graceful Process Shutdown
1245      </span>
1246    </span>
1247  </a>
1248  
1249</li>
1250      
1251        <li class="md-nav__item">
1252  <a href="#http-pipelining" class="md-nav__link">
1253    <span class="md-ellipsis">
1254      <span class="md-typeset">
1255        HTTP Pipelining
1256      </span>
1257    </span>
1258  </a>
1259  
1260</li>
1261      
1262    </ul>
1263  
1264</nav>
1265                  </div>
1266                </div>
1267              </div>
1268            
1269          
1270          
1271            <div class="md-content" data-md-component="content">
1272              
1273                
1274
1275
1276
1277  
1278
1279
1280              
1281              <article class="md-content__inner md-typeset">
1282                
1283                  
1284  
1285  
1286
1287
1288<h1 id="server-behavior">Server Behavior<a class="headerlink" href="#server-behavior" title="Permanent link">&para;</a></h1>
1289<p>Uvicorn is designed with particular attention to connection and resource management, in order to provide a robust server implementation. It aims to ensure graceful behavior to either server or client errors, and resilience to poor client behavior or denial of service attacks.</p>
1290<h2 id="http-headers">HTTP Headers<a class="headerlink" href="#http-headers" title="Permanent link">&para;</a></h2>
1291<p>The <code>Server</code> and <code>Date</code> headers are added to all outgoing requests.</p>
1292<p>If a <code>Connection: Close</code> header is included then Uvicorn will close the connection after the response. Otherwise connections will stay open, pending the keep-alive timeout.</p>
1293<p>If a <code>Content-Length</code> header is included then Uvicorn will ensure that the content length of the response body matches the value in the header, and raise an error otherwise.</p>
1294<p>If no <code>Content-Length</code> header is included then Uvicorn will use chunked encoding for the response body, and will set a <code>Transfer-Encoding</code> header if required.</p>
1295<p>If a <code>Transfer-Encoding</code> header is included then any <code>Content-Length</code> header will be ignored.</p>
1296<p>HTTP headers are mandated to be case-insensitive. Uvicorn will always send response headers strictly in lowercase.</p>
1297<hr />
1298<h2 id="flow-control">Flow Control<a class="headerlink" href="#flow-control" title="Permanent link">&para;</a></h2>
1299<p>Proper flow control ensures that large amounts of data do not become buffered on the transport when either side of a connection is sending data faster than its counterpart is able to handle.</p>
1300<h3 id="write-flow-control">Write flow control<a class="headerlink" href="#write-flow-control" title="Permanent link">&para;</a></h3>
1301<p>If the write buffer passes a high water mark, then Uvicorn ensures the ASGI <code>send</code> messages will only return once the write buffer has been drained below the low water mark.</p>
1302<h3 id="read-flow-control">Read flow control<a class="headerlink" href="#read-flow-control" title="Permanent link">&para;</a></h3>
1303<p>Uvicorn will pause reading from a transport once the buffered request body hits a high water mark, and will only resume once <code>receive</code> has been called, or once the response has been sent.</p>
1304<hr />
1305<h2 id="request-and-response-bodies">Request and Response bodies<a class="headerlink" href="#request-and-response-bodies" title="Permanent link">&para;</a></h2>
1306<h3 id="response-completion">Response completion<a class="headerlink" href="#response-completion" title="Permanent link">&para;</a></h3>
1307<p>Once a response has been sent, Uvicorn will no longer buffer any remaining request body. Any later calls to <code>receive</code> will return an <code>http.disconnect</code> message.</p>
1308<p>Together with the read flow control, this behavior ensures that responses that return without reading the request body will not stream any substantial amounts of data into memory.</p>
1309<h3 id="expect-100-continue">Expect: 100-Continue<a class="headerlink" href="#expect-100-continue" title="Permanent link">&para;</a></h3>
1310<p>The <code>Expect: 100-Continue</code> header may be sent by clients to require a confirmation from the server before uploading the request body. This can be used to ensure that large request bodies are only sent once the client has confirmation that the server is willing to accept the request.</p>
1311<p>Uvicorn ensures that any required <code>100 Continue</code> confirmations are only sent if the ASGI application calls <code>receive</code> to read the request body.</p>
1312<p>Note that proxy configurations may not necessarily forward on <code>Expect: 100-Continue</code> headers. In particular, Nginx defaults to buffering request bodies, and automatically sends <code>100 Continues</code> rather than passing the header on to the upstream server.</p>
1313<h3 id="head-requests">HEAD requests<a class="headerlink" href="#head-requests" title="Permanent link">&para;</a></h3>
1314<p>Uvicorn will strip any response body from HTTP requests with the <code>HEAD</code> method.</p>
1315<p>Applications should generally treat <code>HEAD</code> requests in the same manner as <code>GET</code> requests, in order to ensure that identical headers are sent in both cases, and that any ASGI middleware that modifies the headers will operate identically in either case.</p>
1316<p>One exception to this might be if your application serves large file downloads, in 
1316which case you might wish to only generate the response headers.</p>
1317<hr />
1318<h2 id="timeouts">Timeouts<a class="headerlink" href="#timeouts" title="Permanent link">&para;</a></h2>
1319<p>Uvicorn provides the following timeouts:</p>
1320<ul>
1321<li>Keep-Alive. Defaults to 5 seconds. Between requests, connections must receive new data within this period or be disconnected.</li>
1322</ul>
1323<hr />
1324<h2 id="resource-limits">Resource Limits<a class="headerlink" href="#resource-limits" title="Permanent link">&para;</a></h2>
1325<p>Uvicorn provides the following resource limiting:</p>
1326<ul>
1327<li>Concurrency (<code>--limit-concurrency</code>). Defaults to <code>None</code>. If set, this provides a maximum number of concurrent tasks <em>or</em> open connections that should be allowed. Any new requests that arrive once this limit has been reached will result in a "503 Service Unavailable" response. Setting this value to a limit that you know your servers are able to support will help ensure reliable resource usage, even against significantly over-resourced servers.</li>
1328<li>Backlog (<code>--backlog</code>). Defaults to <code>2048</code>. The maximum number of connections the operating system will hold in the socket's accept queue before the worker accepts them. This is passed straight to the listening socket's <code>listen()</code> call.</li>
1329<li>Max requests (<code>--limit-max-requests</code>). Defaults to <code>None</code>. If set, this provides a maximum number of HTTP requests that will be serviced before terminating a process. Together with a process manager this can be used to prevent memory leaks from impacting long running processes.</li>
1330</ul>
1331<h3 id="concurrency-and-backlog">Concurrency and backlog<a class="headerlink" href="#concurrency-and-backlog" title="Permanent link">&para;</a></h3>
1332<p><code>--limit-concurrency</code> and <code>--backlog</code> operate at different layers and do not interact. It is a common misconception that requests refused by <code>--limit-concurrency</code> are held in the <code>--backlog</code>; they are not.</p>
1333<p><strong><code>--limit-concurrency</code> is an application-level gate.</strong> When a request's headers have been fully received, Uvicorn checks whether the number of open connections <em>or</em> the number of in-flight request/response tasks has reached the limit. If so, it responds immediately with a "503 Service Unavailable" - the request is <strong>not</strong> queued and does <strong>not</strong> wait for a slot to free up. Both counts include the connection serving the current request, so a value of <code>N</code> admits at most <code>N - 1</code> <em>other</em> concurrent requests; in particular a value of <code>1</code> refuses every request. Note that the open-connection count includes idle keep-alive connections, so those also consume the budget: once the number of open connections reaches the limit, further requests are refused even if few requests are actively being processed. Because the check only runs after a connection has been accepted, <code>--limit-concurrency</code> does not stop connections from being accepted in the first place - that is governed by <code>--backlog</code>.</p>
1334<p><strong><code>--backlog</code> is an OS-level socket setting.</strong> It bounds the kernel's accept queue: connections that have completed the TCP handshake but that the worker has not yet <code>accept()</code>ed. Uvicorn accepts new connections eagerly, so under normal operation this queue stays near-empty and the setting has little observable effect. It only comes into play when connections arrive faster than the worker can accept them (for example during a large burst, or while the event loop is blocked). Once the queue is full the kernel stops accepting new connection attempts, and clients see a connection failure or timeout rather than a 503 (TCP will typically retry). Note that <code>--backlog</code> does not limit the number of connections a worker will ultimately serve - it only limits how many may sit <em>unaccepted</em> at once.</p>
1335<p>To make the distinction concrete, consider <code>--limit-concurrency 5</code> with a slow application and a burst of simultaneous requests: once the limit is reached, the excess requests receive a 503 essentially immediately - they are not held in the backlog and processed later. To instead <em>queue</em> excess load, put a reverse proxy (e.g. nginx) in front of Uvicorn, or scale out with more workers.</p>
1336<hr />
1337<h2 id="server-errors">Server Errors<a class="headerlink" href="#server-errors" title="Permanent link">&para;</a></h2>
1338<p>Server errors will be logged at the <code>error</code> log level. All logging defaults to being written to <code>stdout</code>.</p>
1339<h3 id="exceptions">Exceptions<a class="headerlink" href="#exceptions" title="Permanent link">&para;</a></h3>
1340<p>If an exception is raised by an ASGI application, and a response has not yet been sent on the connection, then a <code>500 Server Error</code> HTTP response will be sent.</p>
1341<p>Uvicorn sends the headers and the status code as soon as it receives from the ASGI application. This means that if the application sends a <a href="https://asgi.readthedocs.io/en/latest/specs/www.html#response-start-sen
1341d-event">Response Start</a>
1342message with a status code of <code>200 OK</code>, and then an exception is raised, the response will still be sent with a status code of <code>200 OK</code>.</p>
1343<h3 id="invalid-responses">Invalid responses<a class="headerlink" href="#invalid-responses" title="Permanent link">&para;</a></h3>
1344<p>Uvicorn will ensure that ASGI applications send the correct sequence of messages, and will raise errors otherwise. This includes checking for no response sent, partial response sent, or invalid message sequences being sent.</p>
1345<hr />
1346<h2 id="graceful-process-shutdown">Graceful Process Shutdown<a class="headerlink" href="#graceful-process-shutdown" title="Permanent link">&para;</a></h2>
1347<p>Graceful process shutdowns are particularly important during a restart period. During this period you want to:</p>
1348<ul>
1349<li>Start a number of new server processes to handle incoming requests, listening on the existing socket.</li>
1350<li>Stop the previous server processes from listening on the existing socket.</li>
1351<li>Close any connections that are not currently waiting on an HTTP response, and wait for any other connections to finalize their HTTP responses.</li>
1352<li>Wait for any background tasks to run to completion, such as occurs when the ASGI application has sent the HTTP response, but the asyncio task has not yet run to completion.</li>
1353</ul>
1354<p>Uvicorn handles process shutdown gracefully, ensuring that connections are properly finalized, and all tasks have run to completion. During a shutdown period Uvicorn will ensure that responses and tasks must still complete within the configured timeout periods.</p>
1355<hr />
1356<h2 id="http-pipelining">HTTP Pipelining<a class="headerlink" href="#http-pipelining" title="Permanent link">&para;</a></h2>
1357<p>HTTP/1.1 provides support for sending multiple requests on a single connection, before having received each corresponding response. Servers are required to support HTTP pipelining, but it is now generally accepted to lead to implementation issues. It is not enabled on browsers, and may not necessarily be enabled on any proxies that the HTTP request passes through.</p>
1358<p>Uvicorn supports pipelining pragmatically. It will queue up any pipelined HTTP requests, and pause reading from the underlying transport. It will not start processing pipelined requests until each response has been dealt with in turn.</p>
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370  
1371
1372
1373
1374
1375                
1376              </article>
1377            </div>
1378          
1379          
1380  
1380<script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
1380
1381
1382<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
1382
1383        </div>
1384        
1385          <button type="button" class="md-top md-icon" data-md-component="top" hidden>
1386  
1387  <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-circle-arrow-up" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="m16 12-4-4-4 4M12 16V8"/></svg>
1388  Back to top
1389</button>
1390        
1391      </main>
1392      
1393        <footer class="md-footer">
1394  
1395    
1396      
1397      <nav class="md-footer__inner md-grid" aria-label="Footer" >
1398        
1399          
1400          <a href="../settings/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Settings">
1401            <div class="md-footer__button md-icon">
1402              
1403              <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-arrow-left" viewBox="0 0 24 24"><path d="m12 19-7-7 7-7M19 12H5"/></svg>
1404            </div>
1405            <div class="md-footer__title">
1406              <span class="md-footer__direction">
1407                Previous
1408              </span>
1409              <div class="md-ellipsis">
1410                Settings
1411              </div>
1412            </div>
1413          </a>
1414        
1415        
1416          
1417          <a href="../concepts/asgi/" class="md-footer__link md-footer__link--next" aria-label="Next: ASGI">
1418            <div class="md-footer__title">
1419              <span class="md-footer__direction">
1420                Next
1421              </span>
1422              <div class="md-ellipsis">
1423                ASGI
1424              </div>
1425            </div>
1426            <div class="md-footer__button md-icon">
1427              
1428              <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-arrow-right" viewBox="0 0 24 24"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
1429            </div>
1430          </a>
1431        
1432      </nav>
1433    
1434  
1435  <div class="md-footer-meta md-typeset">
1436    <div class="md-footer-meta__inner md-grid">
1437      <div class="md-copyright">
1438  
1439  
1440    Made with
1441    <a href="https://zensical.org/" target="_blank" rel="noopener">
1442      Zensical
1443    </a>
1444  
1445</div>
1446      
1447        
1448<div class="md-social">
1449  
1450    
1451    
1452    
1453    
1454      
1455      
1456    
1457    <a href="https://github.com/Kludex/uvicorn" target="_blank" rel="noopener" title="github.com" class="md-social__link">
1458      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.3.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2026 Fonticons, Inc.--><path fill="currentColor" d="M202.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1M496 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2m-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3m-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1"/></svg>
1459    </a>
1460  
1461    
1462    
1463    
1464    
1465      
1466      
1467    
1468    <a href="https://discord.com/invite/RxKUF5JuHs" target="_blank" rel="noopener" title="discord.com" class="md-social__link">
1469      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 7.3.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2026 Fonticons, Inc.--><path fill="currentColor" d="M492.5 69.8c-.2-.3-.4-.6-.8-.7-38.1-17.5-78.4-30-119.7-37.1-.4-.1-.8 0-1.1.1s-.6.4-.8.8c-5.5 9.9-10.5 20.2-14.9 30.6-44.6-6.8-89.9-6.8-134.4 0-4.5-10.5-9.5-20.7-15.1-30.6-.2-.3-.5-.6-.8-.8s-.7-.2-1.1-.2C162.5 39 122.2 51.5 84.1 69c-.3.1-.6.4-.8.7C7.1 183.5-13.8 294.6-3.6 404.2c0 .3.1.5.2.8s.3.4.5.6c44.4 32.9 94 58 146.8 74.2.4.1.8.1 1.1 0s.7-.4.9-.7c11.3-15.4 21.4-31.8 30-48.8.1-.2.2-.5.2-.8s0-.5-.1-.8-.2-.5-.4-.6-.4-.3-.7-.4c-15.8-6.1-31.2-13.4-45.9-21.9-.3-.2-.5-.4-.7-.6s-.3-.6-.3-.9 0-.6.2-.9.3-.5.6-.7c3.1-2.3 6.2-4.7 9.1-7.1.3-.2.6-.4.9-.4s.7 0 1 .1c96.2 43.9 200.4 43.9 295.5 0 .3-.1.7-.2 1-.2s.7.2.9.4c2.9 2.4 6 4.9 9.1 7.2.2.2.4.4.6.7s.2.6.2.9-.1.6-.3.9-.4.5-.6.6c-14.7 8.6-30 15.9-45.9 21.8-.2.1-.5.2-.7.4s-.3.4-.4.7-.1.5-.1.8.1.5.2.8c8.8 17 18.8 33.3 30 48.8.2.3.6.6.9.7s.8.1 1.1 0c52.9-16.2 102.6-41.3 147.1-74.2.2-.2.4-.4.5-.6s.2-.5.2-.8c12.3-126.8-20.5-236.9-86.9-334.5zm-302 267.7c-29 0-52.8-26.6-52.8-59.2s23.4-59.2 52.8-59.2c29.7 0 53.3 26.8 52.8 59.2 0 32.7-23.4 59.2-52.8 59.2m195.4 0c-29 0-52.8-26.6-52.8-59.2s23.4-59.2 52.8-59.2c29.7 0 53.3 26.8 52.8 59.2 0 32.7-23.2 59.2-52.8 59.2"/></svg>
1470    </a>
1471  
1472    
1473    
1474    
1475    
1476      
1477      
1478    
1479    <a href="https://x.com/marcelotryle" target="_blank" rel="noopener" title="x.com" class="md-social__link">
1480      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.3.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2026 Fonticons, Inc.-->
1480<path fill="currentColor" d="M459.4 151.7c.3 4.5.3 9.1.3 13.6 0 138.7-105.6 298.6-298.6 298.6-59.5 0-114.7-17.2-161.1-47.1 8.4 1 16.6 1.3 25.3 1.3 49.1 0 94.2-16.6 130.3-44.8-46.1-1-84.8-31.2-98.1-72.8 6.5 1 13 1.6 19.8 1.6 9.4 0 18.8-1.3 27.6-3.6-48.1-9.7-84.1-52-84.1-103v-1.3c14 7.8 30.2 12.7 47.4 13.3-28.3-18.8-46.8-51-46.8-87.4 0-19.5 5.2-37.4 14.3-53C87.4 130.8 165 172.4 252.1 176.9c-1.6-7.8-2.6-15.9-2.6-24C249.5 95.1 296.3 48 354.4 48c30.2 0 57.5 12.7 76.7 33.1 23.7-4.5 46.5-13.3 66.6-25.3-7.8 24.4-24.4 44.8-46.1 57.8 21.1-2.3 41.6-8.1 60.4-16.2-14.3 20.8-32.2 39.3-52.6 54.3"/></svg>
1481    </a>
1482  
1483    
1484    
1485    
1486    
1487      
1488      
1489    
1490    <a href="https://www.linkedin.com/in/marcelotryle" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link">
1491      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.3.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2026 Fonticons, Inc.--><path fill="currentColor" d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3M135.4 416H69V202.2h66.5V416zM102.2 96a38.5 38.5 0 1 1 0 77 38.5 38.5 0 1 1 0-77m282.1 320h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9z"/></svg>
1492    </a>
1493  
1494    
1495    
1496    
1497    
1498      
1499      
1500    
1501    <a href="https://fastapiexpert.com" target="_blank" rel="noopener" title="fastapiexpert.com" class="md-social__link">
1502      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.3.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2026 Fonticons, Inc.--><path fill="currentColor" d="M351.9 280H161c2.9 64.5 17.2 123.9 37.5 167.4 11.4 24.5 23.7 41.8 35.1 52.4 11.2 10.5 18.9 12.2 22.9 12.2s11.7-1.7 22.9-12.2c11.4-10.6 23.7-28 35.1-52.4 20.3-43.5 34.6-102.9 37.5-167.4zm-191-48h190.9c-2.8-64.5-17.1-123.9-37.4-167.4-11.4-24.4-23.7-41.8-35.1-52.4C268.1 1.7 260.4 0 256.4 0s-11.7 1.7-22.9 12.2c-11.4 10.6-23.7 28-35.1 52.4-20.3 43.5-34.6 102.9-37.5 167.4m-48 0c3.5-85.6 25.6-165.1 57.9-217.3C78.7 47.3 10.9 131.2 1.5 232zM1.5 280c9.4 100.8 77.2 184.7 169.3 217.3-32.3-52.2-54.4-131.7-57.9-217.3zm398.4 0c-3.5 85.6-25.6 165.1-57.9 217.3 92.1-32.7 159.9-116.5 169.3-217.3zm111.4-48C501.9 131.2 434.1 47.3 342 14.7c32.3 52.2 54.4 131.7 57.9 217.3z"/></svg>
1503    </a>
1504  
1505</div>
1506      
1507    </div>
1508  </div>
1509</footer>
1510      
1511    </div>
1512    <div class="md-dialog" data-md-component="dialog">
1513      <div class="md-dialog__inner md-typeset"></div>
1514    </div>
1515    
1516    
1517    
1518      
1519      
1520      
1520<script id="__config" type="application/json">{"annotate":null,"base":"..","features":["content.code.annotate","content.code.copy","content.tabs.link","navigation.footer","navigation.path","navigation.sections","navigation.top","navigation.tracking","search.suggest","search.highlight","toc.follow"],"search":"../assets/javascripts/workers/search.7d14d953.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script>
1520
1521    
1522    
1523      
1523<script src="../assets/javascripts/bundle.49251538.min.js"></script>
1523
1524      
1525    
1526  
1526<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"03a54d458289400ab1777c12e974d412","r":1,"spa":2}' crossorigin="anonymous"></script>
1526
1527</body>
1528</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.