eclipse-vertx/vert.x · warning

425 Unordered Collection (WebDAV, RFC3648)

Error message

425 Unordered Collection (WebDAV, RFC3648)

What it means

SC_UNORDERED_COLLECTION is an HttpResponseExpectation constant for HTTP 425 (WebDAV, RFC3648). It is returned when a server requires requests in a collection to be processed in order and the client sent them out of order. Vert.x provides it so clients can assert or react to this status.

Source

Thrown at vertx-core/src/main/java/io/vertx/core/http/HttpResponseExpectation.java:260

  /**
   * 422 Unprocessable Entity (WebDAV, RFC4918)
   */
  HttpResponseExpectation SC_UNPROCESSABLE_ENTITY = status(422);

  /**
   * 423 Locked (WebDAV, RFC4918)
   */
  HttpResponseExpectation SC_LOCKED = status(423);

  /**
   * 424 Failed Dependency (WebDAV, RFC4918)
   */
  HttpResponseExpectation SC_FAILED_DEPENDENCY = status(424);

  /**
   * 425 Unordered Collection (WebDAV, RFC3648)
   */
  HttpResponseExpectation SC_UNORDERED_COLLECTION = status(425);

  /**
   * 426 Upgrade Required (RFC2817)
   */
  HttpResponseExpectation SC_UPGRADE_REQUIRED = status(426);

  /**
   * 428 Precondition Required (RFC6585)
   */
  HttpResponseExpectation SC_PRECONDITION_REQUIRED = status(428);

  /**
   * 429 Too Many Requests (RFC6585)
   */
  HttpResponseExpectation SC_TOO_MANY_REQUESTS = status(429);

  /**
   * 431 Request Header Fields Too Large (RFC6585)

View on GitHub (pinned to fb308bd8c3)

Solutions

  1. Resend the request(s) in the required order (RFC3648 defines retry as the intended client behavior).
  2. Serialize requests to ordered-collection endpoints instead of issuing them in parallel.
  3. Disable 0-RTT/early data or mark requests as non-replayable if reordering/replay triggers 425.
  4. Use the Early-Data: 1 header handling per RFC to let servers reject safely and retry after handshake.

Example fix

// before
Future.all(send("/a"), send("/b"), send("/c")); // unordered -> 425
// after
send("/a").compose(v -> send("/b")).compose(v -> send("/c"));
Defensive patterns

Strategy: retry

Validate before calling

null

Type guard

boolean is425(HttpClientResponse resp) { return resp.statusCode() == 425; }

Try / catch

sendOrdered().onFailure(err -> {
  if (isCauseStatus(err, 425)) resendInOrder();
});

Prevention

When it happens

Trigger: Sending unordered requests to servers enforcing ordered collections (RFC3648), e.g. HTTP/2 early-data or replayed requests where ordering cannot be guaranteed, or batch writes to a collection that mandates sequencing.

Common situations: Early-data (TLS 1.3 0-RTT) replay protections; clients retrying requests in parallel to ordered-collection endpoints; middleware that reorders requests.

Related errors


AI-assisted analysis of eclipse-vertx/vert.x@fb308bd8c3 (2026-09-06). Data as JSON: /api/errors/1717efcc3f81d525. Report an issue: GitHub.