Тема: http
-
HTTP-Statuscodes richtig verwenden: die erste Verzweigung des Clients
Clients, Caches und Agenten entscheiden allein am Statuscode über Wiederholen, Neuladen oder Aufgeben: 201/204 für Erfolg mit und ohne Körper, 401 gegen 403 für fehlende Anmeldung gegen fehlende Berechtigung, 409/412/428 für Konflikte und Vorbedingungen, 429 und 503 mit Retry-After für «später». Ein 200 mit Fehlerobjekt täuscht alle.
-
Honor Retry-After as a lower bound
Schedule retries from either form of Retry-After while preserving the task deadline and avoiding premature repeated requests.
-
Backing off as a client: Retry-After, RateLimit headers and per-host budgets
How an agent should react to 429 and 503 responses and to advisory rate-limit headers: honour Retry-After exactly, otherwise back off exponentially with jitter, read the RateLimit and RateLimit-Policy fields where a server sends them to pace ahead of the limit, keep a budget per host and per key, and never retry a non-idempotent write without an idempotency key.
-
Сжатие ответов: где выполнять и что исключать
Сжимайте текстовые ответы (HTML, JSON, Markdown) на прокси или в приложении, пропускайте уже сжатый и потоковый контент, обеспечивайте корректность ETag при разных кодированиях и задавайте Vary: Accept-Encoding.
-
Verteiltes Tracing in Umrissen: Spans, Eltern-Kennungen und W3C Trace Context
Ein Trace ist ein Baum aus Spans, jeder mit Trace-Kennung, eigener Span-Kennung, Eltern-Span-Kennung, Zeitstempeln, Attributen und Status; der W3C-Header traceparent trägt Trace-Kennung, Eltern-Kennung und ein Sampled-Flag über Prozessgrenzen, und ein Dienst, der beide Header nur weiterreicht, hält Traces trotzdem zusammen.
-
Custom 404 pages and soft 404s: serve the error page with the error status
A custom 404 page helps users only if it is served with status 404; a not-found page served with 200 is a soft 404 that crawlers keep fetching and search engines exclude. nginx's error_page can rewrite the status (error_page 404 =200 ...), which is exactly how soft 404s are created by accident; keep the status, make the page useful, and check with curl -I.
-
Политика одного источника: что такое источник и что она изолирует
Источник определяется схемой, хостом и портом URL. Скрипт может читать и изменять документы, хранилища и ответы того же источника. Межисточниковое чтение по умолчанию запрещено, тогда как запись, например отправка форм, и встраивание изображений или скриптов обычно разрешены. CORS ослабляет ограничения чтения; защита от CSRF по-прежнему нужна.
-
Using fetch with timeouts and AbortController
A fetch promise rejects only on network failure, not on HTTP error status, and it has no timeout by itself. Pass an AbortSignal combined from AbortSignal.timeout and a caller's controller, check response.ok, and tell TimeoutError, AbortError, network errors and HTTP errors apart in the catch.
-
Idempotente Operationen und sichere Wiederholungen entwerfen
Eine Operation ist idempotent, wenn ihre mehrfache Ausführung dieselbe Wirkung hat wie eine einzelne; RFC 9110 legt das für HTTP-Methoden fest, und ein Idempotency-Key-Header überträgt die Eigenschaft auf POST. Schlüssel samt Fingerabdruck und Ergebnis speichern, Konflikte mit 409 und 422 melden, Schlüssel nach dokumentierter Frist löschen.
-
Server-Sent Events и WebSocket: сравнение
Server-Sent Events передают текстовые события от сервера клиенту по обычному HTTP с автоматическим переподключением и идентификаторами последних событий. WebSocket предоставляет двунаправленный канал с поддержкой двоичных данных и собственным протоколом. Выбирайте SSE для односторонних обновлений, а WebSocket — когда клиенту нужно часто отправлять данные.
-
Calling the TypeSafe API from an agent: request shape, errors, retries and version pinning
The documented contract an agent needs to call Jev without a chat layer: POST /v1/systemone with a Bearer key, a state, a model name and a map of typed questions; answers keyed like the questions plus a usage block; 401, 422, 429 and 529 with exponential backoff; aliases that move and versioned IDs that do not; SDK defaults for retries and the agent skill for coding agents.
-
Заголовок Link и типы отношений ссылок
RFC 8288 позволяет любому ответу HTTP передавать типизированные ссылки в заголовке Link: <target>; rel="relation" с необязательными параметрами anchor, hreflang, type, title и media. Имена отношений берутся из реестра IANA (next, prev, canonical, alternate, describedby, preload), а частные расширения обозначаются абсолютными URI. Так ответы не в HTML указывают на соседние ресурсы, а 103 Early Hints сообщает браузеру, что загрузить заранее.
-
Web Push basics: subscriptions, VAPID keys and the push service
A browser subscribes with its vendor's push service and hands the page an endpoint plus keys; the application server POSTs encrypted messages to that endpoint with a TTL header and a VAPID JWT (ES256, aud = push service origin, exp at most 24 hours) whose public key was passed to PushManager.subscribe as applicationServerKey. A 201 means accepted, not delivered.
-
Sitemaps und kanonische Adressen: ein Inhalt, eine Adresse
Jeder Inhalt sollte genau eine kanonische HTTPS-Adresse haben, die auf der Seite selbst erklärt wird; Zwillinge wie Markdown- oder JSON-Fassungen verweisen per Link-Header darauf, Parameter ohne Inhaltswirkung erzeugen keine neuen Adressen, und die Sitemap listet nur kanonische Adressen mit wahren Änderungsdaten.
-
HEAD и OPTIONS: что они сообщают и зачем нужны клиентам
HEAD — это GET без тела: тот же статус и заголовки, хотя Content-Length и Vary могут отсутствовать. Его можно кешировать; он служит для проверки ссылок, размера и актуальности. OPTIONS спрашивает, какие возможности обмена поддерживает ресурс или весь сервер (OPTIONS *); обычно ответ содержит Allow, не кешируется и используется для предварительных CORS-запросов с Access-Control-Request-Method.
-
URL shortener walk-through: key generation, redirect status and abuse controls
A design walk-through for a URL shortener: random base62 keys with collision retry, a redirect path that touches one cache and one store, 302 rather than 301 when targets must stay revocable and countable, creation-side abuse checks, and a list of what not to build first.
-
Collapsing redirect chains to single hops raises the share of crawler requests that end in a 200 on a large site
Hypothesis: on a site with tens of thousands of URLs and accumulated redirects, rewriting every chain so that each old URL answers with one redirect to its final target measurably increases the share of search-crawler requests that reach a 200 page within a fixed daily request volume, because crawlers spend requests on each hop; a proposed before-and-after test on server logs.
-
JSON Web Tokens: what can go wrong and RFC 8725's answers
JWTs are signed claims, not encrypted secrets; validate the algorithm against an allowlist, verify issuer, audience and expiry, keep lifetimes short, never accept 'none', and remember that a stateless token cannot be revoked without a server-side list.
-
Bulk endpoints and partial failure reporting
A bulk endpoint either succeeds or fails as a whole or reports per-item outcomes; a single 200 cannot express partial success, so choose one behaviour per endpoint, index failures by position, cap batch size, and apply authorisation and rate limits per item.
-
Осознанный выбор кодов состояния HTTP
Коды состояния — первое, по чему клиент выбирает ветвь обработки: 200/201/204 для успеха, 304 для отсутствия изменений, 400/422 для некорректных данных, 401/403 для учётных данных и разрешений соответственно, 404 для отсутствия, 409/412/428 для конфликтов и предусловий, 429/503 для повторения позже.
Машиночитаемо: JSON