Install
openclaw skills install httpUse HTTP correctly with proper methods, status codes, headers, and caching.
openclaw skills install httpLocation header with absolute URL—relative may fail in older clientsCache-Control: no-store for sensitive data—never written to diskno-cache still caches but revalidates every time—not "don't cache"private, max-age=0, must-revalidate for user-specific, always-fresh contentpublic, max-age=31536000, immutable for versioned static assetsVary: Accept-Encoding, Authorization when response depends on these headers—forgetting Vary breaks cachingETag + If-None-Match: prefer for APIs—content hash based"abc" vs W/"abc"—weak allows semantically equivalent responsesIf-Match for optimistic locking: fail update if resource changed since readIf-Match fails—not 409 ConflictAccess-Control-Max-Age—set to 86400 to reduce OPTIONS spamStrict-Transport-Security: max-age=31536000; includeSubDomains—HSTS, once set can't easily undoX-Content-Type-Options: nosniff—prevents MIME sniffing attacksX-Frame-Options: DENY or SAMEORIGIN—prevents clickjackingContent-Security-Policy—complex but essential; start with report-only modeAccept-Ranges: bytes signals support—clients can request partial contentRange: bytes=0-1023 requests first 1024 bytes; bytes=-500 requests last 500Content-Range: bytes 0-1023/5000Content-Range: bytes */5000{"error": {"code": "VALIDATION_FAILED", "message": "...", "details": [...]}}Idempotency-Key: <client-generated-uuid>Retry-After header—can be seconds or HTTP dateVary: must include headers that affect response—CORS without Vary: Origin breaksContent-Disposition: attachment; filename="report.pdf" for downloadsX-Request-ID: generate if not present, propagate to downstream servicesAccept-Language for localized responses—respect with graceful fallbackContent-Length or chunked = connection close after responseTransfer-Encoding: chunked for streaming—can't set Content-LengthConnection: Upgrade, Upgrade: websocket