Skip to content

wasi/http: document wasmtime-compat hazards — set-connect-timeout trap, transport reachability differences #231

Description

@lannbot

Companion to the behavioral issues from the wasmtime-wasi-http 47.0.3 comparison (#227, #228, #229, #230): these items are working as intended (or inherent to fetch), but guests and embedders arriving from the wasmtime ecosystem will trip on them. They belong in docs (docs/consumers.md and/or the module header at wasi/src/http.ts:40-60), not in code.

1. set-connect-timeoutnot-supported is a compat trap

Spec-legal (the WIT says an error return indicates the timeout is not supported), and correctly recorded in the module header — but wasmtime accepts the call (600s default semantics), so guest code written against wasmtime that unconditionally unwraps the result traps here. Worth an explicit consumer-facing note, since it is the most likely first failure a ported guest hits.

2. Transport-level reachability differs from wasmtime by construction

fetch vs raw-TCP-plus-hyper is not just plumbing; it changes which servers are reachable and what they observe:

  • HTTP version: wasmtime is HTTP/1.1 only, hardcoded (p3/request.rs:372); fetch negotiates 1.1/2/3 per platform. h2-only endpoints work here and fail on wasmtime; header casing/connection-header behavior differs on the wire.
  • Proxies: fetch honors platform proxy config (HTTP_PROXY etc. in Deno/Node); wasmtime dials directly. Corporate-proxied environments diverge.
  • Trust store: platform TLS (OS roots, NODE_EXTRA_CA_CERTS, enterprise MITM certs) vs wasmtime's hardcoded rustls + webpki-roots with no client auth (p3/request.rs:350-356). Custom-CA deployments reach servers here that wasmtime refuses, and vice versa.
  • Connection pooling: fetch pools/keep-alives; wasmtime opens a fresh TCP connection per handle call. Server-side connection accounting and keep-alive behavior differ.

None of this is fixable without abandoning fetch, which is the fragment's whole premise; the ask is a short "reachability and transport differences vs wasmtime" section so embedders can predict it.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentationp3Lowest priority: watchlists, doc-only adjudications, deletion candidates

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions