{"id":292,"date":"2026-03-12T00:00:00","date_gmt":"2026-03-12T00:00:00","guid":{"rendered":"https:\/\/wordpress.securinsight.ca\/index.php\/2026\/03\/12\/cloudflare-fundamentals-retry-after-http-header-for-retryable-1xxx-errors\/"},"modified":"2026-03-12T00:00:00","modified_gmt":"2026-03-12T00:00:00","slug":"cloudflare-fundamentals-retry-after-http-header-for-retryable-1xxx-errors","status":"publish","type":"post","link":"https:\/\/wordpress.securinsight.ca\/index.php\/2026\/03\/12\/cloudflare-fundamentals-retry-after-http-header-for-retryable-1xxx-errors\/","title":{"rendered":"Cloudflare Fundamentals &#8211; Retry-After HTTP header for retryable 1xxx errors"},"content":{"rendered":"<p>Cloudflare-generated 1xxx error responses now include a standard <code>Retry-After<\/code> HTTP header when the error is retryable. Agents and HTTP clients can read the recommended wait time from response headers alone \u2014 no body parsing required.<\/p>\n<h4>Changes<\/h4>\n<p>Seven retryable error codes now emit <code>Retry-After<\/code>:<\/p>\n<table>\n<thead>\n<tr>\n<th>Error code<\/th>\n<th>Retry-After (seconds)<\/th>\n<th>Error name<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1004<\/td>\n<td>120<\/td>\n<td>DNS resolution error<\/td>\n<\/tr>\n<tr>\n<td>1005<\/td>\n<td>120<\/td>\n<td>Banned zone<\/td>\n<\/tr>\n<tr>\n<td>1015<\/td>\n<td>30<\/td>\n<td>Rate limited<\/td>\n<\/tr>\n<tr>\n<td>1033<\/td>\n<td>120<\/td>\n<td>Argo Tunnel error<\/td>\n<\/tr>\n<tr>\n<td>1038<\/td>\n<td>60<\/td>\n<td>HTTP headers limit exceeded<\/td>\n<\/tr>\n<tr>\n<td>1200<\/td>\n<td>60<\/td>\n<td>Cache connection limit<\/td>\n<\/tr>\n<tr>\n<td>1205<\/td>\n<td>5<\/td>\n<td>Too many redirects<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>The header value matches the existing <code>retry_after<\/code> body field in JSON and Markdown responses.<\/p>\n<p>If a WAF rate limiting rule has already set a dynamic <code>Retry-After<\/code> value on the response, that value takes precedence.<\/p>\n<h4>Availability<\/h4>\n<p>Available for all zones on all plans.<\/p>\n<h4>Verify<\/h4>\n<p>Check for the header on any retryable error:<\/p>\n<div>\n<figure>\n<pre data-language=\"bash\"><code class=\"language-bash\"><div><div><span>curl<\/span><span> <\/span><span>-s<\/span><span> <\/span><span>--compressed<\/span><span> <\/span><span>-D<\/span><span> <\/span><span>-<\/span><span> <\/span><span>-o<\/span><span> <\/span><span>\/dev\/null<\/span><span> <\/span><span>-H<\/span><span> <\/span><span>\"Accept: application\/json\"<\/span><span> <\/span><span>-A<\/span><span> <\/span><span>\"TestAgent\/1.0\"<\/span><span> <\/span><span>-H<\/span><span> <\/span><span>\"Accept-Encoding: gzip, deflate\"<\/span><span> <\/span><span>\"&lt;YOUR_DOMAIN&gt;\/cdn-cgi\/error\/1015\"<\/span><span> <\/span><span>|<\/span><span> <\/span><span>grep<\/span><span> <\/span><span>-i<\/span><span> <\/span><span>retry-after<\/span><\/div><\/div><\/code><\/pre>\n<div>\n<div><\/div>\n<\/div>\n<\/figure>\n<\/div>\n<p>References:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9110#section-10.2.3\" target=\"_blank\">RFC 9110 section 10.2.3 &#8211; Retry-After<\/a><\/li>\n<li><a href=\"https:\/\/developers.cloudflare.com\/support\/troubleshooting\/http-status-codes\/cloudflare-1xxx-errors\/\">Cloudflare 1xxx error documentation<\/a><\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>Cloudflare-generated 1xxx error responses now include a standard Retry-After HTTP header when the error is retryable. Agents and HTTP clients can read the recommended wait time from response headers alone \u2014 no body parsing required. Changes Seven retryable error codes now emit Retry-After: Error code Retry-After (seconds) Error name 1004 120 DNS resolution error 1005 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-292","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/wordpress.securinsight.ca\/index.php\/wp-json\/wp\/v2\/posts\/292","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.securinsight.ca\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.securinsight.ca\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.securinsight.ca\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.securinsight.ca\/index.php\/wp-json\/wp\/v2\/comments?post=292"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.securinsight.ca\/index.php\/wp-json\/wp\/v2\/posts\/292\/revisions"}],"wp:attachment":[{"href":"https:\/\/wordpress.securinsight.ca\/index.php\/wp-json\/wp\/v2\/media?parent=292"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.securinsight.ca\/index.php\/wp-json\/wp\/v2\/categories?post=292"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.securinsight.ca\/index.php\/wp-json\/wp\/v2\/tags?post=292"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}