{
  "title": "HTTP Status Code Response Obligations",
  "description": "Per-code MUST, SHOULD, and MAY rules for HTTP response headers and content from RFC 9110 and RFC 6585, with sections and JSON data.",
  "url": "https://httpstatuses.net/guides/status-code-response-obligations.json",
  "htmlURL": "https://httpstatuses.net/guides/status-code-response-obligations/",
  "sources": [
    {
      "name": "RFC 9110",
      "title": "HTTP Semantics",
      "url": "https://www.rfc-editor.org/rfc/rfc9110.html"
    },
    {
      "name": "RFC 6585",
      "title": "Additional HTTP Status Codes",
      "url": "https://www.rfc-editor.org/rfc/rfc6585.html"
    }
  ],
  "coverage": {
    "summary": "Status codes defined in RFC 9110 section 15 and RFC 6585 sections 3 to 6, plus the RFC 9110 method rules that decide when a 201 is sent. Codes defined in other RFCs and unregistered codes are not covered.",
    "codes": [
      "100",
      "101",
      "200",
      "201",
      "202",
      "203",
      "204",
      "205",
      "206",
      "300",
      "301",
      "302",
      "303",
      "304",
      "305",
      "306",
      "307",
      "308",
      "400",
      "401",
      "402",
      "403",
      "404",
      "405",
      "406",
      "407",
      "408",
      "409",
      "410",
      "411",
      "412",
      "413",
      "414",
      "415",
      "416",
      "417",
      "418",
      "421",
      "422",
      "426",
      "428",
      "429",
      "431",
      "500",
      "501",
      "502",
      "503",
      "504",
      "505",
      "511"
    ],
    "registeredElsewhere": [
      {
        "code": "102",
        "definedIn": {
          "source": "RFC 2518",
          "section": "10.1",
          "url": "https://www.rfc-editor.org/rfc/rfc2518.html#section-10.1"
        }
      },
      {
        "code": "103",
        "definedIn": {
          "source": "RFC 8297",
          "section": "2",
          "url": "https://www.rfc-editor.org/rfc/rfc8297.html#section-2"
        }
      },
      {
        "code": "207",
        "definedIn": {
          "source": "RFC 4918",
          "section": "11.1",
          "url": "https://www.rfc-editor.org/rfc/rfc4918.html#section-11.1"
        }
      },
      {
        "code": "208",
        "definedIn": {
          "source": "RFC 5842",
          "section": "7.1",
          "url": "https://www.rfc-editor.org/rfc/rfc5842.html#section-7.1"
        }
      },
      {
        "code": "226",
        "definedIn": {
          "source": "RFC 3229",
          "section": "10.4.1",
          "url": "https://www.rfc-editor.org/rfc/rfc3229.html#section-10.4.1"
        }
      },
      {
        "code": "423",
        "definedIn": {
          "source": "RFC 4918",
          "section": "11.3",
          "url": "https://www.rfc-editor.org/rfc/rfc4918.html#section-11.3"
        }
      },
      {
        "code": "424",
        "definedIn": {
          "source": "RFC 4918",
          "section": "11.4",
          "url": "https://www.rfc-editor.org/rfc/rfc4918.html#section-11.4"
        }
      },
      {
        "code": "425",
        "definedIn": {
          "source": "RFC 8470",
          "section": "5.2",
          "url": "https://www.rfc-editor.org/rfc/rfc8470.html#section-5.2"
        }
      },
      {
        "code": "451",
        "definedIn": {
          "source": "RFC 7725",
          "section": "3",
          "url": "https://www.rfc-editor.org/rfc/rfc7725.html#section-3"
        }
      },
      {
        "code": "506",
        "definedIn": {
          "source": "RFC 2295",
          "section": "8.1",
          "url": "https://www.rfc-editor.org/rfc/rfc2295.html#section-8.1"
        }
      },
      {
        "code": "507",
        "definedIn": {
          "source": "RFC 4918",
          "section": "11.5",
          "url": "https://www.rfc-editor.org/rfc/rfc4918.html#section-11.5"
        }
      },
      {
        "code": "508",
        "definedIn": {
          "source": "RFC 5842",
          "section": "7.2",
          "url": "https://www.rfc-editor.org/rfc/rfc5842.html#section-7.2"
        }
      },
      {
        "code": "510",
        "definedIn": {
          "source": "RFC 2774",
          "section": "7",
          "url": "https://www.rfc-editor.org/rfc/rfc2774.html#section-7"
        }
      }
    ],
    "unregistered": [
      "509",
      "529",
      "530",
      "598",
      "599"
    ]
  },
  "keywords": {
    "bcp14": [
      "MUST",
      "MUST NOT",
      "SHOULD",
      "SHOULD NOT",
      "MAY"
    ],
    "none": "The quoted RFC text defines or describes the behavior without a BCP 14 keyword, for example \"ought to\" or \"can\". It is not a requirement."
  },
  "heuristicallyCacheable": {
    "codes": [
      "200",
      "203",
      "204",
      "206",
      "300",
      "301",
      "308",
      "404",
      "405",
      "410",
      "414",
      "501"
    ],
    "source": "RFC 9110",
    "section": "15.1",
    "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.1",
    "quote": "Responses with status codes that are defined as heuristically cacheable (e.g., 200, 203, 204, 206, 300, 301, 308, 404, 405, 410, 414, and 501 in this specification) can be reused by a cache with heuristic expiration unless otherwise indicated by the method definition or explicit cache controls [CACHING]; all other status codes are not heuristically cacheable."
  },
  "classRules": [
    {
      "class": "1xx",
      "rules": [
        {
          "id": "1xx-http10",
          "keyword": "MUST NOT",
          "role": "server",
          "subject": "response",
          "condition": "The client uses HTTP/1.0.",
          "rule": "Do not send any 1xx response to an HTTP/1.0 client.",
          "quote": "Since HTTP/1.0 did not define any 1xx status codes, a server MUST NOT send a 1xx response to an HTTP/1.0 client.",
          "source": "RFC 9110",
          "section": "15.2",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.2",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#1xx-http10"
        },
        {
          "id": "1xx-content",
          "keyword": "none",
          "role": "sender",
          "subject": "content",
          "condition": null,
          "rule": "A 1xx response ends at its header section. It has no content and no trailers.",
          "quote": "A 1xx response is terminated by the end of the header section; it cannot contain content or trailers.",
          "source": "RFC 9110",
          "section": "15.2",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.2",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#1xx-content"
        },
        {
          "id": "1xx-client-parse",
          "keyword": "MUST",
          "role": "client",
          "subject": "response handling",
          "condition": null,
          "rule": "Parse one or more 1xx responses before the final response, even when none was expected.",
          "quote": "A client MUST be able to parse one or more 1xx responses received prior to a final response, even if the client does not expect one.",
          "source": "RFC 9110",
          "section": "15.2",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.2",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#1xx-client-parse"
        },
        {
          "id": "1xx-proxy-forward",
          "keyword": "MUST",
          "role": "proxy",
          "subject": "forwarding",
          "condition": "Unless the proxy itself requested the 1xx.",
          "rule": "Forward 1xx responses to the client.",
          "quote": "A proxy MUST forward 1xx responses unless the proxy itself requested the generation of the 1xx response.",
          "source": "RFC 9110",
          "section": "15.2",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.2",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#1xx-proxy-forward"
        }
      ]
    },
    {
      "class": "4xx",
      "rules": [
        {
          "id": "4xx-explanation",
          "keyword": "SHOULD",
          "role": "server",
          "subject": "content",
          "condition": "Any request except HEAD.",
          "rule": "Send a representation explaining the error and whether it is temporary or permanent.",
          "quote": "Except when responding to a HEAD request, the server SHOULD send a representation containing an explanation of the error situation, and whether it is a temporary or permanent condition.",
          "source": "RFC 9110",
          "section": "15.5",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#4xx-explanation"
        }
      ]
    },
    {
      "class": "5xx",
      "rules": [
        {
          "id": "5xx-explanation",
          "keyword": "SHOULD",
          "role": "server",
          "subject": "content",
          "condition": "Any request except HEAD.",
          "rule": "Send a representation explaining the error and whether it is temporary or permanent.",
          "quote": "Except when responding to a HEAD request, the server SHOULD send a representation containing an explanation of the error situation, and whether it is a temporary or permanent condition.",
          "source": "RFC 9110",
          "section": "15.6",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.6",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#5xx-explanation"
        }
      ]
    }
  ],
  "codes": [
    {
      "code": "100",
      "name": "Continue",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.2.1",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.2.1"
      },
      "pageURL": "https://httpstatuses.net/100/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#100",
      "heuristicallyCacheable": false,
      "rules": [

      ]
    },
    {
      "code": "101",
      "name": "Switching Protocols",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.2.2",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.2.2"
      },
      "pageURL": "https://httpstatuses.net/101/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#101",
      "heuristicallyCacheable": false,
      "rules": [
        {
          "id": "101-upgrade",
          "keyword": "MUST",
          "role": "server",
          "subject": "Upgrade",
          "condition": null,
          "rule": "Send Upgrade naming the protocol or protocols in effect after this response.",
          "quote": "The server MUST generate an Upgrade header field in the response that indicates which protocol(s) will be in effect after this response.",
          "source": "RFC 9110",
          "section": "15.2.2",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.2.2",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#101-upgrade"
        }
      ]
    },
    {
      "code": "200",
      "name": "OK",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.3.1",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.3.1"
      },
      "pageURL": "https://httpstatuses.net/200/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#200",
      "heuristicallyCacheable": true,
      "rules": [
        {
          "id": "200-validators",
          "keyword": "SHOULD",
          "role": "origin server",
          "subject": "ETag, Last-Modified",
          "condition": "Responses to GET or HEAD.",
          "rule": "Send any available validator fields. A strong ETag plus Last-Modified is preferred.",
          "quote": "In 200 responses to GET or HEAD, an origin server SHOULD send any available validator fields (Section 8.8) for the selected representation, with both a strong entity tag and a Last-Modified date being preferred.",
          "source": "RFC 9110",
          "section": "15.3.1",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.3.1",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#200-validators"
        }
      ]
    },
    {
      "code": "201",
      "name": "Created",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.3.2",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.3.2"
      },
      "pageURL": "https://httpstatuses.net/201/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#201",
      "heuristicallyCacheable": false,
      "rules": [
        {
          "id": "201-location",
          "keyword": "none",
          "role": "sender",
          "subject": "Location",
          "condition": null,
          "rule": "The 201 definition does not require Location. Location identifies the primary created resource; without it, the target URI does.",
          "quote": "The primary resource created by the request is identified by either a Location header field in the response or, if no Location header field is received, by the target URI.",
          "source": "RFC 9110",
          "section": "15.3.2",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.3.2",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#201-location"
        },
        {
          "id": "201-post-location",
          "keyword": "SHOULD",
          "role": "origin server",
          "subject": "Location, content",
          "condition": "A POST created one or more resources.",
          "rule": "Answer with 201, a Location for the primary resource, and content that describes the request status and refers to the new resource.",
          "quote": "If one or more resources has been created on the origin server as a result of successfully processing a POST request, the origin server SHOULD send a 201 (Created) response containing a Location header field that provides an identifier for the primary resource created (Section 10.2.2) and a representation that describes the status of the request while referring to the new resource(s).",
          "source": "RFC 9110",
          "section": "9.3.3",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-9.3.3",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#201-post-location"
        },
        {
          "id": "201-put-create",
          "keyword": "MUST",
          "role": "origin server",
          "subject": "status",
          "condition": "A PUT created a representation where none existed.",
          "rule": "Answer with 201.",
          "quote": "If the target resource does not have a current representation and the PUT successfully creates one, then the origin server MUST inform the user agent by sending a 201 (Created) response.",
          "source": "RFC 9110",
          "section": "9.3.4",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-9.3.4",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#201-put-create"
        }
      ]
    },
    {
      "code": "202",
      "name": "Accepted",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.3.3",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.3.3"
      },
      "pageURL": "https://httpstatuses.net/202/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#202",
      "heuristicallyCacheable": false,
      "rules": [
        {
          "id": "202-content",
          "keyword": "none",
          "role": "sender",
          "subject": "content",
          "condition": null,
          "rule": "Describe the current status of the request and point to, or embed, a status monitor. RFC 9110 says \"ought to\", which is not a BCP 14 keyword.",
          "quote": "The representation sent with this response ought to describe the request's current status and point to (or embed) a status monitor that can provide the user with an estimate of when the request will be fulfilled.",
          "source": "RFC 9110",
          "section": "15.3.3",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.3.3",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#202-content"
        }
      ]
    },
    {
      "code": "203",
      "name": "Non-Authoritative Information",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.3.4",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.3.4"
      },
      "pageURL": "https://httpstatuses.net/203/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#203",
      "heuristicallyCacheable": true,
      "rules": [

      ]
    },
    {
      "code": "204",
      "name": "No Content",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.3.5",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.3.5"
      },
      "pageURL": "https://httpstatuses.net/204/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#204",
      "heuristicallyCacheable": true,
      "rules": [
        {
          "id": "204-content",
          "keyword": "none",
          "role": "sender",
          "subject": "content",
          "condition": null,
          "rule": "A 204 response ends at its header section. It has no content and no trailers.",
          "quote": "A 204 response is terminated by the end of the header section; it cannot contain content or trailers.",
          "source": "RFC 9110",
          "section": "15.3.5",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.3.5",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#204-content"
        }
      ]
    },
    {
      "code": "205",
      "name": "Reset Content",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.3.6",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.3.6"
      },
      "pageURL": "https://httpstatuses.net/205/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#205",
      "heuristicallyCacheable": false,
      "rules": [
        {
          "id": "205-content",
          "keyword": "MUST NOT",
          "role": "server",
          "subject": "content",
          "condition": null,
          "rule": "Do not generate content.",
          "quote": "Since the 205 status code implies that no additional content will be provided, a server MUST NOT generate content in a 205 response.",
          "source": "RFC 9110",
          "section": "15.3.6",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.3.6",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#205-content"
        }
      ]
    },
    {
      "code": "206",
      "name": "Partial Content",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.3.7",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.3.7"
      },
      "pageURL": "https://httpstatuses.net/206/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#206",
      "heuristicallyCacheable": true,
      "rules": [
        {
          "id": "206-200-fields",
          "keyword": "MUST",
          "role": "server",
          "subject": "Date, Cache-Control, ETag, Expires, Content-Location, Vary",
          "condition": "Each field that a 200 response to the same request would have sent.",
          "rule": "Send those fields, in addition to the part-specific fields below.",
          "quote": "A server that generates a 206 response MUST generate the following header fields, in addition to those required in the subsections below, if the field would have been sent in a 200 (OK) response to the same request: Date, Cache-Control, ETag, Expires, Content-Location, and Vary.",
          "source": "RFC 9110",
          "section": "15.3.7",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.3.7",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#206-200-fields"
        },
        {
          "id": "206-if-range",
          "keyword": "SHOULD NOT",
          "role": "sender",
          "subject": "representation header fields",
          "condition": "The request had If-Range.",
          "rule": "Do not send representation header fields beyond the required ones; the client already has them.",
          "quote": "A sender that generates a 206 response to a request with an If-Range header field SHOULD NOT generate other representation header fields beyond those required because the client already has a prior response containing those header fields.",
          "source": "RFC 9110",
          "section": "15.3.7",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.3.7",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#206-if-range"
        },
        {
          "id": "206-representation-fields",
          "keyword": "MUST",
          "role": "sender",
          "subject": "representation header fields",
          "condition": "The request had no If-Range.",
          "rule": "Send every representation header field that a 200 response would have sent.",
          "quote": "Otherwise, a sender MUST generate all of the representation header fields that would have been sent in a 200 (OK) response to the same request.",
          "source": "RFC 9110",
          "section": "15.3.7",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.3.7",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#206-representation-fields"
        },
        {
          "id": "206-single-part",
          "keyword": "MUST",
          "role": "server",
          "subject": "Content-Range, content",
          "condition": "One part is sent.",
          "rule": "Send Content-Range for the enclosed range, with that range as the content.",
          "quote": "If a single part is being transferred, the server generating the 206 response MUST generate a Content-Range header field, describing what range of the selected representation is enclosed, and a content consisting of the range.",
          "source": "RFC 9110",
          "section": "15.3.7.1",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.3.7.1",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#206-single-part"
        },
        {
          "id": "206-multipart",
          "keyword": "MUST",
          "role": "server",
          "subject": "Content-Type, content",
          "condition": "Multiple parts are sent.",
          "rule": "Send multipart/byteranges content and a Content-Type of multipart/byteranges with its boundary parameter.",
          "quote": "If multiple parts are being transferred, the server generating the 206 response MUST generate \"multipart/byteranges\" content, as defined in Section 14.6, and a Content-Type header field containing the \"multipart/byteranges\" media type and its required boundary parameter.",
          "source": "RFC 9110",
          "section": "15.3.7.2",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.3.7.2",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#206-multipart"
        },
        {
          "id": "206-multipart-no-header-range",
          "keyword": "MUST NOT",
          "role": "server",
          "subject": "Content-Range",
          "condition": "Multiple parts are sent.",
          "rule": "Do not put Content-Range in the response header section. Each part carries its own.",
          "quote": "To avoid confusion with single-part responses, a server MUST NOT generate a Content-Range header field in the HTTP header section of a multiple part response (this field will be sent in each part instead).",
          "source": "RFC 9110",
          "section": "15.3.7.2",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.3.7.2",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#206-multipart-no-header-range"
        },
        {
          "id": "206-part-content-range",
          "keyword": "MUST",
          "role": "server",
          "subject": "Content-Range",
          "condition": "Multiple parts are sent.",
          "rule": "Send Content-Range in the header area of each body part.",
          "quote": "Within the header area of each body part in the multipart content, the server MUST generate a Content-Range header field corresponding to the range being enclosed in that body part.",
          "source": "RFC 9110",
          "section": "15.3.7.2",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.3.7.2",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#206-part-content-range"
        },
        {
          "id": "206-part-content-type",
          "keyword": "SHOULD",
          "role": "server",
          "subject": "Content-Type",
          "condition": "Multiple parts are sent, and a 200 response would have had Content-Type.",
          "rule": "Send that same Content-Type in the header area of each body part.",
          "quote": "If the selected representation would have had a Content-Type header field in a 200 (OK) response, the server SHOULD generate that same Content-Type header field in the header area of each body part.",
          "source": "RFC 9110",
          "section": "15.3.7.2",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.3.7.2",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#206-part-content-type"
        },
        {
          "id": "206-part-order",
          "keyword": "SHOULD",
          "role": "server",
          "subject": "content",
          "condition": "Multiple parts are sent.",
          "rule": "Send the parts in the order the ranges appeared in the Range header, leaving out unsatisfiable or coalesced ranges.",
          "quote": "A server that generates a multipart response SHOULD send the parts in the same order that the corresponding range-spec appeared in the received Range header field, excluding those ranges that were deemed unsatisfiable or that were coalesced into other ranges.",
          "source": "RFC 9110",
          "section": "15.3.7.2",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.3.7.2",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#206-part-order"
        },
        {
          "id": "206-coalesce",
          "keyword": "MAY",
          "role": "server",
          "subject": "content",
          "condition": "Multiple ranges were requested.",
          "rule": "Coalesce ranges that overlap or are separated by a gap smaller than the multipart overhead.",
          "quote": "When multiple ranges are requested, a server MAY coalesce any of the ranges that overlap, or that are separated by a gap that is smaller than the overhead of sending multiple parts, regardless of the order in which the corresponding range-spec appeared in the received Range header field.",
          "source": "RFC 9110",
          "section": "15.3.7.2",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.3.7.2",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#206-coalesce"
        },
        {
          "id": "206-single-range-request",
          "keyword": "MUST NOT",
          "role": "server",
          "subject": "content",
          "condition": "The request asked for one range.",
          "rule": "Do not send a multipart response.",
          "quote": "A server MUST NOT generate a multipart response to a request for a single range, since a client that does not request multiple parts might not support multipart responses.",
          "source": "RFC 9110",
          "section": "15.3.7.2",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.3.7.2",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#206-single-range-request"
        },
        {
          "id": "206-single-body-part",
          "keyword": "MAY",
          "role": "server",
          "subject": "content",
          "condition": "Multiple ranges were requested, but only one was satisfiable or one remained after coalescing.",
          "rule": "Send a multipart/byteranges response with a single body part.",
          "quote": "However, a server MAY generate a \"multipart/byteranges\" response with only a single body part if multiple ranges were requested and only one range was found to be satisfiable or only one range remained after coalescing.",
          "source": "RFC 9110",
          "section": "15.3.7.2",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.3.7.2",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#206-single-body-part"
        },
        {
          "id": "206-client-inspect",
          "keyword": "MUST",
          "role": "client",
          "subject": "Content-Type, Content-Range",
          "condition": null,
          "rule": "Read Content-Type and Content-Range to see which parts arrived and whether more requests are needed.",
          "quote": "A client MUST inspect a 206 response's Content-Type and Content-Range field(s) to determine what parts are enclosed and whether additional requests are needed.",
          "source": "RFC 9110",
          "section": "15.3.7",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.3.7",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#206-client-inspect"
        }
      ]
    },
    {
      "code": "300",
      "name": "Multiple Choices",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.4.1",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.4.1"
      },
      "pageURL": "https://httpstatuses.net/300/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#300",
      "heuristicallyCacheable": true,
      "rules": [
        {
          "id": "300-location",
          "keyword": "SHOULD",
          "role": "server",
          "subject": "Location",
          "condition": "The server has a preferred choice.",
          "rule": "Send Location with the preferred choice's URI reference.",
          "quote": "If the server has a preferred choice, the server SHOULD generate a Location header field containing a preferred choice's URI reference.",
          "source": "RFC 9110",
          "section": "15.4.1",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.4.1",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#300-location"
        },
        {
          "id": "300-content",
          "keyword": "SHOULD",
          "role": "server",
          "subject": "content",
          "condition": "Any request method except HEAD.",
          "rule": "Send content listing the available representations and their URI references.",
          "quote": "For request methods other than HEAD, the server SHOULD generate content in the 300 response containing a list of representation metadata and URI reference(s) from which the user or user agent can choose the one most preferred.",
          "source": "RFC 9110",
          "section": "15.4.1",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.4.1",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#300-content"
        }
      ]
    },
    {
      "code": "301",
      "name": "Moved Permanently",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.4.2",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.4.2"
      },
      "pageURL": "https://httpstatuses.net/301/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#301",
      "heuristicallyCacheable": true,
      "rules": [
        {
          "id": "301-location",
          "keyword": "SHOULD",
          "role": "server",
          "subject": "Location",
          "condition": null,
          "rule": "Send Location with the new permanent URI.",
          "quote": "The server SHOULD generate a Location header field in the response containing a preferred URI reference for the new permanent URI.",
          "source": "RFC 9110",
          "section": "15.4.2",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.4.2",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#301-location"
        }
      ]
    },
    {
      "code": "302",
      "name": "Found",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.4.3",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.4.3"
      },
      "pageURL": "https://httpstatuses.net/302/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#302",
      "heuristicallyCacheable": false,
      "rules": [
        {
          "id": "302-location",
          "keyword": "SHOULD",
          "role": "server",
          "subject": "Location",
          "condition": null,
          "rule": "Send Location with the temporary URI.",
          "quote": "The server SHOULD generate a Location header field in the response containing a URI reference for the different URI.",
          "source": "RFC 9110",
          "section": "15.4.3",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.4.3",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#302-location"
        }
      ]
    },
    {
      "code": "303",
      "name": "See Other",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.4.4",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.4.4"
      },
      "pageURL": "https://httpstatuses.net/303/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#303",
      "heuristicallyCacheable": false,
      "rules": [
        {
          "id": "303-location",
          "keyword": "none",
          "role": "sender",
          "subject": "Location",
          "condition": null,
          "rule": "303 is defined by the URI in Location, which the client fetches as the indirect response. RFC 9110 states no separate keyword for it.",
          "quote": "The 303 (See Other) status code indicates that the server is redirecting the user agent to a different resource, as indicated by a URI in the Location header field, which is intended to provide an indirect response to the original request.",
          "source": "RFC 9110",
          "section": "15.4.4",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.4.4",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#303-location"
        },
        {
          "id": "303-content",
          "keyword": "none",
          "role": "sender",
          "subject": "content",
          "condition": "Any request except HEAD.",
          "rule": "Include a short hypertext note linking to the Location URI. RFC 9110 says \"ought to\", which is not a BCP 14 keyword.",
          "quote": "Except for responses to a HEAD request, the representation of a 303 response ought to contain a short hypertext note with a hyperlink to the same URI reference provided in the Location header field.",
          "source": "RFC 9110",
          "section": "15.4.4",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.4.4",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#303-content"
        }
      ]
    },
    {
      "code": "304",
      "name": "Not Modified",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.4.5",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.4.5"
      },
      "pageURL": "https://httpstatuses.net/304/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#304",
      "heuristicallyCacheable": false,
      "rules": [
        {
          "id": "304-200-fields",
          "keyword": "MUST",
          "role": "server",
          "subject": "Content-Location, Date, ETag, Vary, Cache-Control, Expires",
          "condition": "Each field that a 200 response to the same request would have sent.",
          "rule": "Send those fields.",
          "quote": "The server generating a 304 response MUST generate any of the following header fields that would have been sent in a 200 (OK) response to the same request: * Content-Location, Date, ETag, and Vary * Cache-Control and Expires (see [CACHING])",
          "source": "RFC 9110",
          "section": "15.4.5",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.4.5",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#304-200-fields"
        },
        {
          "id": "304-other-metadata",
          "keyword": "SHOULD NOT",
          "role": "sender",
          "subject": "representation metadata",
          "condition": "Unless the metadata guides cache updates, such as Last-Modified when there is no ETag.",
          "rule": "Do not send other representation metadata.",
          "quote": "Since the goal of a 304 response is to minimize information transfer when the recipient already has one or more cached representations, a sender SHOULD NOT generate representation metadata other than the above listed fields unless said metadata exists for the purpose of guiding cache updates (e.g., Last-Modified might be useful if the response does not have an ETag field).",
          "source": "RFC 9110",
          "section": "15.4.5",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.4.5",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#304-other-metadata"
        },
        {
          "id": "304-content",
          "keyword": "none",
          "role": "sender",
          "subject": "content",
          "condition": null,
          "rule": "A 304 response ends at its header section. It has no content and no trailers.",
          "quote": "A 304 response is terminated by the end of the header section; it cannot contain content or trailers.",
          "source": "RFC 9110",
          "section": "15.4.5",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.4.5",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#304-content"
        },
        {
          "id": "304-proxy-forward",
          "keyword": "SHOULD",
          "role": "proxy",
          "subject": "forwarding",
          "condition": "The conditional request came from an outbound client, such as a user agent with its own cache.",
          "rule": "Forward the 304 to that client.",
          "quote": "If the conditional request originated with an outbound client, such as a user agent with its own cache sending a conditional GET to a shared proxy, then the proxy SHOULD forward the 304 response to that client.",
          "source": "RFC 9110",
          "section": "15.4.5",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.4.5",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#304-proxy-forward"
        }
      ]
    },
    {
      "code": "305",
      "name": "Use Proxy",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.4.6",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.4.6"
      },
      "pageURL": "https://httpstatuses.net/305/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#305",
      "heuristicallyCacheable": false,
      "rules": [

      ]
    },
    {
      "code": "306",
      "name": "(Unused)",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.4.7",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.4.7"
      },
      "pageURL": "https://httpstatuses.net/306/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#306",
      "heuristicallyCacheable": false,
      "rules": [

      ]
    },
    {
      "code": "307",
      "name": "Temporary Redirect",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.4.8",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.4.8"
      },
      "pageURL": "https://httpstatuses.net/307/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#307",
      "heuristicallyCacheable": false,
      "rules": [
        {
          "id": "307-location",
          "keyword": "SHOULD",
          "role": "server",
          "subject": "Location",
          "condition": null,
          "rule": "Send Location with the temporary URI.",
          "quote": "The server SHOULD generate a Location header field in the response containing a URI reference for the different URI.",
          "source": "RFC 9110",
          "section": "15.4.8",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.4.8",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#307-location"
        },
        {
          "id": "307-method",
          "keyword": "MUST NOT",
          "role": "user agent",
          "subject": "request method",
          "condition": "The user agent follows the 307 automatically.",
          "rule": "Keep the original request method.",
          "quote": "The 307 (Temporary Redirect) status code indicates that the target resource resides temporarily under a different URI and the user agent MUST NOT change the request method if it performs an automatic redirection to that URI.",
          "source": "RFC 9110",
          "section": "15.4.8",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.4.8",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#307-method"
        }
      ]
    },
    {
      "code": "308",
      "name": "Permanent Redirect",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.4.9",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.4.9"
      },
      "pageURL": "https://httpstatuses.net/308/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#308",
      "heuristicallyCacheable": true,
      "rules": [
        {
          "id": "308-location",
          "keyword": "SHOULD",
          "role": "server",
          "subject": "Location",
          "condition": null,
          "rule": "Send Location with the new permanent URI.",
          "quote": "The server SHOULD generate a Location header field in the response containing a preferred URI reference for the new permanent URI.",
          "source": "RFC 9110",
          "section": "15.4.9",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.4.9",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#308-location"
        }
      ]
    },
    {
      "code": "400",
      "name": "Bad Request",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.5.1",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.1"
      },
      "pageURL": "https://httpstatuses.net/400/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#400",
      "heuristicallyCacheable": false,
      "rules": [

      ]
    },
    {
      "code": "401",
      "name": "Unauthorized",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.5.2",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.2"
      },
      "pageURL": "https://httpstatuses.net/401/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#401",
      "heuristicallyCacheable": false,
      "rules": [
        {
          "id": "401-www-authenticate",
          "keyword": "MUST",
          "role": "server",
          "subject": "WWW-Authenticate",
          "condition": null,
          "rule": "Send WWW-Authenticate with at least one challenge for the target resource.",
          "quote": "The server generating a 401 response MUST send a WWW-Authenticate header field (Section 11.6.1) containing at least one challenge applicable to the target resource.",
          "source": "RFC 9110",
          "section": "15.5.2",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.2",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#401-www-authenticate"
        }
      ]
    },
    {
      "code": "402",
      "name": "Payment Required",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.5.3",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.3"
      },
      "pageURL": "https://httpstatuses.net/402/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#402",
      "heuristicallyCacheable": false,
      "rules": [

      ]
    },
    {
      "code": "403",
      "name": "Forbidden",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.5.4",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.4"
      },
      "pageURL": "https://httpstatuses.net/403/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#403",
      "heuristicallyCacheable": false,
      "rules": [

      ]
    },
    {
      "code": "404",
      "name": "Not Found",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.5.5",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.5"
      },
      "pageURL": "https://httpstatuses.net/404/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#404",
      "heuristicallyCacheable": true,
      "rules": [

      ]
    },
    {
      "code": "405",
      "name": "Method Not Allowed",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.5.6",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.6"
      },
      "pageURL": "https://httpstatuses.net/405/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#405",
      "heuristicallyCacheable": true,
      "rules": [
        {
          "id": "405-allow",
          "keyword": "MUST",
          "role": "origin server",
          "subject": "Allow",
          "condition": null,
          "rule": "Send Allow listing the methods the target resource supports now.",
          "quote": "The origin server MUST generate an Allow header field in a 405 response containing a list of the target resource's currently supported methods.",
          "source": "RFC 9110",
          "section": "15.5.6",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.6",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#405-allow"
        }
      ]
    },
    {
      "code": "406",
      "name": "Not Acceptable",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.5.7",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.7"
      },
      "pageURL": "https://httpstatuses.net/406/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#406",
      "heuristicallyCacheable": false,
      "rules": [
        {
          "id": "406-content",
          "keyword": "SHOULD",
          "role": "server",
          "subject": "content",
          "condition": null,
          "rule": "Send content listing the available representations and their resource identifiers.",
          "quote": "The server SHOULD generate content containing a list of available representation characteristics and corresponding resource identifiers from which the user or user agent can choose the one most appropriate.",
          "source": "RFC 9110",
          "section": "15.5.7",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.7",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#406-content"
        }
      ]
    },
    {
      "code": "407",
      "name": "Proxy Authentication Required",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.5.8",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.8"
      },
      "pageURL": "https://httpstatuses.net/407/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#407",
      "heuristicallyCacheable": false,
      "rules": [
        {
          "id": "407-proxy-authenticate",
          "keyword": "MUST",
          "role": "proxy",
          "subject": "Proxy-Authenticate",
          "condition": null,
          "rule": "Send Proxy-Authenticate with a challenge for that proxy.",
          "quote": "The proxy MUST send a Proxy-Authenticate header field (Section 11.7.1) containing a challenge applicable to that proxy for the request.",
          "source": "RFC 9110",
          "section": "15.5.8",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.8",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#407-proxy-authenticate"
        }
      ]
    },
    {
      "code": "408",
      "name": "Request Timeout",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.5.9",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.9"
      },
      "pageURL": "https://httpstatuses.net/408/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#408",
      "heuristicallyCacheable": false,
      "rules": [

      ]
    },
    {
      "code": "409",
      "name": "Conflict",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.5.10",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.10"
      },
      "pageURL": "https://httpstatuses.net/409/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#409",
      "heuristicallyCacheable": false,
      "rules": [
        {
          "id": "409-content",
          "keyword": "SHOULD",
          "role": "server",
          "subject": "content",
          "condition": null,
          "rule": "Send content that lets the user recognize the source of the conflict.",
          "quote": "The server SHOULD generate content that includes enough information for a user to recognize the source of the conflict.",
          "source": "RFC 9110",
          "section": "15.5.10",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.10",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#409-content"
        }
      ]
    },
    {
      "code": "410",
      "name": "Gone",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.5.11",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.11"
      },
      "pageURL": "https://httpstatuses.net/410/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#410",
      "heuristicallyCacheable": true,
      "rules": [

      ]
    },
    {
      "code": "411",
      "name": "Length Required",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.5.12",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.12"
      },
      "pageURL": "https://httpstatuses.net/411/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#411",
      "heuristicallyCacheable": false,
      "rules": [

      ]
    },
    {
      "code": "412",
      "name": "Precondition Failed",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.5.13",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.13"
      },
      "pageURL": "https://httpstatuses.net/412/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#412",
      "heuristicallyCacheable": false,
      "rules": [

      ]
    },
    {
      "code": "413",
      "name": "Content Too Large",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.5.14",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.14"
      },
      "pageURL": "https://httpstatuses.net/413/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#413",
      "heuristicallyCacheable": false,
      "rules": [
        {
          "id": "413-retry-after",
          "keyword": "SHOULD",
          "role": "server",
          "subject": "Retry-After",
          "condition": "The condition is temporary.",
          "rule": "Send Retry-After to say the limit is temporary and when the client can try again.",
          "quote": "If the condition is temporary, the server SHOULD generate a Retry-After header field to indicate that it is temporary and after what time the client MAY try again.",
          "source": "RFC 9110",
          "section": "15.5.14",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.14",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#413-retry-after"
        }
      ]
    },
    {
      "code": "414",
      "name": "URI Too Long",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.5.15",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.15"
      },
      "pageURL": "https://httpstatuses.net/414/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#414",
      "heuristicallyCacheable": true,
      "rules": [

      ]
    },
    {
      "code": "415",
      "name": "Unsupported Media Type",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.5.16",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.16"
      },
      "pageURL": "https://httpstatuses.net/415/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#415",
      "heuristicallyCacheable": false,
      "rules": [
        {
          "id": "415-accept-encoding",
          "keyword": "none",
          "role": "server",
          "subject": "Accept-Encoding",
          "condition": "An unsupported content coding caused the 415.",
          "rule": "Use Accept-Encoding to list the codings that would have worked. RFC 9110 says \"ought to\", which is not a BCP 14 keyword.",
          "quote": "If the problem was caused by an unsupported content coding, the Accept-Encoding response header field (Section 12.5.3) ought to be used to indicate which (if any) content codings would have been accepted in the request.",
          "source": "RFC 9110",
          "section": "15.5.16",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.16",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#415-accept-encoding"
        },
        {
          "id": "415-accept",
          "keyword": "none",
          "role": "server",
          "subject": "Accept",
          "condition": "An unsupported media type caused the 415.",
          "rule": "Accept can list the media types that would have worked. Optional.",
          "quote": "On the other hand, if the cause was an unsupported media type, the Accept response header field (Section 12.5.1) can be used to indicate which media types would have been accepted in the request.",
          "source": "RFC 9110",
          "section": "15.5.16",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.16",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#415-accept"
        }
      ]
    },
    {
      "code": "416",
      "name": "Range Not Satisfiable",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.5.17",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.17"
      },
      "pageURL": "https://httpstatuses.net/416/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#416",
      "heuristicallyCacheable": false,
      "rules": [
        {
          "id": "416-content-range",
          "keyword": "SHOULD",
          "role": "server",
          "subject": "Content-Range",
          "condition": "The request was a byte-range request.",
          "rule": "Send Content-Range with the current length, for example bytes */47022.",
          "quote": "A server that generates a 416 response to a byte-range request SHOULD generate a Content-Range header field specifying the current length of the selected representation (Section 14.4).",
          "source": "RFC 9110",
          "section": "15.5.17",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.17",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#416-content-range"
        }
      ]
    },
    {
      "code": "417",
      "name": "Expectation Failed",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.5.18",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.18"
      },
      "pageURL": "https://httpstatuses.net/417/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#417",
      "heuristicallyCacheable": false,
      "rules": [

      ]
    },
    {
      "code": "418",
      "name": "(Unused)",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.5.19",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.19"
      },
      "pageURL": "https://httpstatuses.net/418/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#418",
      "heuristicallyCacheable": false,
      "rules": [

      ]
    },
    {
      "code": "421",
      "name": "Misdirected Request",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.5.20",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.20"
      },
      "pageURL": "https://httpstatuses.net/421/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#421",
      "heuristicallyCacheable": false,
      "rules": [
        {
          "id": "421-proxy",
          "keyword": "MUST NOT",
          "role": "proxy",
          "subject": "response",
          "condition": null,
          "rule": "Do not generate a 421.",
          "quote": "A proxy MUST NOT generate a 421 response.",
          "source": "RFC 9110",
          "section": "15.5.20",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.20",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#421-proxy"
        }
      ]
    },
    {
      "code": "422",
      "name": "Unprocessable Content",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.5.21",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.21"
      },
      "pageURL": "https://httpstatuses.net/422/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#422",
      "heuristicallyCacheable": false,
      "rules": [

      ]
    },
    {
      "code": "426",
      "name": "Upgrade Required",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.5.22",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.22"
      },
      "pageURL": "https://httpstatuses.net/426/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#426",
      "heuristicallyCacheable": false,
      "rules": [
        {
          "id": "426-upgrade",
          "keyword": "MUST",
          "role": "server",
          "subject": "Upgrade",
          "condition": null,
          "rule": "Send Upgrade naming the required protocol or protocols.",
          "quote": "The server MUST send an Upgrade header field in a 426 response to indicate the required protocol(s) (Section 7.8).",
          "source": "RFC 9110",
          "section": "15.5.22",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.22",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#426-upgrade"
        }
      ]
    },
    {
      "code": "428",
      "name": "Precondition Required",
      "definedIn": {
        "source": "RFC 6585",
        "section": "3",
        "url": "https://www.rfc-editor.org/rfc/rfc6585.html#section-3"
      },
      "pageURL": "https://httpstatuses.net/428/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#428",
      "heuristicallyCacheable": false,
      "rules": [
        {
          "id": "428-content",
          "keyword": "SHOULD",
          "role": "server",
          "subject": "content",
          "condition": null,
          "rule": "Explain how to resubmit the request successfully.",
          "quote": "Responses using this status code SHOULD explain how to resubmit the request successfully.",
          "source": "RFC 6585",
          "section": "3",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc6585.html#section-3",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#428-content"
        },
        {
          "id": "428-cache",
          "keyword": "MUST NOT",
          "role": "cache",
          "subject": "storage",
          "condition": null,
          "rule": "Do not store the response.",
          "quote": "Responses with the 428 status code MUST NOT be stored by a cache.",
          "source": "RFC 6585",
          "section": "3",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc6585.html#section-3",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#428-cache"
        }
      ]
    },
    {
      "code": "429",
      "name": "Too Many Requests",
      "definedIn": {
        "source": "RFC 6585",
        "section": "4",
        "url": "https://www.rfc-editor.org/rfc/rfc6585.html#section-4"
      },
      "pageURL": "https://httpstatuses.net/429/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#429",
      "heuristicallyCacheable": false,
      "rules": [
        {
          "id": "429-content",
          "keyword": "SHOULD",
          "role": "server",
          "subject": "content",
          "condition": null,
          "rule": "Explain the rate limit in the response content.",
          "quote": "The response representations SHOULD include details explaining the condition, and MAY include a Retry-After header indicating how long to wait before making a new request.",
          "source": "RFC 6585",
          "section": "4",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc6585.html#section-4",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#429-content"
        },
        {
          "id": "429-retry-after",
          "keyword": "MAY",
          "role": "server",
          "subject": "Retry-After",
          "condition": null,
          "rule": "Send Retry-After with how long to wait. Optional.",
          "quote": "The response representations SHOULD include details explaining the condition, and MAY include a Retry-After header indicating how long to wait before making a new request.",
          "source": "RFC 6585",
          "section": "4",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc6585.html#section-4",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#429-retry-after"
        },
        {
          "id": "429-cache",
          "keyword": "MUST NOT",
          "role": "cache",
          "subject": "storage",
          "condition": null,
          "rule": "Do not store the response.",
          "quote": "Responses with the 429 status code MUST NOT be stored by a cache.",
          "source": "RFC 6585",
          "section": "4",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc6585.html#section-4",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#429-cache"
        }
      ]
    },
    {
      "code": "431",
      "name": "Request Header Fields Too Large",
      "definedIn": {
        "source": "RFC 6585",
        "section": "5",
        "url": "https://www.rfc-editor.org/rfc/rfc6585.html#section-5"
      },
      "pageURL": "https://httpstatuses.net/431/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#431",
      "heuristicallyCacheable": false,
      "rules": [
        {
          "id": "431-content",
          "keyword": "SHOULD",
          "role": "server",
          "subject": "content",
          "condition": "A single header field is too large.",
          "rule": "Name the header field that was too large.",
          "quote": "In the latter case, the response representation SHOULD specify which header field was too large.",
          "source": "RFC 6585",
          "section": "5",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc6585.html#section-5",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#431-content"
        },
        {
          "id": "431-cache",
          "keyword": "MUST NOT",
          "role": "cache",
          "subject": "storage",
          "condition": null,
          "rule": "Do not store the response.",
          "quote": "Responses with the 431 status code MUST NOT be stored by a cache.",
          "source": "RFC 6585",
          "section": "5",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc6585.html#section-5",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#431-cache"
        }
      ]
    },
    {
      "code": "500",
      "name": "Internal Server Error",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.6.1",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.6.1"
      },
      "pageURL": "https://httpstatuses.net/500/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#500",
      "heuristicallyCacheable": false,
      "rules": [

      ]
    },
    {
      "code": "501",
      "name": "Not Implemented",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.6.2",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.6.2"
      },
      "pageURL": "https://httpstatuses.net/501/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#501",
      "heuristicallyCacheable": true,
      "rules": [

      ]
    },
    {
      "code": "502",
      "name": "Bad Gateway",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.6.3",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.6.3"
      },
      "pageURL": "https://httpstatuses.net/502/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#502",
      "heuristicallyCacheable": false,
      "rules": [

      ]
    },
    {
      "code": "503",
      "name": "Service Unavailable",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.6.4",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.6.4"
      },
      "pageURL": "https://httpstatuses.net/503/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#503",
      "heuristicallyCacheable": false,
      "rules": [
        {
          "id": "503-retry-after",
          "keyword": "MAY",
          "role": "server",
          "subject": "Retry-After",
          "condition": null,
          "rule": "Send Retry-After with a suggested wait. Optional.",
          "quote": "The server MAY send a Retry-After header field (Section 10.2.3) to suggest an appropriate amount of time for the client to wait before retrying the request.",
          "source": "RFC 9110",
          "section": "15.6.4",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.6.4",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#503-retry-after"
        }
      ]
    },
    {
      "code": "504",
      "name": "Gateway Timeout",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.6.5",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.6.5"
      },
      "pageURL": "https://httpstatuses.net/504/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#504",
      "heuristicallyCacheable": false,
      "rules": [

      ]
    },
    {
      "code": "505",
      "name": "HTTP Version Not Supported",
      "definedIn": {
        "source": "RFC 9110",
        "section": "15.6.6",
        "url": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.6.6"
      },
      "pageURL": "https://httpstatuses.net/505/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#505",
      "heuristicallyCacheable": false,
      "rules": [
        {
          "id": "505-content",
          "keyword": "SHOULD",
          "role": "server",
          "subject": "content",
          "condition": null,
          "rule": "Explain why the HTTP version is not supported and which protocols are.",
          "quote": "The server SHOULD generate a representation for the 505 response that describes why that version is not supported and what other protocols are supported by that server.",
          "source": "RFC 9110",
          "section": "15.6.6",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc9110.html#section-15.6.6",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#505-content"
        }
      ]
    },
    {
      "code": "511",
      "name": "Network Authentication Required",
      "definedIn": {
        "source": "RFC 6585",
        "section": "6",
        "url": "https://www.rfc-editor.org/rfc/rfc6585.html#section-6"
      },
      "pageURL": "https://httpstatuses.net/511/",
      "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#511",
      "heuristicallyCacheable": false,
      "rules": [
        {
          "id": "511-content",
          "keyword": "SHOULD",
          "role": "intercepting proxy",
          "subject": "content",
          "condition": null,
          "rule": "Link to a resource where the user can submit credentials.",
          "quote": "The response representation SHOULD contain a link to a resource that allows the user to submit credentials (e.g., with an HTML form).",
          "source": "RFC 6585",
          "section": "6",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc6585.html#section-6",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#511-content"
        },
        {
          "id": "511-no-challenge",
          "keyword": "SHOULD NOT",
          "role": "intercepting proxy",
          "subject": "content",
          "condition": null,
          "rule": "Do not include a challenge or the login interface itself.",
          "quote": "Note that the 511 response SHOULD NOT contain a challenge or the login interface itself, because browsers would show the login interface as being associated with the originally requested URL, which may cause confusion.",
          "source": "RFC 6585",
          "section": "6",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc6585.html#section-6",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#511-no-challenge"
        },
        {
          "id": "511-origin-server",
          "keyword": "SHOULD NOT",
          "role": "origin server",
          "subject": "response",
          "condition": null,
          "rule": "Do not generate 511. It is for intercepting proxies that control network access.",
          "quote": "The 511 status SHOULD NOT be generated by origin servers; it is intended for use by intercepting proxies that are interposed as a means of controlling access to the network.",
          "source": "RFC 6585",
          "section": "6",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc6585.html#section-6",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#511-origin-server"
        },
        {
          "id": "511-cache",
          "keyword": "MUST NOT",
          "role": "cache",
          "subject": "storage",
          "condition": null,
          "rule": "Do not store the response.",
          "quote": "Responses with the 511 status code MUST NOT be stored by a cache.",
          "source": "RFC 6585",
          "section": "6",
          "sourceURL": "https://www.rfc-editor.org/rfc/rfc6585.html#section-6",
          "anchorURL": "https://httpstatuses.net/guides/status-code-response-obligations/#511-cache"
        }
      ]
    }
  ]
}
