https://http.dev/3

Submitted URL:
https://http.dev/3
Report Finished:

The outgoing links identified from the page

LinkText
https://datatracker.ietf.org/doc/html/rfc9000?utm_source=localhost%3A8080RFC 9000

JavaScript Variables · 14 found

Global JavaScript variables loaded on the window object of a page, are variables declared outside of functions and accessible from anywhere in the code within the current scope

NameType
onbeforetogglestring
documentPictureInPicturestring
onscrollendstring
plausiblestring
dstring
ustring
lstring
fstring
hstring
mstring

Console log messages · 1 found

Messages logged to the web console

TypeCategoryLog
logother
URL
https://http.dev/js/app.min.js?v=5my3eEk3
Text
%cYeah! %cLooks like you found this easteregg. %cCan you also find the others? font-family: Georgia, serif; font-size: 32px; color: #052962 font-family: Georgia, serif; font-size: 16px; color: #767676 font-family: Georgia, serif; font-size: 16px; color: #767676

HTML

The raw HTML body of the page

<!DOCTYPE html><html lang="en"><head><title>HTTP/3 explained</title><meta content="width=device-width, initial-scale=1" name="viewport"><meta content="IE=edge" http-equiv="X-UA-Compatible"><meta charset="utf-8"><meta content="What is 'HTTP/3'? Discover how to master HTTP/3, with free examples and code snippets." name="description"><link href="/css/app.min.css?v=5my3eEk3" rel="stylesheet"><link href="https://http.dev/humans.txt" rel="author" type="text/plain"><link href="https://http.dev/3" rel="canonical"><script async="" data-domain="http.dev" defer="" src="/a.js" type="text/javascript"></script><script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script><script type="application/ld+json">
{"@context":"https://schema.org","@type":"Article","headline":"HTTP/3","datePublished":"2022-06-18T08:00:00","dateModified":"2022-06-20T14:45:39","author":{"@type":"Person","image":"https://fili.com/static/img/fili-wiese.jpg","name":"Fili","alternateName":"Fili Wiese","url":"https://fili.com/","sameAs":["http://linkedin.com/in/filiwiese","http://twitter.com/filiwiese"],"brand":[{"@type":"Brand","name":"SearchBrothers","alternateName":["Search Brothers","SearchBrothers.com","SEO.Consulting","SEO.Services","SEO.Company"]},{"@type":"Brand","name":"Fili"}],"alumniOf":[{"@type":"Organization","url":"https://www.google.com/","name":"Google Inc.","sameAs":["https://en.wikipedia.org/wiki/Google","https://www.google.com/webmasters/"]}]},"publisher":{"@type":"Organization","name":"http.dev","logo":"https://http.dev/static/img/logo.png"},"mainEntityOfPage":"https://http.dev/3","description":"What is 'HTTP/3'? Discover how to master HTTP/3, with free examples and code snippets.","image":"https://http.dev/img/social/3.png?v=5my3eEk3"}</script><meta content="HTTP/3" name="title"><meta content="http.dev" property="og:site_name"><meta content="website" property="og:type"><meta content="https://http.dev/3" property="og:url"><meta content="HTTP/3" property="og:title"><meta content="What is 'HTTP/3'? Discover how to master HTTP/3, with free examples and code snippets." property="og:description"><meta content="https://http.dev/img/social/[email protected]?v=5my3eEk3" property="og:image"><meta content="summary_large_image" property="twitter:card"><meta content="https://http.dev/3" property="twitter:url"><meta content="HTTP/3" property="twitter:title"><meta content="What is 'HTTP/3'? Discover how to master HTTP/3, with free examples and code snippets." property="twitter:description"><meta content="https://http.dev/img/social/[email protected]?v=5my3eEk3" property="twitter:image"><meta content="HTTP/3" property="twitter:image:alt"><meta content="@filiwiese" name="twitter:creator"></head><body><header class="header"><div class="container"><div class="header__row"><a href="https://http.dev/"><div class="header__logo"><div class="header__logo-left">http</div><div class="header__logo-right">.dev</div></div></a><nav class="header__nav"><a class="header__link header__link--yellow" href="/status">HTTP Status Codes</a> <a class="header__link header__link--violet" href="/headers">HTTP Headers</a> <a class="header__link header__link--light-green" href="/methods">HTTP Methods</a> <a class="header__link header__link--orange" href="/tools">HTTP Testing Tools</a></nav><div class="header__buttons"><a aria-label="menu button" class="header__menu-button" href="#footer"><svg fill="none" height="24" stroke="white" width="24" xmlns="http://www.w3.org/2000/svg"><use xlink:href="/svg/icons.svg#menu"></use></svg></a></div></div></div></header><main><div class="container"><div class="breadcrumbs"><nav><ul class="breadcrumbs__list" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item" itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem"><a class="breadcrumbs__link" href="https://http.dev/" itemprop="item"><span itemprop="name">HTTP</span></a><meta content="1" itemprop="position"><svg height="12" width="7" xmlns="http://www.w3.org/2000/svg"><use xlink:href="/svg/icons.svg#chevron-right"></use></svg></li><li class="breadcrumbs__item" itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem"><a class="breadcrumbs__link" href="https://http.dev/3" itemprop="item"><span itemprop="name">HTTP/3</span></a><meta content="3" itemprop="position"></li></ul></nav></div><h1 class="h1">HTTP/3</h1><div class="row"><div class="col-16 col-xl-11 text brown enable-copy enable-external"><p>The <strong>HyperText Transfer Protocol (HTTP)</strong> is a data communications protocol and acts as the foundation of the <em>World Wide Web</em>. Originally released in 1991 (<a href="0.9" title="HTTP/0.9">HTTP/0.9</a>), it has been through several minor revisions, as well as a major revision to <a href="2" title="HTTP/2">HTTP/2</a>, which was published in 2015. <mark>HTTP/3</mark> is the next major revision of the protocol to be developed and released.</p><p>This major revision to the standard changes the underlying transport layer network protocol from the <em>Transmission Control Protocol (TCP)</em> to <em>QUIC (“Quick UDP Internet Connections”)</em>. The original proposal was named <em>“HTTP/2 Semantics Using The QUIC Transport Protocol”</em>, then <em>“Hypertext Transfer Protocol (HTTP) over QUIC”</em>, and finally <mark>HTTP/3</mark>.</p><div class="toc"><span class="toctitle">Table of Contents</span><ul><li><a href="#status" title="Status">Status</a></li><li><a href="#the-quic-protocol-and-limitations-with-tcp" title="The QUIC protocol and limitations with TCP">The QUIC protocol and limitations with TCP</a></li><li><a href="#performance" title="Performance">Performance</a></li><li><a href="#congestion-control" title="Congestion control">Congestion control</a></li><li><a href="#simplified-setup" title="Simplified setup">Simplified setup</a></li><li><a href="#session-resumption" title="Session resumption">Session resumption</a></li><li><a href="#connection-migration" title="Connection migration">Connection migration</a></li><li><a href="#security" title="Security">Security</a></li><li><a href="#programming-resources" title="Programming resources">Programming resources</a></li><li><a href="#takeaway" title="Takeaway">Takeaway</a></li><li><a href="#see-also" title="See also">See also</a></li></ul></div><h2 id="status">Status</h2><p>Currently the specification for <mark>HTTP/3</mark> is still an <em>IETF</em> draft. However, it is already supported by the majority of web browsers and is running on millions of websites.</p><h2 id="the-quic-protocol-and-limitations-with-tcp">The QUIC protocol and limitations with TCP</h2><p>The Quick <em>UDP</em> Internet Connections (<em>QUIC</em>) protocol was developed by <em>Google</em> and after <em>SPDY</em>, which became <a href="2" title="HTTP/2">HTTP/2</a>, it is the next experimental technology from <em>Google</em> to become a standard. It is a multiplexed communication algorithm that is built on top of the <em>UDP</em> protocol.</p><p>The initial goal of <em>QUIC</em> was to offer an alternative to <a href="2" title="HTTP/2">HTTP/2</a> using <em>TCP</em> for data transmission and <em>TLS</em> for security. <em>TCP</em> was not originally built with a focus on efficiency. For instance, initiating a <a href="http-connection" title="HTTP Connection">HTTP Connection</a> requires a full network round trip to ensure that the client and server are available and prepared to exchange data. Depending on the distance between client and server, as well as the number of intermediaries, the latency and resulting transmission times become more noticeable.</p><p>Another common problem is head-of-line blocking, which was supposed to be rectified using the pipelining approach that was implemented for <a href="2" title="HTTP/2">HTTP/2</a>. Pipelining allows for multiple HTTP requests using the same <em>TCP</em> connection, but this was inadequate because of how <em>TCP</em> transmits data. <em>TCP</em> perceives and works with data as a single-byte stream, even in cases where several mutually exclusive files are sent concurrently. The problem presents itself when packets containing data <em>“at the head of the line”</em> are lost because the remaining packets are consequently delayed until the missing ones are found.</p><p><img alt="HTTP/2 vs QUIC" loading="lazy" src="/static/img/content/diagram1.svg"></p><p>Limitations with <em>TCP</em> can theoretically be addressed by updating the protocol. However, its entrenchment is solidified by the extant low-level implementations in operating systems and middleboxes. Widely deploying changes to <em>TCP</em> is simply not practical, in part due to scope, but also because middleboxes such as routers and load-balancers cannot always be as easily updated. As <em>QUIC</em> is built on top of <em>UDP</em>, it is not directly affected by the limitations of <em>TCP</em>.</p><p><mark>HTTP/3</mark> essentially relies on <em>QUIC</em> for security and integrity of data, peer authentication, and reliable, in-order data delivery with improved performance. These are improvements on top of <a href="2" title="HTTP/2">HTTP/2</a> that cannot be easily accommodated by <em>TCP</em>, which is why it is necessary to switch the underlying protocol.</p><h2 id="performance">Performance</h2><p>In the context of protocol transmission, performance gauges transmission speed, which is a combination of bandwidth and latency. Bandwidth refers to the volume of data that can be sent at one time, whereas latency refers to the time spent moving data from one endpoint to another. Two-way latency is the length of time that it takes to complete a full network round trip. Each intermediary along the path may have different bandwidth limitations and ultimately, performance is limited by the slowest connection between intermediaries or an intermediary and an endpoint.</p><p>Ideal performance is realized through a reliable and consistent series of high-bandwidth, low-latency connections for the length of the full network round trip. Performance is a critical measure because it is directly related to packet loss, which in turn requires a reliable approach to congestion control.</p><p><em>QUIC</em> uses compressed <a href="headers" title="Headers">Headers</a>, as does <a href="2" title="HTTP/2">HTTP/2</a>. However, <em>QUIC</em> utilizes the <strong>QPACK</strong> algorithm for header compression, whereas <a href="2" title="HTTP/2">HTTP/2</a> uses <strong>HPACK</strong>. The difference is that <strong>QPACK</strong> is designed to work with streams.</p><p>In the context of CPU load, <em>QUIC</em> takes more CPU time than the same volume of data using <a href="2" title="HTTP/2">HTTP/2</a> secured with <em>TLS</em>. This is because <em>UDP</em> is not as optimized, generally, as <em>TCP</em>, from an implementation standpoint. Whether as part of the operating system or finding a hardware implementation, <em>UDP</em> support is simply not as broad or advanced. However, this is something that will change over time as <em>QUIC</em> becomes more widespread.</p><h2 id="congestion-control">Congestion control</h2><p><em>TCP</em> and <em>QUIC</em> use similar methods to control congestion and limit both the likelihood and effects of packet loss during transmission. Each starts by sending data at a relatively slow rate and then increases the speed as acknowledgments are received about what and how much data is being received by the endpoint. This is an area of active development, and where <em>QUIC</em> has a clear advantage.</p><p>As previously mentioned, it is difficult to deploy updates to <em>TCP</em>. However, at this early stage, <em>QUIC</em> implementations are typically at the application level, where modifications and extensions are easy to implement and put into production. One such example of this is the <em>Sender Control of Acknowledgment Delays in QUIC</em> extension.</p><p>This extension was motivated by the fact that <em>UDP</em> transmissions can be CPU-intensive and therefore slower on certain platforms. By reducing the number of acknowledgment packets in certain environments, large benefits can be realized in terms of speed. This extension, and others like it, are relatively easy to implement in <em>QUIC</em>, yet are considerably more difficult to implement in <em>TCP</em>. This will facilitate improvements to congestion control and ultimately, may lead to an algorithm that works superior in all cases.</p><h2 id="simplified-setup">Simplified setup</h2><p><em>QUIC</em> does not require the same number of network round trips as <a href="2" title="HTTP/2">HTTP/2</a> using <em>TCP</em> and <em>TLS</em>, lowering the overhead for each <a href="http-connection" title="HTTP Connection">HTTP Connection</a>. This is because <em>TCP</em> does not allow for the sending of non-TCP data during the initial handshake, so the <em>TLS</em> connection needs a separate network round trip to secure the <em>TCP</em> connection. As <em>QUIC</em> was designed with such security concerns in mind, the two operations are done together. In some cases, depending on which version of <em>TLS</em> is being used, using <em>QUIC</em> will save more than one full network round trip yielding even better performance.</p><p><img alt="TCP vs QUIC" loading="lazy" src="/static/img/content/diagram2.svg"></p><h2 id="session-resumption">Session resumption</h2><p>When a <a href="http-connection" title="HTTP Connection">HTTP Connection</a> is established and secured, it is reasonable to assume under certain circumstances that the client will again connect within a short time. The <em>QUIC</em> algorithm takes advantage of this knowledge by preparing for a second <a href="http-connection" title="HTTP Connection">HTTP Connection</a> before the first one is terminated. By doing this preparation in advance, it saves at least one full network round trip when establishing the new <a href="http-connection" title="HTTP Connection">HTTP Connection</a>. This is referred to as <em>Zero Round Trip Time Resumption</em>, or <em>0-RTT</em>.</p><p><em>QUIC</em> has certain limits in place when replying to <em>0-RTT</em> requests to thwart certain types of <em>DDoS</em> attacks. This data throttling is known as the anti-amplification limit and refers to the amount of data that it can send in response before the client is verified. The limit is set to three times the amount of data received from that address.</p><h2 id="connection-migration">Connection migration</h2><p>Another performance enhancement supported by the <em>QUIC</em> protocol is connection migration, which can maintain a <a href="http-connection" title="HTTP Connection">HTTP Connection</a> when transferring from one network to another. For example, moving from a cellular network into an office or home and joining the local Wi-Fi network will mean a new IP address assignment. This changes at least one of the parameters that make up the <em>TCP</em> 4-tuple, which is the aggregation of client IP address, client source port, server IP address, and server destination port. To identify HTTP connections, <em>QUIC</em> introduces a new parameter called the <em>connection identifier (</em>CID<em>)</em> that does not change when transferring between networks.</p><p>Technically, the <em>CID</em>, in this context, is not a single identifier. It is instead a list of randomly generated identifiers known to both the server and client that identify the same <a href="http-connection" title="HTTP Connection">HTTP Connection</a>. Each time a new network is used, the <em>CID</em> changes to another one in the list. The purpose of this is to further protect the privacy of the originator.</p><p>Even pre-QUIC, there was a period of overlap between the first network dropping a <a href="http-connection" title="HTTP Connection">HTTP Connection</a> and the second network taking over, but the switch was not always transparent. Especially in the case of streaming audio or video, such as a video conference, the user is not aware of the network switch.</p><p>It is pertinent to take note that when a <a href="http-connection" title="HTTP Connection">HTTP Connection</a> is migrated to another network, the data transfer resumes but the protocol has to again test the rate at which it can safely continue. This means that the congestion control algorithm starts at the beginning and slowly adjusts the bandwidth until it reaches the optimal rate for the new network. The connection will not be dropped, although even when moving to a network of the same or higher bandwidth, the rate of transfer will drop momentarily.</p><p>For this reason, connection migration’s contribution to performance is not so much about speed in the average case, as it is for preventing a more serious hit due to connection churn. It may be of little consequence, however, because this type of network transfer does not occur very often. For example, a new IP address is not created when switching between access points in a mesh network inside a large office building.</p><h2 id="security">Security</h2><p>Although there has been much attention to improving performance with the adoption of <em>QUIC</em>, there is also an advantage from a security and data privacy perspective. It is helpful to consider that a secure <a href="http-connection" title="HTTP Connection">HTTP Connection</a> (i.e. <a href="https" title="HTTPS">HTTPS</a>) is made using the <em>Transport Layer Security (TLS)</em> protocol on top of the <a href="http-connection" title="HTTP Connection">HTTP Connection</a>. This two-layer approach has been in place since the early days of the internet when there was less of a priority when it came to encrypting traffic. With <em>QUIC</em>, the security has been merged, and <em>TLS 1.3</em> is part of the protocol. It is no longer a multilayer approach. One of the only parts of a <em>QUIC</em> connection that are not encrypted is the <em>CID</em>, which helps to direct traffic.</p><p>Middleboxes such as load-balancers and routers are unaware of the contents of a <em>QUIC</em> packet, and as such, it means that updates to the protocol are required only on the endpoints. Although this adds a degree of flexibility that allows it to scale much easier than <em>TCP</em>, it detracts from the traffic monitoring capabilities that are employed by firewalls.</p><p>End-users have the benefit of HTTP connections that are inherently more secure and it further simplifies the connection process. However, there are some disadvantages to the additional security provided by <em>QUIC</em>, not the least of which is the additional overhead. Also, packet inspection and much of the other connection-level tracking that is done by middleboxes such as firewalls can no longer be done due to the encryption.</p><p>Another security-related issue is that <em>QUIC</em> only works with official <em>TLS</em> certificates. The rationale is that if traffic may be decrypted by a middlebox for monitoring purposes, then ultimately, middleboxes will have custom <em>QUIC</em> implementations. This will negate the effort that went into creating a more scalable protocol in the first place. Therefore, self-signed certifications, for example, cannot be used.</p><h2 id="programming-resources">Programming resources</h2><p>Software developers working to implement <em>QUIC</em> into their projects will recognize that it is a rather complex algorithm and a considerable effort is required to implement it from scratch. To assist with the task, there are a variety of open-source <em>QUIC</em> implementations available for different environments, programming languages, and roles.</p><h2 id="takeaway">Takeaway</h2><p><mark>HTTP/3</mark> represents a major revision to the protocol over the previous release. It relies on a new underlying protocol, <em>QUIC</em>, built on top of <em>UDP</em>, rather than <em>TCP</em>. It is intended to be more robust and provide better security than previous versions of HTTP, and includes an additional parameter to help identify and maintain HTTP connections when changing networks. Although many of the features are duplicated from <a href="2" title="HTTP/2">HTTP/2</a>, a new underlying protocol was necessary to address the shortcomings of <em>TCP</em>.</p><h2 id="see-also">See also</h2><ul><li><a href="0.9" title="HTTP/0.9">HTTP/0.9</a></li><li><a href="1.0" title="HTTP/1.0">HTTP/1.0</a></li><li><a href="1.1" title="HTTP/1.1">HTTP/1.1</a></li><li><a href="2" title="HTTP/2">HTTP/2</a></li><li><a href="https://datatracker.ietf.org/doc/html/rfc9000?utm_source=localhost%3A8080" referrerpolicy="no-referrer" rel="noopener noreferrer" target="_blank" title="RFC 9000">RFC 9000</a></li></ul><div class="improve"><div class="last-updated text--small">Last updated: <span>June 20, 2022</span></div></div></div><aside class="col-16 col-xl-4 offset-xl-1"><article class="tool-card tool-card--white tool-card--button"><h3 class="h3 tool-card__heading">HTTP Status Tester</h3><div class="text text--medium"><p>Test live and from different countries the HTTP responses, redirect chains and status codes of one or multiple URLs.</p></div><a class="button button--yellow button--small" href="https://http.app/?ref=http.dev">Try it now!</a></article><div class="related-content"><input hidden="" id="related-content" type="checkbox"><label class="related-content__title" for="related-content"><svg height="7" stroke="black" viewBox="0 0 12 7" width="12" xmlns="http://www.w3.org/2000/svg"><use xlink:href="/svg/icons.svg#chevron-down"></use></svg><span class="related-content__title-text">Related content</span></label><div class="related-content__content"><ol class="related-content__list text text--medium"><li><a href="/0.9">HTTP/0.9</a></li><li><a href="/1.0">HTTP/1.0</a></li><li><a href="/1.1">HTTP/1.1</a></li><li><a href="/2">HTTP/2</a></li><li><a href="/authentication">HTTP Authentication</a></li><li><a href="/caching">HTTP Caching</a></li><li><a href="/client-hints">Client Hints</a></li><li><a href="/compression">HTTP Compression</a></li><li><a href="/conditional-requests">HTTP Conditional Requests</a></li><li><a href="/content-negotiation">HTTP Content Negotiation</a></li><li><a href="/cookies">HTTP Cookies</a></li><li><a href="/cors">Cross-Origin Resource Sharing (CORS)</a></li><li><a href="/data-url">Data URLs</a></li><li><a href="/explained">HTTP Explained</a></li><li><a href="/headers">HTTP Headers</a></li><li><a href="/hsts">HTTP Strict Transport Security</a></li><li><a href="/http-connection">HTTP Connection</a></li><li><a href="/https">HyperText Transfer Protocol Secure (HTTPS)</a></li><li><a href="/">HyperText Transfer Protocol (HTTP)</a></li><li><a href="/methods">HTTP Methods</a></li><li><a href="/origins">Origins</a></li><li><a href="/percent-encoding">Percent-Encoding</a></li><li><a href="/protocol-upgrade">HTTP Protocol Upgrade Mechanism</a></li><li><a href="/punycode">Punycode</a></li><li><a href="/range-request">HTTP Range Request</a></li><li><a href="/redirects">HTTP Redirections</a></li><li><a href="/session">A typical HTTP session</a></li><li><a href="/soft404">Soft 404s</a></li><li><a href="/status">HTTP Status Codes</a></li><li><a href="/uri">Uniform Resource Identifier (URI)</a></li><li><a href="/url">Uniform Resource Locator (URL)</a></li><li><a href="/urn">Uniform Resource Name (URN)</a></li><li><a href="/webdav">WebDAV</a></li><li><a href="/ws">WebSocket</a></li><li><a href="/wss">Encrypted WebSocket</a></li></ol></div></div><aside></aside></aside></div></div></main><script>plausible("general",{ props: { path: document.location.pathname } });</script><footer class="footer"><span id="footer"></span><div class="footer__top"><div class="container"><nav><div class="row"><div class="col-8 col-lg-4"><h4 class="h4 footer__heading footer__heading--yellow">Status</h4><ul class="footer__list"><li class="footer__item"><a class="footer__link" href="/status">HTTP Status Codes overview</a></li><li class="footer__item"><a class="footer__link" href="/100">100 Continue</a></li><li class="footer__item"><a class="footer__link" href="/101">101 Switching Protocols</a></li><li class="footer__item"><a class="footer__link" href="/102">102 Processing</a></li><li class="footer__item"><a class="footer__link" href="/103">103 Early Hints</a></li><li class="footer__item"><a class="footer__link" href="/200">200 OK</a></li><li class="footer__item"><a class="footer__link" href="/201">201 Created</a></li><li class="footer__item"><a class="footer__link" href="/202">202 Accepted</a></li><li class="footer__item"><a class="footer__link" href="/203">203 Non-Authoritative Information</a></li><li class="footer__item"><a class="footer__link" href="/204">204 No Content</a></li><li class="footer__item"><a class="footer__link" href="/205">205 Reset Content</a></li><li class="footer__item"><a class="footer__link" href="/206">206 Partial Content</a></li><li class="footer__item"><a class="footer__link" href="/207">207 Multi-Status</a></li><li class="footer__item"><a class="footer__link" href="/208">208 Already Reported</a></li><li class="footer__item"><a class="footer__link" href="/218">218 This is fine</a></li><li class="footer__item"><a class="footer__link" href="/226">226 IM Used</a></li><li class="footer__item"><a class="footer__link" href="/300">300 Multiple Choices</a></li><li class="footer__item"><a class="footer__link" href="/301">301 Moved Permanently</a></li><li class="footer__item"><a class="footer__link" href="/302">302 Found</a></li><li class="footer__item"><a class="footer__link" href="/303">303 See Other</a></li><li class="footer__item"><a class="footer__link" href="/304">304 Not Modified</a></li><li class="footer__item"><a class="footer__link" href="/305">305 Use Proxy</a></li><li class="footer__item"><a class="footer__link" href="/306">306 Switch Proxy</a></li><li class="footer__item"><a class="footer__link" href="/307">307 Temporary Redirect</a></li><li class="footer__item"><a class="footer__link" href="/308">308 Permanent Redirect</a></li><li class="footer__item"><a class="footer__link" href="/400">400 Bad Request</a></li><li class="footer__item"><a class="footer__link" href="/401">401 Unauthorized</a></li><li class="footer__item"><a class="footer__link" href="/402">402 Payment Required</a></li><li class="footer__item"><a class="footer__link" href="/403">403 Forbidden</a></li><li class="footer__item"><a class="footer__link" href="/404">404 Not Found</a></li><li class="footer__item"><a class="footer__link" href="/405">405 Method Not Allowed</a></li><li class="footer__item"><a class="footer__link" href="/406">406 Not Acceptable</a></li><li class="footer__item"><a class="footer__link" href="/407">407 Proxy Authentication Required</a></li><li class="footer__item"><a class="footer__link" href="/408">408 Request Timeout</a></li><li class="footer__item"><a class="footer__link" href="/409">409 Conflict</a></li><li class="footer__item"><a class="footer__link" href="/410">410 Gone</a></li><li class="footer__item"><a class="footer__link" href="/411">411 Length Required</a></li><li class="footer__item"><a class="footer__link" href="/412">412 Precondition Failed</a></li><li class="footer__item"><a class="footer__link" href="/413">413 Payload Too Large</a></li><li class="footer__item"><a class="footer__link" href="/414">414 URI Too Long</a></li><li class="footer__item"><a class="footer__link" href="/415">415 Unsupported Media Type</a></li><li class="footer__item"><a class="footer__link" href="/416">416 Range Not Satisfiable</a></li><li class="footer__item"><a class="footer__link" href="/417">417 Expectation Failed</a></li><li class="footer__item"><a class="footer__link" href="/418">418 I'm a teapot</a></li><li class="footer__item"><a class="footer__link" href="/419">419 Page Expired</a></li><li class="footer__item"><a class="footer__link" href="/420">420 Method Failure or Enhance your calm</a></li><li class="footer__item"><a class="footer__link" href="/421">421 Misdirected Request</a></li><li class="footer__item"><a class="footer__link" href="/422">422 Unprocessable Entity</a></li><li class="footer__item"><a class="footer__link" href="/423">423 Locked</a></li><li class="footer__item"><a class="footer__link" href="/424">424 Failed Dependency</a></li><li class="footer__item"><a class="footer__link" href="/425">425 Too Early</a></li><li class="footer__item"><a class="footer__link" href="/426">426 Upgrade Required</a></li><li class="footer__item"><a class="footer__link" href="/428">428 Precondition Required</a></li><li class="footer__item"><a class="footer__link" href="/429">429 Too Many Requests</a></li><li class="footer__item"><a class="footer__link" href="/430">430 HTTP Status Code</a></li><li class="footer__item"><a class="footer__link" href="/431">431 Request Header Fields Too Large</a></li><li class="footer__item"><a class="footer__link" href="/440">440 Login Time-out</a></li><li class="footer__item"><a class="footer__link" href="/444">444 No Response</a></li><li class="footer__item"><a class="footer__link" href="/449">449 Retry With</a></li><li class="footer__item"><a class="footer__link" href="/450">450 Blocked by Windows Parental Controls</a></li><li class="footer__item"><a class="footer__link" href="/451">451 Unavailable For Legal Reasons</a></li><li class="footer__item"><a class="footer__link" href="/460">460 Client closed connection prematurely</a></li><li class="footer__item"><a class="footer__link" href="/463">463 Too many forwarded IP addresses</a></li><li class="footer__item"><a class="footer__link" href="/464">464 Incompatible protocol</a></li><li class="footer__item"><a class="footer__link" href="/494">494 Request header too large</a></li><li class="footer__item"><a class="footer__link" href="/495">495 SSL Certificate Error</a></li><li class="footer__item"><a class="footer__link" href="/496">496 SSL Certificate Required</a></li><li class="footer__item"><a class="footer__link" href="/497">497 HTTP Request Sent to HTTPS Port</a></li><li class="footer__item"><a class="footer__link" href="/498">498 Invalid Token</a></li><li class="footer__item"><a class="footer__link" href="/499">499 Token Required or Client Closed Request</a></li><li class="footer__item"><a class="footer__link" href="/500">500 Internal Server Error</a></li><li class="footer__item"><a class="footer__link" href="/501">501 Not Implemented</a></li><li class="footer__item"><a class="footer__link" href="/502">502 Bad Gateway</a></li><li class="footer__item"><a class="footer__link" href="/503">503 Service Unavailable</a></li><li class="footer__item"><a class="footer__link" href="/504">504 Gateway Timeout</a></li><li class="footer__item"><a class="footer__link" href="/505">505 HTTP Version Not Supported</a></li><li class="footer__item"><a class="footer__link" href="/506">506 Variant Also Negotiates</a></li><li class="footer__item"><a class="footer__link" href="/507">507 Insufficient Storage</a></li><li class="footer__item"><a class="footer__link" href="/508">508 Loop Detected</a></li><li class="footer__item"><a class="footer__link" href="/509">509 Bandwidth Limit Exceeded</a></li><li class="footer__item"><a class="footer__link" href="/510">510 Not Extended</a></li><li class="footer__item"><a class="footer__link" href="/511">511 Network Authentication Required</a></li><li class="footer__item"><a class="footer__link" href="/520">520 Web server is returning an unknown error</a></li><li class="footer__item"><a class="footer__link" href="/521">521 Web server is down</a></li><li class="footer__item"><a class="footer__link" href="/522">522 Connection timed out</a></li><li class="footer__item"><a class="footer__link" href="/523">523 Origin is unreachable</a></li><li class="footer__item"><a class="footer__link" href="/524">524 A Timeout Occurred</a></li><li class="footer__item"><a class="footer__link" href="/525">525 SSL handshake failed</a></li><li class="footer__item"><a class="footer__link" href="/526">526 Invalid SSL certificate</a></li><li class="footer__item"><a class="footer__link" href="/527">527 Railgun Listener to Origin</a></li><li class="footer__item"><a class="footer__link" href="/529">529 The service is overloaded</a></li><li class="footer__item"><a class="footer__link" href="/530">530 Site Frozen</a></li><li class="footer__item"><a class="footer__link" href="/561">561 Unauthorized</a></li><li class="footer__item"><a class="footer__link" href="/598">598 Network read timeout error</a></li><li class="footer__item"><a class="footer__link" href="/599">599 Network Connect Timeout Error</a></li><li class="footer__item"><a class="footer__link" href="/999">999 Request Denied</a></li></ul></div><div class="col-8 col-lg-4"><h4 class="h4 footer__heading footer__heading--violet">Headers</h4><ul class="footer__list"><li class="footer__item"><a class="footer__link" href="/headers">HTTP Headers overview</a></li><li class="footer__item"><a class="footer__link" href="/a-im">A-IM</a></li><li class="footer__item"><a class="footer__link" href="/accept">Accept</a></li><li class="footer__item"><a class="footer__link" href="/accept-ch">Accept-CH</a></li><li class="footer__item"><a class="footer__link" href="/accept-charset">Accept-Charset</a></li><li class="footer__item"><a class="footer__link" href="/accept-datetime">Accept-Datetime</a></li><li class="footer__item"><a class="footer__link" href="/accept-encoding">Accept-Encoding</a></li><li class="footer__item"><a class="footer__link" href="/accept-language">Accept-Language</a></li><li class="footer__item"><a class="footer__link" href="/accept-patch">Accept-Patch</a></li><li class="footer__item"><a class="footer__link" href="/accept-post">Accept-Post</a></li><li class="footer__item"><a class="footer__link" href="/accept-ranges">Accept-Ranges</a></li><li class="footer__item"><a class="footer__link" href="/access-control-allow-credentials">Access-Control-Allow-Credentials</a></li><li class="footer__item"><a class="footer__link" href="/access-control-allow-headers">Access-Control-Allow-Headers</a></li><li class="footer__item"><a class="footer__link" href="/access-control-allow-methods">Access-Control-Allow-Methods</a></li><li class="footer__item"><a class="footer__link" href="/access-control-allow-origin">Access-Control-Allow-Origin</a></li><li class="footer__item"><a class="footer__link" href="/access-control-expose-headers">Access-Control-Expose-Headers</a></li><li class="footer__item"><a class="footer__link" href="/access-control-max-age">Access-Control-Max-Age</a></li><li class="footer__item"><a class="footer__link" href="/access-control-request-headers">Access-Control-Request-Headers</a></li><li class="footer__item"><a class="footer__link" href="/access-control-request-method">Access-Control-Request-Method</a></li><li class="footer__item"><a class="footer__link" href="/age">Age</a></li><li class="footer__item"><a class="footer__link" href="/allow">Allow</a></li><li class="footer__item"><a class="footer__link" href="/alt-svc">Alt-Svc</a></li><li class="footer__item"><a class="footer__link" href="/authorization">Authorization</a></li><li class="footer__item"><a class="footer__link" href="/cache-control">Cache-Control</a></li><li class="footer__item"><a class="footer__link" href="/clear-site-data">Clear-Site-Data</a></li><li class="footer__item"><a class="footer__link" href="/connection">Connection</a></li><li class="footer__item"><a class="footer__link" href="/content-disposition">Content-Disposition</a></li><li class="footer__item"><a class="footer__link" href="/content-encoding">Content-Encoding</a></li><li class="footer__item"><a class="footer__link" href="/content-language">Content-Language</a></li><li class="footer__item"><a class="footer__link" href="/content-length">Content-Length</a></li><li class="footer__item"><a class="footer__link" href="/content-location">Content-Location</a></li><li class="footer__item"><a class="footer__link" href="/content-range">Content-Range</a></li><li class="footer__item"><a class="footer__link" href="/content-security-policy">Content-Security-Policy</a></li><li class="footer__item"><a class="footer__link" href="/content-security-policy-report-only">Content-Security-Policy-Report-Only</a></li><li class="footer__item"><a class="footer__link" href="/content-type">Content-Type</a></li><li class="footer__item"><a class="footer__link" href="/cookie">Cookie</a></li><li class="footer__item"><a class="footer__link" href="/cross-origin-embedder-policy">Cross-Origin-Embedder-Policy</a></li><li class="footer__item"><a class="footer__link" href="/cross-origin-opener-policy">Cross-Origin-Opener-Policy</a></li><li class="footer__item"><a class="footer__link" href="/cross-origin-resource-policy">Cross-Origin-Resource-Policy</a></li><li class="footer__item"><a class="footer__link" href="/date">Date</a></li><li class="footer__item"><a class="footer__link" href="/delta-base">Delta-Base</a></li><li class="footer__item"><a class="footer__link" href="/device-memory">Device-Memory</a></li><li class="footer__item"><a class="footer__link" href="/digest">Digest</a></li><li class="footer__item"><a class="footer__link" href="/etag">ETag</a></li><li class="footer__item"><a class="footer__link" href="/expect">Expect</a></li><li class="footer__item"><a class="footer__link" href="/expect-ct">Expect-CT</a></li><li class="footer__item"><a class="footer__link" href="/expires">Expires</a></li><li class="footer__item"><a class="footer__link" href="/forwarded">Forwarded</a></li><li class="footer__item"><a class="footer__link" href="/from">From</a></li><li class="footer__item"><a class="footer__link" href="/host">Host</a></li><li class="footer__item"><a class="footer__link" href="/http2-settings">HTTP2-Settings</a></li><li class="footer__item"><a class="footer__link" href="/if-match">If-Match</a></li><li class="footer__item"><a class="footer__link" href="/if-modified-since">If-Modified-Since</a></li><li class="footer__item"><a class="footer__link" href="/if-none-match">If-None-Match</a></li><li class="footer__item"><a class="footer__link" href="/if-range">If-Range</a></li><li class="footer__item"><a class="footer__link" href="/if-unmodified-since">If-Unmodified-Since</a></li><li class="footer__item"><a class="footer__link" href="/im">IM</a></li><li class="footer__item"><a class="footer__link" href="/keep-alive">Keep-Alive</a></li><li class="footer__item"><a class="footer__link" href="/last-modified">Last-Modified</a></li><li class="footer__item"><a class="footer__link" href="/link">Link</a></li><li class="footer__item"><a class="footer__link" href="/location">Location</a></li><li class="footer__item"><a class="footer__link" href="/max-forwards">Max-Forwards</a></li><li class="footer__item"><a class="footer__link" href="/nel">NEL</a></li><li class="footer__item"><a class="footer__link" href="/origin">Origin</a></li><li class="footer__item"><a class="footer__link" href="/permissions-policy">Permissions-Policy</a></li><li class="footer__item"><a class="footer__link" href="/pragma">Pragma</a></li><li class="footer__item"><a class="footer__link" href="/prefer">Prefer</a></li><li class="footer__item"><a class="footer__link" href="/proxy-authenticate">Proxy-Authenticate</a></li><li class="footer__item"><a class="footer__link" href="/proxy-authorization">Proxy-Authorization</a></li><li class="footer__item"><a class="footer__link" href="/purpose">Purpose</a></li><li class="footer__item"><a class="footer__link" href="/range">Range</a></li><li class="footer__item"><a class="footer__link" href="/referer">Referer</a></li><li class="footer__item"><a class="footer__link" href="/referrer-policy">Referrer-Policy</a></li><li class="footer__item"><a class="footer__link" href="/retry-after">Retry-After</a></li><li class="footer__item"><a class="footer__link" href="/save-data">Save-Data</a></li><li class="footer__item"><a class="footer__link" href="/sec-fetch-dest">Sec-Fetch-Dest</a></li><li class="footer__item"><a class="footer__link" href="/sec-fetch-mode">Sec-Fetch-Mode</a></li><li class="footer__item"><a class="footer__link" href="/sec-fetch-site">Sec-Fetch-Site</a></li><li class="footer__item"><a class="footer__link" href="/sec-fetch-user">Sec-Fetch-User</a></li><li class="footer__item"><a class="footer__link" href="/sec-websocket-accept">Sec-WebSocket-Accept</a></li><li class="footer__item"><a class="footer__link" href="/server">Server</a></li><li class="footer__item"><a class="footer__link" href="/server-timing">Server-Timing</a></li><li class="footer__item"><a class="footer__link" href="/set-cookie">Set-Cookie</a></li><li class="footer__item"><a class="footer__link" href="/sourcemap">SourceMap</a></li><li class="footer__item"><a class="footer__link" href="/strict-transport-security">Strict-Transport-Security</a></li><li class="footer__item"><a class="footer__link" href="/te">TE</a></li><li class="footer__item"><a class="footer__link" href="/timing-allow-origin">Timing-Allow-Origin</a></li><li class="footer__item"><a class="footer__link" href="/trailer">Trailer</a></li><li class="footer__item"><a class="footer__link" href="/transfer-encoding">Transfer-Encoding</a></li><li class="footer__item"><a class="footer__link" href="/upgrade">Upgrade</a></li><li class="footer__item"><a class="footer__link" href="/upgrade-insecure-requests">Upgrade-Insecure-Requests</a></li><li class="footer__item"><a class="footer__link" href="/user-agent">User-Agent</a></li><li class="footer__item"><a class="footer__link" href="/vary">Vary</a></li><li class="footer__item"><a class="footer__link" href="/via">Via</a></li><li class="footer__item"><a class="footer__link" href="/want-digest">Want-Digest</a></li><li class="footer__item"><a class="footer__link" href="/warning">Warning</a></li><li class="footer__item"><a class="footer__link" href="/www-authenticate">WWW-Authenticate</a></li><li class="footer__item"><a class="footer__link" href="/x-content-type-options">X-Content-Type-Options</a></li><li class="footer__item"><a class="footer__link" href="/x-dns-prefetch-control">X-DNS-Prefetch-Control</a></li><li class="footer__item"><a class="footer__link" href="/x-forwarded-for">X-Forwarded-For</a></li><li class="footer__item"><a class="footer__link" href="/x-forwarded-host">X-Forwarded-Host</a></li><li class="footer__item"><a class="footer__link" href="/x-forwarded-proto">X-Forwarded-Proto</a></li><li class="footer__item"><a class="footer__link" href="/x-frame-options">X-Frame-Options</a></li><li class="footer__item"><a class="footer__link" href="/x-powered-by">X-Powered-By</a></li><li class="footer__item"><a class="footer__link" href="/x-request-id">X-Request-ID</a></li><li class="footer__item"><a class="footer__link" href="/x-robots-tag">X-Robots-Tag</a></li><li class="footer__item"><a class="footer__link" href="/x-ua-compatible">X-UA-Compatible</a></li><li class="footer__item"><a class="footer__link" href="/x-xss-protection">X-XSS-Protection</a></li></ul></div><div class="col-8 col-lg-4"><h4 class="h4 footer__heading footer__heading--light-green">Methods</h4><ul class="footer__list"><li class="footer__item"><a class="footer__link" href="/methods">HTTP Methods overview</a></li><li class="footer__item"><a class="footer__link" href="/connect">CONNECT</a></li><li class="footer__item"><a class="footer__link" href="/delete">DELETE</a></li><li class="footer__item"><a class="footer__link" href="/get">GET</a></li><li class="footer__item"><a class="footer__link" href="/head">HEAD</a></li><li class="footer__item"><a class="footer__link" href="/options">OPTIONS</a></li><li class="footer__item"><a class="footer__link" href="/patch">PATCH</a></li><li class="footer__item"><a class="footer__link" href="/post">POST</a></li><li class="footer__item"><a class="footer__link" href="/put">PUT</a></li><li class="footer__item"><a class="footer__link" href="/trace">TRACE</a></li></ul><h4 class="h4 footer__heading footer__heading--orange">HTTP Testing Tools</h4><ul class="footer__list"><li class="footer__item"><a class="footer__link" href="https://http.app/?ref=http.dev">HTTP Status Tester</a></li><li class="footer__item"><a class="footer__link" href="/compression/test">HTTP Compression Tester</a></li><li class="footer__item"><a class="footer__link" href="/2/test">HTTP/2 Tester</a></li><li class="footer__item"><a class="footer__link" href="/url/parse">URL Parser</a></li></ul></div><div class="col-8 col-lg-4"><h4 class="h4 footer__heading footer__heading--brown">HTTP Specifications</h4><ul class="footer__list"><li class="footer__item"><a class="footer__link" href="/0.9">HTTP/0.9</a></li><li class="footer__item"><a class="footer__link" href="/1.0">HTTP/1.0</a></li><li class="footer__item"><a class="footer__link" href="/1.1">HTTP/1.1</a></li><li class="footer__item"><a class="footer__link" href="/2">HTTP/2</a></li><li class="footer__item"><a class="footer__link" href="/3">HTTP/3</a></li><li class="footer__item"><a class="footer__link" href="/authentication">HTTP Authentication</a></li><li class="footer__item"><a class="footer__link" href="/caching">HTTP Caching</a></li><li class="footer__item"><a class="footer__link" href="/client-hints">Client Hints</a></li><li class="footer__item"><a class="footer__link" href="/compression">HTTP Compression</a></li><li class="footer__item"><a class="footer__link" href="/conditional-requests">HTTP Conditional Requests</a></li><li class="footer__item"><a class="footer__link" href="/content-negotiation">HTTP Content Negotiation</a></li><li class="footer__item"><a class="footer__link" href="/cookies">HTTP Cookies</a></li><li class="footer__item"><a class="footer__link" href="/cors">Cross-Origin Resource Sharing (CORS)</a></li><li class="footer__item"><a class="footer__link" href="/data-url">Data URLs</a></li><li class="footer__item"><a class="footer__link" href="/explained">HTTP Explained</a></li><li class="footer__item"><a class="footer__link" href="/hsts">HTTP Strict Transport Security</a></li><li class="footer__item"><a class="footer__link" href="/http-connection">HTTP Connection</a></li><li class="footer__item"><a class="footer__link" href="/https">HyperText Transfer Protocol Secure (HTTPS)</a></li><li class="footer__item"><a class="footer__link" href="/">HyperText Transfer Protocol (HTTP)</a></li><li class="footer__item"><a class="footer__link" href="/origins">Origins</a></li><li class="footer__item"><a class="footer__link" href="/percent-encoding">Percent-Encoding</a></li><li class="footer__item"><a class="footer__link" href="/protocol-upgrade">HTTP Protocol Upgrade Mechanism</a></li><li class="footer__item"><a class="footer__link" href="/punycode">Punycode</a></li><li class="footer__item"><a class="footer__link" href="/range-request">HTTP Range Request</a></li><li class="footer__item"><a class="footer__link" href="/redirects">HTTP Redirections</a></li><li class="footer__item"><a class="footer__link" href="/session">A typical HTTP session</a></li><li class="footer__item"><a class="footer__link" href="/soft404">Soft 404s</a></li><li class="footer__item"><a class="footer__link" href="/uri">Uniform Resource Identifier (URI)</a></li><li class="footer__item"><a class="footer__link" href="/url">Uniform Resource Locator (URL)</a></li><li class="footer__item"><a class="footer__link" href="/urn">Uniform Resource Name (URN)</a></li><li class="footer__item"><a class="footer__link" href="/webdav">WebDAV</a></li><li class="footer__item"><a class="footer__link" href="/ws">WebSocket</a></li><li class="footer__item"><a class="footer__link" href="/wss">Encrypted WebSocket</a></li></ul></div></div></nav></div></div><div class="footer__bottom"><div class="container footer__bottom-container"><a aria-label="Back to top" class="footer__to-top" href="#"><svg height="8" stroke="white" width="14" xmlns="http://www.w3.org/2000/svg"><use xlink:href="/svg/icons.svg#chevron-up-white"></use></svg></a><div class="text text--small"><p>Made with <span class="footer__bottom-heart">♥</span> by SEO Expert <a href="https://fili.com/?ref=http.dev" rel="noopener">Fili</a> <span class="footer__bottom-text">© 2022 - 2024 Licensed under <a onclick="window.open('http://creativecommons.org/licenses/by-nc-nd/4.0/')">CC BY-NC-ND 4.0</a></span> <span class="footer__bottom-load">This page loaded in 0.52s</span></p></div></div></div></footer><link href="/js/clipboard.min.js" rel="prefetch"><link href="/js/cb.min.js?v=5my3eEk3" rel="prefetch"><script defer="" src="/js/instantpage.min.js" type="text/javascript"></script><script defer="" src="/js/app.min.js?v=5my3eEk3" type="text/javascript"></script><script type="text/javascript">
window.addEventListener('load',()=>{var loadTime=document.getElementsByClassName('footer__bottom-load');window.performance=window.performance||window.mozPerformance||window.msPerformance||window.webkitPerformance||{};var e=performance.timing||{};var duration=(e.loadEventStart-e.navigationStart)/1000;;[].forEach.call(loadTime,(el)=>{el.innerText=`This page loaded in ${duration.toFixed(2)}s`})})</script><noscript><style>.status__expand, .header__search-button, .code-snippet .copy-btn, .share-block .copy-btn, .footer__bottom-load { display: none; } .share-block .form-group input { padding-right: 1rem; }</style></noscript></body></html>