Hacker DirectoryHacker Directory

WEB / WEB-07.02

Methods, semantics, and status codes

A method expresses intent; a status communicates the result of that request. Distinguish safe, idempotent, authorized, and completed.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mechanism

Read every scenario without motion

Repeated idempotent PUT

  1. Desired state

    Duru intends to replace the existing note label with Pinned; permission is supplied true.

    Browser / Duru
    PUT: label=Pinned ready; awaiting response
    Atlas Application
    No request
    Resource / local state
    Label: Draft
  2. First PUT arrived

    Replacement request reached the same target; no commit yet.

    Browser / Duru
    PUT: label=Pinned ready; awaiting response
    Atlas Application
    PUT received; policy check
    Resource / local state
    Label: Draft
  3. First replacement

    The allowed action replaces current state with Pinned.

    Browser / Duru
    Awaiting response
    Atlas Application
    Fulfilled; 204 ready
    Resource / local state
    Label: Pinned
  4. 204 arrived

    Success without content or Content-Length; no JSON parsing.

    Browser / Duru
    204 received; no content
    Atlas Application
    Fulfilled; 204 ready
    Resource / local state
    Label: Pinned
  5. Select the identical request

    The example selects the same target and content again; it does not measure loss or retry behavior.

    Browser / Duru
    Identical PUT ready; awaiting response
    Atlas Application
    Fulfilled; 204 ready
    Resource / local state
    Label: Pinned
  6. Repeated PUT arrived

    A new request carries the identical intended replacement.

    Browser / Duru
    Identical PUT ready; awaiting response
    Atlas Application
    Repeated PUT received
    Resource / local state
    Label: Pinned
  7. State remains the same

    The second fulfilled replacement leaves Pinned; audit count is not the idempotence criterion.

    Browser / Duru
    Awaiting response
    Atlas Application
    Repeated fulfillment; 204 ready
    Resource / local state
    Label: Pinned
  8. Second 204 arrived

    This fixture chooses another 204 without claiming a mandatory response-equality rule.

    Browser / Duru
    204 received; intended state unchanged
    Atlas Application
    Repeated fulfillment; 204 ready
    Resource / local state
    Label: Pinned

HEAD metadata, zero content

  1. HEAD intent

    Request representation metadata without GET content transfer.

    Browser / Duru
    HEAD ready; awaiting response
    Atlas Application
    No request
    Resource / local state
    Atlas note: GET 10 bytes
  2. HEAD arrived

    The server retains the request method for response-body rules.

    Browser / Duru
    HEAD ready; awaiting response
    Atlas Application
    HEAD received
    Resource / local state
    Atlas note: GET 10 bytes
  3. Metadata prepared

    200 and Content-Length: 10 describe the would-be GET; actual content is zero.

    Browser / Duru
    Awaiting response
    Atlas Application
    200; CL=10; content=0
    Resource / local state
    Atlas note: GET 10 bytes
  4. HEAD response arrived

    The browser uses request context to interpret the absence of a body.

    Browser / Duru
    200; metadata 10; content 0
    Atlas Application
    200; CL=10; content=0
    Resource / local state
    Atlas note: GET 10 bytes
  5. Use the metadata

    No representation bytes were received; this response is not a JSON document.

    Browser / Duru
    Metadata known; body not retrieved
    Atlas Application
    200; CL=10; content=0
    Resource / local state
    Atlas note: GET 10 bytes

Concealed 404

  1. GET intent

    A public view requests the note; internal existence is withheld from the browser.

    Browser / Duru
    GET ready; existence unknown; awaiting response
    Atlas Application
    No request
    Resource / local state
    Exists=true; disclosure=false
  2. GET arrived

    The Application received the target without committing a response decision.

    Browser / Duru
    GET ready; existence unknown; awaiting response
    Atlas Application
    GET received
    Resource / local state
    Exists=true; disclosure=false
  3. Disclosure policy

    Fixture policy conceals existence and chooses the same public body as its missing-resource row.

    Browser / Duru
    Awaiting response
    Atlas Application
    404 ready: Not found
    Resource / local state
    Exists=true; disclosure=false
  4. 404 arrived

    The Fetch outcome fixture resolves with a Response; ok=false.

    Browser / Duru
    404; ok=false; existence unknown
    Atlas Application
    404 ready: Not found
    Resource / local state
    Exists=true; disclosure=false
  5. Respect the evidence boundary

    The browser knows the public result without inferring actual absence or permanence.

    Browser / Duru
    Public result known; existence unknown
    Atlas Application
    404 ready: Not found
    Resource / local state
    Exists=true; disclosure=false

ACTORS · STATE · DATA FLOW

A method expresses intent toward a resource

GET requests a current representation; HEAD requests retrieval metadata without transferring its content. POST asks a target to process content according to its own semantics. PUT asks to create or replace known target state using the supplied representation. DELETE asks to remove the association between the target and current functionality; it does not guarantee erasure of every backup byte.

PATCH carries modification instructions rather than a replacement representation; the patch document media format and endpoint contract matter. PATCH is not generally safe or idempotent, although a specific operation can be designed to be idempotent. The method name alone is insufficient for an automatic-retry guarantee.

OPTIONS describes communication options, CONNECT establishes a tunnel, and TRACE performs message loop-back. A standardized HTTP method is not necessarily usable through browser Fetch, which restricts forbidden methods such as CONNECT and TRACE. A non-null body for GET/HEAD also causes the Fetch Request constructor to throw TypeError. General protocol framing and the browser API contract are separate matters.

Atlas /notes/atlas-1 supports GET, HEAD, and PUT, with permissionAllows=true explicitly supplied. Supported methods and a user’s permissions are different sets. A known method unsupported by the target concerns 405 and Allow; an unrecognized or unimplemented method concerns 501.

Safe and idempotent answer different questions

Safe means that the method’s defined intent is read-only. GET, HEAD, OPTIONS, and TRACE are safe. A server may still write access logs; incidental side effects do not alone invalidate that definition. Resource owners must nevertheless avoid executing requested business mutations through safe methods, which automated retrieval and prefetch also use.

Idempotent means repeated identical requests have the same intended server effect as one request. PUT and DELETE are idempotent alongside safe methods; POST has no general such guarantee. The first PUT can return 204 and another repetition can return a different appropriate status; response bytes need not match. Audit entries or revision history can increase per request.

The fixture twice PUTs label=Pinned to the same target. Resource state is Pinned after either completion, with no third state introduced by repetition. The absence of concurrent writers is explicit. Real updates also need conditional requests and concurrency policy. Idempotence does not remove permission checks, and safe does not imply public access to confidential data.

Status classes communicate results, not every underlying fact

1xx supplies interim information; 2xx signals success; 3xx describes redirection or related additional action; 4xx indicates perceived client error; 5xx indicates server error. Read numeric status with method and headers. 201 signals creation; 202 does not promise completed processing. 204 signals fulfillment without additional content.

401 concerns missing valid authentication credentials and requires an applicable WWW-Authenticate challenge. 403 means the request was understood but fulfillment refused, possibly for reasons unrelated to credentials. 404 can mean no current representation was found or existence is deliberately undisclosed; it also does not distinguish temporary from permanent absence. Fixtures with internal exists=true and exists=false return the same 404 body without exposing that difference.

405 concerns target method support, 409 conflict with current resource state, and 415 an unsupported request format. 422 concerns unprocessable instructions in understood, syntactically valid content. Document the application’s mapping; an error response alone proves neither an attack nor a server defect.

Body rules and the browser result

A HEAD response cannot carry content. Content-Length: 10 here describes the 10 bytes that the corresponding GET would have transferred; HEAD’s expected body is zero bytes. If that field is sent for HEAD, it must match the would-be GET content length. A 204 cannot contain content or trailers, and the server cannot send Content-Length; adding Content-Length: 0 is not the correct way to express this rule.

Fetch normally does not reject for an HTTP error status: an arrived 404 resolves the Promise with a Response. Response.ok only means status 200–299; a business job can remain pending after 202. Network errors and aborts follow separate failure paths. Parsing content as JSON is another operation; avoid parsing nonexistent HEAD/204 content.

For an idempotent request, repetition semantics help when a connection fails before the response is received: the first operation may already have applied. Automatically repeating a non-idempotent action merely because no response arrived has no general guarantee. A specific action’s idempotency or status-reconciliation contract requires separate evaluation.

2. Red · Trust & Impact

Read every scenario without motion

Safe / rights

  1. A method property is not permission

    A safe/idempotent GET still needs resource permission for a confidential note. Artifact permissionAllows=true is supplied; the safe label grants no user entitlement.

    Method/status evidence
    GET safe / permission separate
    Intent/completion gate
    No business gate
    Business outcome
    No outcome
  2. Status was not promoted to completion

    Safe intent requests no state mutation. Incidental logging can occur; applying permission only to write methods leaves a protected-read gate missing.

    Method/status evidence
    GET safe / permission separate
    Intent/completion gate
    Read entitlement required
    Business outcome
    No outcome
  3. Retry requires an operation contract

    PUT desiredState label=Pinned has the same intended effect across two attempts. General POST/PATCH does not inherit that property; particular operations can be designed more narrowly as idempotent.

    Method/status evidence
    GET safe / permission separate
    Intent/completion gate
    Read entitlement required
    Business outcome
    PUT desired state / POST guarantee absent
  4. 404 preserves public equivalence

    The privacy404 example returns the same 404 and Not found result when internalExists is true or false. Inferring resource existence from that public status misreads the concealment policy.

    Method/status evidence
    404 / existence unknown
    Intent/completion gate
    Read entitlement required
    Business outcome
    PUT desired state / POST guarantee absent
  5. Content rules are separate from completion

    HEAD 200 may carry wouldBeGetOctets=10 but has actualContentOctets=0. PUT 204 has responseContent=null; 204 provides no empty JSON object to parse.

    Method/status evidence
    404 / existence unknown
    Intent/completion gate
    HEAD no content / 204 no content
    Business outcome
    PUT desired state / POST guarantee absent
  6. Failure and intent classes were retained

    A network-error rejected Promise leaves server effects unknown. Method/status/operation contracts are explained separately; no malformed requests, external retries or live mutations are generated.

    Method/status evidence
    404 / existence unknown
    Intent/completion gate
    HEAD no content / 204 no content
    Business outcome
    Method semantics / business unknown

202 completion

  1. The 202 HTTP outcome was selected

    fetchOutcomes[0] resolves with a 202 Response and ok=true. The status describes acceptance for processing; businessCompleted=false is a separate field in the same row. HTTP success range and job completion answer different questions.

    Method/status evidence
    202; resolved-response; ok true
    Intent/completion gate
    Completion not yet reviewed
    Business outcome
    BusinessCompleted false
  2. Accepted is not promoted to completed

    With businessCompleted=false, this example cannot display “job completed.” Response.ok tests only the 200–299 range. Establishing completion needs application state under the operation’s contract.

    Method/status evidence
    202; resolved-response; ok true
    Intent/completion gate
    Accepted; no completion
    Business outcome
    BusinessCompleted false
  3. Action effects depend on their own contract

    A separate PUT comparison shows intended effects Draft→Pinned and Pinned→Pinned. That method property establishes neither completion of another action returning 202 nor general POST/PATCH repetition guarantees. These rows are not combined as one operation.

    Method/status evidence
    Separate comparison: PUT replacement
    Intent/completion gate
    202 still accepted; no completion
    Business outcome
    BusinessCompleted false
  4. HTTP404 and network rejection differ

    fetchOutcomes[1] resolves with a 404 Response and ok=false. fetchOutcomes[2] rejects with a network error and no known response status; server effects are unknown. These negative comparisons are not new events changing the 202 operation’s application state.

    Method/status evidence
    404 Response / network rejection separate
    Intent/completion gate
    202 accepted; separate outcome rows
    Business outcome
    202 business false; network effect unknown
  5. A retry decision needs more than a generic assumption

    An operation lacking a response may already have applied. Evaluate repetition using the method’s intended effect and operation contract; neither 202 nor a rejected Promise means “nothing ran.” This review executes no new request or action.

    Method/status evidence
    202/404/network rows retained separately
    Intent/completion gate
    Completion and retry require a contract
    Business outcome
    202 business false; network effect unknown
  6. The application producer establishes completion

    HTTP endpoints and Fetch outcomes provide status/Promise results. The application producer managing job or resource state establishes completion; without evidence matched to the same operation, completion is unknown. The supplied 202 row retains businessCompleted=false.

    Method/status evidence
    HTTP status and Promise classified separately
    Intent/completion gate
    Producer: application state; coverage required
    Business outcome
    202 accepted; business not completed

ASSUMPTION · BOUNDARY · CONTROL

A read-only label is not an access grant

A confidential note can be retrieved with GET. Safe means the client did not request state mutation; it says nothing about sensitivity or ownership. Checking permissions only on write methods leaves protected reads uncovered.

The control is a trusted permission decision for each resource/action and avoidance of requested mutation on safe routes. The supplied permissionAllows=true fixture is not proof of identity verification or an authorization engine. This lesson uses harmless note metadata.

Do not turn retry or status into an incorrect acceptance gate

A normal PUT replacement reaches the same desired state. Assuming every POST shares that guarantee, or that 202 means completion, can duplicate a business action or falsely report an unfinished job as completed. Impact depends on application semantics.

Client controls depend on method, operation contract, and completion evidence. With a generic 404, the client cannot assert resource absence. Defensive review separates internal decision reasons from public results without disclosing hidden existence in the response body.

3. Blue · Secure development & defense

Read every scenario without motion

PUT state effect

  1. Method context was selected first

    The fixture assumes permission for /notes/atlas-1 and no concurrent writer. GET, HEAD and PUT still use different method/content contracts. The assumptions are not actual authorization or concurrency tests.

    Operation evidence
    Method + resource context
    Effect/content review
    No effect/byte review
    Status-contract review
    No verdict
  2. State effects or metadata were checked

    The first PUT attempt changes Draft to Pinned; the second retains Pinned. Idempotence is assessed through the intended state effect rather than equality of response strings.

    Operation evidence
    Method + resource context
    Effect/content review
    Draft→Pinned / Pinned→Pinned
    Status-contract review
    No verdict
  3. The absence of 204 content was recorded

    Each PUT attempt has 204 and responseContent=null with responseContentLengthField=null. A JSON-body observation is not added to a no-content status.

    Operation evidence
    204 / content null
    Effect/content review
    Draft→Pinned / Pinned→Pinned
    Status-contract review
    No verdict
  4. The second replacement preserves the intended result

    Both attempts refer to the same resource and label=Pinned representation, with supplied concurrentWriters=false. The second intended effect still yields Pinned. Audit count or status text does not replace this state comparison.

    Operation evidence
    204 / content null
    Effect/content review
    Draft→Pinned / Pinned→Pinned
    Status-contract review
    No verdict
  5. The state result comes from the application

    In an actual review, the application layer changing the resource produces before/after state evidence. Client receipt of 204 signals fulfillment but does not alone measure state history or persistence durability. Match state evidence to the same target and representation.

    Operation evidence
    204 / content null
    Effect/content review
    Draft→Pinned / Pinned→Pinned
    Status-contract review
    Producer: application state; persistence outside scope
  6. Semantic regression retained intended scope

    Repeated PUT retains Pinned, and both 204 responses contain no content. These two attempts do not verify concurrent writers or the complete business persistence process.

    Operation evidence
    204 / content null
    Effect/content review
    Draft→Pinned / Pinned→Pinned
    Status-contract review
    PUT effect consistent / concurrent scope omitted

HEAD metadata

  1. HEAD was selected for the same resource

    HEAD /notes/atlas-1 requests representation metadata without transferring GET content. The example has wouldBeGetBody=Atlas note and wouldBeGetOctets=10; permission is a supplied predicate, not an actual account decision.

    Operation evidence
    HEAD /notes/atlas-1; GET 10 bytes
    Effect/content review
    Metadata and actual bytes separate
    Status-contract review
    Coverage not yet reviewed
  2. State effects or metadata were checked

    HEAD has status 200, contentLengthField=10, actualContentOctets=0. Metadata may describe a would-be GET representation; it does not imply 10 delivered content bytes.

    Operation evidence
    HEAD /notes/atlas-1; GET 10 bytes
    Effect/content review
    HEAD metadata10 / actual0
    Status-contract review
    No verdict
  3. HEAD metadata is not content-byte receipt

    contentLengthField=10 describes the would-be GET length; actualContentOctets=0 records that HEAD carries no content. HEAD 200 and PUT 204 are distinct method/status contexts; the 204 null content field is not copied into the HEAD row.

    Operation evidence
    HEAD /notes/atlas-1; GET 10 bytes
    Effect/content review
    HEAD 200; CL 10; actual content 0
    Status-contract review
    HEAD has metadata; no body
  4. Negative fixtures were separated from coverage

    The HEAD actualContentOctets>0 predicate flags a supplied inconsistent row. Zero matches from missing rows do not establish measured compliance with the content rule.

    Operation evidence
    HEAD /notes/atlas-1; GET 10 bytes
    Effect/content review
    HEAD predicate / coverage separate
    Status-contract review
    HEAD has metadata; no body
  5. Method context and capture scope are required

    The server HTTP producer supplies method/status and would-be GET metadata; the client or a capture with known scope provides actual body-receipt evidence. Losing HEAD context can turn Content-Length into a false delivered-byte count. A zero selector match does not fill missing record coverage.

    Operation evidence
    HEAD /notes/atlas-1; GET 10 bytes
    Effect/content review
    HEAD metadata / capture completeness separate
    Status-contract review
    Producer: server + client/capture; coverage required
  6. Semantic regression retained intended scope

    The HEAD metadata/content distinction agrees in the supplied case. Full capture completeness and actual client/server instrumentation need separate evidence.

    Operation evidence
    HEAD /notes/atlas-1; GET 10 bytes
    Effect/content review
    HEAD metadata / capture completeness separate
    Status-contract review
    HEAD metadata consistent / capture unproven

IMPLEMENTATION · SECURITY CONTROL · VERIFICATION

Correlate method, status, and actual state change

Check intended state effects rather than identical response text when assessing idempotence. The artifact records labels before and after two PUT completions. HEAD observations separate wouldBeGetOctets=10 from actualContentOctets=0. These are instructional records, not an access-log standard.

The XPath selects inconsistent HEAD observations with actualContentOctets>0. Negative and positive fixtures yield 0 and 1 respectively; a missing observation returning 0 cannot verify the body rule. Real traffic requires capture completeness and instrumented server/client context.

Complete the status catalog with the product contract

Compare PUT repetition, HEAD metadata, and 404 public equivalence in the manual exercise. Do not translate 202 into completed, 404 into definitely absent, or 204 into an empty JSON object. Connect results and user-facing messages to the documented application contract.

Read Allow in a 405 as evidence of target method support, not a user’s permission list. A 401 challenge, 403 refusal, and concealed 404 can reflect different operational decisions. Status distributions alone do not diagnose causes; normal client validation and transient service failures can produce the same classes.

NOW APPLY IT TO THE CASE

Which different evidence do method properties and business completion need?

Reading the Atlas note requires permission that the safe GET label does not grant. Repeated PUT retains the Pinned state. A 202 response does not establish completion, and HEAD metadata is not delivered content.

Evaluate the case’s 200, media type and parse-error records separately. Use representation rules to identify the remaining condition for usable data.

Open the related case file ↗

READ THE EXAMPLE TOGETHER

Method decision ledger: PUT, HEAD, and concealed 404

Select a field and examine what it supports and where the evidence ends.

Read the raw artifact and field explanations
{
  "resource": "/notes/atlas-1",
  "permissionAllows": true,
  "concurrentWriters": false,
  "methods": [
    {
      "method": "GET",
      "safe": true,
      "idempotent": true
    },
    {
      "method": "HEAD",
      "safe": true,
      "idempotent": true
    },
    {
      "method": "POST",
      "safe": false,
      "idempotent": false
    },
    {
      "method": "PUT",
      "safe": false,
      "idempotent": true
    },
    {
      "method": "DELETE",
      "safe": false,
      "idempotent": true
    },
    {
      "method": "PATCH",
      "safe": false,
      "idempotent": false,
      "scope": "General method property; particular PATCH operations can be designed to be idempotent."
    },
    {
      "method": "OPTIONS",
      "safe": true,
      "idempotent": true
    },
    {
      "method": "TRACE",
      "safe": true,
      "idempotent": true
    },
    {
      "method": "CONNECT",
      "safe": false,
      "idempotent": false
    }
  ],
  "put": {
    "desiredState": {
      "label": "Pinned"
    },
    "attempts": [
      {
        "before": "Draft",
        "after": "Pinned",
        "status": 204,
        "responseContent": null,
        "responseContentLengthField": null
      },
      {
        "before": "Pinned",
        "after": "Pinned",
        "status": 204,
        "responseContent": null,
        "responseContentLengthField": null
      }
    ]
  },
  "head": {
    "method": "HEAD",
    "status": 200,
    "contentType": "text/plain; charset=utf-8",
    "contentLengthField": 10,
    "wouldBeGetBody": "Atlas note",
    "wouldBeGetOctets": 10,
    "actualContentOctets": 0
  },
  "privacy404": [
    {
      "internalExists": true,
      "internalDisclosureAllowed": false,
      "status": 404,
      "publicBody": "Not found"
    },
    {
      "internalExists": false,
      "internalDisclosureAllowed": false,
      "status": 404,
      "publicBody": "Not found"
    }
  ],
  "fetchOutcomes": [
    {
      "status": 202,
      "promiseOutcome": "resolved-response",
      "ok": true,
      "businessCompleted": false
    },
    {
      "status": 404,
      "promiseOutcome": "resolved-response",
      "ok": false,
      "existenceConclusion": "unknown"
    },
    {
      "status": null,
      "promiseOutcome": "rejected-network-error",
      "ok": null,
      "serverEffectConclusion": "unknown"
    }
  ],
  "selector": {
    "language": "XPath",
    "xml": "<observations><response method=\"HEAD\" actualContentOctets=\"0\"/></observations>",
    "xpath": "count(/observations/response[@method=\"HEAD\" and number(@actualContentOctets)>0])",
    "expected": 0,
    "positiveFixtureXml": "<observations><response method=\"HEAD\" actualContentOctets=\"1\"/></observations>",
    "positiveExpected": 1,
    "scope": "Only authored protocol-decision observations, not product log field names or a live HTTP capture.",
    "missingFieldBehavior": "Missing observation is insufficient evidence; zero matches is not proof of correct runtime behavior."
  }
}
methods.safe / idempotent
Standard method intent, not a guarantee of permission, encryption, or every API implementation.
put.attempts
Intended state after two replacements with no concurrent writer.
head.contentLengthField
Would-be GET metadata, not the size of transferred HEAD content.
privacy404
Different internal states mapped to the same public status/body.
fetchOutcomes
HTTP outcome, Promise outcome, and business completion kept separate.

Permissions are supplied and replacement is in process. Fetch outcomes are source-grounded fixtures rather than browser/network execution. Equal generic bodies measure neither timing nor complete privacy.

Two reality checks

An idempotent request always returns the same response.

The same intended server effect is required; status and audit/revision side effects may differ. Permission checks still apply.

404 proves absence and makes Fetch reject because it is an error.

404 can conceal existence and normally resolves with a Response. Response.ok is false; network errors are separate.

YOUR TURN

Work through this story.

Predict the outcome, find the evidence boundary, and explain it in your own words.

The same PUT sets Pinned twice; both return 204. Does idempotence mean identical response bytes?

  1. No; the repeated intended server effect is the same.
  2. Yes; an idempotent method fixes all response headers/body.
Read the explained answer

No; the repeated intended server effect is the same. — The fixture shows Draft→Pinned and Pinned→Pinned; idempotence is not a response-equality guarantee.

HEAD has Content-Length 10 but actualContentOctets 0. Is that contradictory?

Selected lesson artifact fields; teaching example

head
{"method":"HEAD","status":200,"contentType":"text/plain; charset=utf-8","contentLengthField":10,"wouldBeGetBody":"Atlas note","wouldBeGetOctets":10,"actualContentOctets":0}
  1. Yes; HEAD must carry 10 content octets.
  2. No; Content-Length describes the selected GET-body length, while HEAD carries no content.
Read the explained answer

No; Content-Length describes the selected GET-body length, while HEAD carries no content. — WouldBeGetOctets=10 is metadata; actualContentOctets=0 is consistent with HEAD semantics.

What can be inferred about business completion and internal existence from 202 and public 404 outcomes?

Read the explained answer

202 may indicate acceptance while businessCompleted remains false. Public 404 is identical in this fixture for a missing resource and a disclosure-denied resource; existence is unknown. Both statuses come from a received Response; 404 alone is not a fetch rejection.

□ I did not count 202 as completion.

□ I inferred no definite internal absence from 404.

Open the application console · request / response / browser
Also open request, URL, cookie and DOM examples

Sources and scope

  • RFC 9110 — HTTP Semantics9.1 Overview · 9.2.1 Safe Methods · 9.2.2 Idempotent Methods · 9.3.2 HEAD · 9.3.3 POST · 9.3.4 PUT · 9.3.5 DELETE · 8.6 Content-Length · 15 Status Codes · 15.3.3 202 Accepted · 15.3.5 204 No Content · 15.5.2 401 Unauthorized · 15.5.4 403 Forbidden · 15.5.5 404 Not Found · 15.5.6 405 Method Not Allowed · 15.5.16 415 Unsupported Media Type · 15.5.21 422 Unprocessable Content
  • RFC 9112 — HTTP/1.16.3 Message Body Length
  • WHATWG — Fetch Standard (official source)Methods: safe and CORS-safelisted methods · Request constructor: GET/HEAD non-null body throws TypeError · Response.ok getter: ok status · Fetch methods: processResponse network error rejects promise
  • MDN — Window: fetch() methodWindow: fetch() method · Return value
  • RFC 5789 — PATCH Method for HTTP2 The PATCH Method